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)。
相关条目
- Extended Chunk — 公开 API 侧
- Extended Section —
ExtendedBlockStorage侧 - SWMRNibbleArray
- Supernova Engine — 通过
getNibblesOnChunk/setNibbles抽象方法操作本接口
源码
src/main/java/com/mitchej123/supernova/light/SupernovaChunk.java