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