Extended Section
基本信息
com.mitchej123.supernova.api.ExtendedSection —— mixin 注入
net.minecraft.world.chunk.storage.ExtendedBlockStorage 的接口,
承载**「这个 section 是否有非平凡光照」**的判定。
| 成员 | 行 | 签名 |
|---|---|---|
hasNoBlocks |
9 | boolean supernova$hasNoBlocks() |
setLightNonTrivial |
18 | void supernova$setLightNonTrivial(boolean sky, boolean nonTrivial) |
updateLightNonTrivial |
30 | void supernova$updateLightNonTrivial(boolean sky, boolean rangeNonTrivial, byte[] data, int trivialByte) |
与原版 isEmpty() 的区别
类注释写得很关键:
Vanilla’s original
isEmpty(): no blocks.isEmpty()itself now also requires trivial light.
即 supernova$hasNoBlocks() 保留原版语义(只看方块),
而被改写的 isEmpty() 现在额外要求光照平凡 ——
这样区块才能被判定为「完全空」而整体卸载。
两条写入路径
| 方法 | 触发场景 | 扫描代价 |
|---|---|---|
setLightNonTrivial |
全量写完之后 | O(1),直接置位 |
updateLightNonTrivial |
局部写之后 | 只有在可能清除标志时才 data 全扫 |
updateLightNonTrivial 的 trivialByte 是「所选光照通道的平凡字节值」:
天光为 0xFF,方块光为 0。
两者都要求调用方持有 section 锁(源码 @param 明确写出)。
标志的下游
boolean[] 空区映射由引擎读写:
getEmptinessMap / setEmptinessMap(见
Scalar Engines 与
RGB Engines)。
相关条目
源码
src/main/java/com/mitchej123/supernova/api/ExtendedSection.java