RGB Engines

基本信息

SupernovaBlockEngine / SupernovaSkyEngine —— 三通道彩色光照的两个 可执行引擎实现,对应 Supernova Config 的 lightingMode = RGB(默认值)。

类 文件 行 继承 super(isSky, …)
SupernovaBlockEngine light/engine/SupernovaBlockEngine.java 637 SupernovaRGBEngine super(false, world)(:34)
SupernovaSkyEngine light/engine/SupernovaSkyEngine.java 875 SupernovaRGBEngine super(true, world)(:30)

二者经由中间层 Supernova RGB Engine 继承 SupernovaEngine(对比 Scalar Engines 直接继承基类)。

实例化点

与标量版互为三元分支,见 World Light Manager:

位置 代码
:75 new SupernovaBlockEngine(world, loadedChunkMap, dynamicEmission)
:74 new SupernovaSkyEngine(world, loadedChunkMap)

两者都传 chunkMap,标量版不传 —— 因为 RGB 引擎要逐通道查询 方块的透光/发光,必须走线程安全的区块视图。

引擎内部状态差异

字段 SupernovaBlockEngine SupernovaSkyEngine
safeBlockAccess 有(:31) 有(:29)
dynamicEmission 有(:30) 无
nullPropagationCheckCache 无 有(:29)
BFS 队列 1 << 18 走基类默认 显式扩容 ×2(:30-32)

两个引擎各自 new SafeBlockAccess(chunkMap) (SupernovaBlockEngine:35、SupernovaSkyEngine:31)。

与标量引擎的语义差

SupernovaBlockEngine.emissionAt(...) 直接返回打包色,不做最大值降维:

if (this.dynamicEmission != null && LightColorRegistry.isPositional(blockId)) {
    final Integer sampled = this.dynamicEmission.get(x, y, z);
    if (sampled != null) return sampled;
}
return LightColorRegistry.getPackedEmission(this.safeBlockAccess, block, meta, x, y, z);

SupernovaSkyEngine 覆写 isMaxLight 为 level == WHITE(:34), 即以全白而非标量 15 判满。

相关条目

源码

  • src/main/java/com/mitchej123/supernova/light/engine/SupernovaBlockEngine.java
  • src/main/java/com/mitchej123/supernova/light/engine/SupernovaSkyEngine.java
  • 实例化:src/main/java/com/mitchej123/supernova/light/WorldLightManager.java:74-75