Face Light Occlusion

基本信息

com.mitchej123.supernova.api.FaceLightOcclusion —— 供其他 mod 实现的 按朝向区分遮光量的方块接口。

成员 行 签名
抽象方法 19 int getDirectionalLightOpacity(int meta, ForgeDirection direction)
默认方法 31 int getDirectionalLightAbsorption(int meta, ForgeDirection direction)

用法

源码类注释写明:这个接口在预计算的 isSideSolid 查表之前被检查 (Checked before the precomputed isSideSolid lookup table.), 即它是快速路径的前置短路,不是兜底。

direction 契约:永不为 UNKNOWN(ForgeDirection.UNKNOWN 不会传入)。

数值约定

getDirectionalLightOpacity 返回 0–255:

返回 含义
0 或 1 该面透明
getLightOpacity() 该面不透明(沿用原版标量值)

默认方法的「均匀化」陷阱

getDirectionalLightAbsorption 有默认实现:

final int scalar = getDirectionalLightOpacity(meta, direction);
return PackedColorLight.pack(scalar, scalar, scalar);

把标量遮光量原样塞进三个 4-bit 通道。但通道只有 4 bit(0–15), 而 getLightOpacity() 可达 255 —— pack() 会截断高位。 因此不覆写该方法时,>15 的遮光量在 RGB 通道里会回绕。 需要真实逐通道吸收的方块必须覆写 getDirectionalLightAbsorption。

返回布局是 0x0R0G0B。

相关条目

源码

  • src/main/java/com/mitchej123/supernova/api/FaceLightOcclusion.java