Supernova Chunk

基本信息

com.mitchej123.supernova.light.SupernovaChunk —— mixin 注入 net.minecraft.world.chunk.Chunk 的内部接口, SupernovaChunk extends ExtendedChunk(后者是公开 API,见 Extended Chunk)。

源码类注释:Internal extension of ExtendedChunk exposing nibble storage. Mixed into net.minecraft.world.chunk.Chunk.

状态标志

方法 说明
setLightReady(boolean) 光照已就绪
setLightUsable(boolean) 光照可用(比 ready 更严格)
markLightDirty(boolean sky) 自上次成功保存以来光照已变(sky 区分通道)
clearLightDirty(boolean sky) 清除该标志
syncLightToVanilla() 把 SWMR 可见数据拷回原版 nibble,使区块封包携带正确值

markLightDirty 存在的原因写在源码注释里:原版的 isModified 是 先读后清的(read-then-cleared by the save loop),无法表达 「方块光脏但天光不脏」,所以脏标记由 Supernova 自己持有。

静态重载:不实现时回退原版

两个 static markLightDirty(Chunk, …) 做了 instanceof 判定:

if (chunk instanceof SupernovaChunk) { … } else { chunk.setChunkModified(); }

无参重载对 sky 与 block 两个通道各调一次,即同时标脏。

存储访问器

类别 天光(sky) 方块光(block)
R getSkyNibblesR() 别名 getSkyNibbles() getBlockNibblesR()
G getSkyNibblesG() getBlockNibblesG()
B getSkyNibblesB() getBlockNibblesB()
写入 setSkyNibbles(...) / setSkyNibblesG/B(...) setBlockNibblesR/G/B(...)
空区映射 getSkyEmptinessMap() / setSkyEmptinessMap(boolean[]) getBlockEmptinessMap() / setBlockEmptinessMap(boolean[])

天光 R 别名 getSkyNibbles()(源码注明 R aliases getSkyNibbles()), 因为纯天光 lane 只需一组数组;RGB 方块光则是每通道一组。 类型统一为 SWMRNibbleArray[](见 SWMRNibbleArray)。

相关条目

源码

  • src/main/java/com/mitchej123/supernova/light/SupernovaChunk.java