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。
相关条目
- Packed Color Light —
pack()的通道宽度 - Engine Internals —
FaceOcclusion的查表消费方 - RGB Engines
源码
src/main/java/com/mitchej123/supernova/api/FaceLightOcclusion.java