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 判满。
相关条目
- Supernova RGB Engine — 中间抽象层
- Scalar Engines
- Engine Internals —
SafeBlockAccess/ 队列编码 - Light Color Registry
源码
src/main/java/com/mitchej123/supernova/light/engine/SupernovaBlockEngine.javasrc/main/java/com/mitchej123/supernova/light/engine/SupernovaSkyEngine.java- 实例化:
src/main/java/com/mitchej123/supernova/light/WorldLightManager.java:74-75