GhostBuster Safe Accessors
基本信息
pl.asie.foamfix.ghostbuster.GhostBusterSafeAccessors —— 访问区块时的安全包装,
防止读取未加载区块抛异常或误触发加载。
核心设计
所有方法都以 if (access instanceof World) 分流:
- 是
World→ 先查区块是否加载,未加载则不读; - 不是
World→ 一律返回「已加载 / 空气」的宽松结果。
else 分支返回宽松值(true / Blocks.air)是刻意的兜底,
保证非 World 的 IBlockAccess 实现(如测试桩)不崩。
4 个方法
| 方法 | 行 | 未加载时行为 |
|---|---|---|
isAreaLoaded(IBlockAccess, x, y, z, radius) |
32 | World → checkChunksExist(x-radius, y, z-radius, x+radius, y, z+radius);否则 true |
isBlockLoaded(IBlockAccess, x, y, z) |
40 | World → getChunkProvider().chunkExists(x >> 4, z >> 4);否则 true |
getBlock(IBlockAccess, x, y, z) |
48 | 未加载 → 返回 Blocks.air |
isAirBlock(IBlockAccess, x, y, z) |
52 | 未加载 → 返回 true |
x >> 4/z >> 4是 1.7.10 的区块坐标换算(除 16 向下取整)。
与 GhostBuster 修复的关系
这 4 个方法被注入到流体/草/藤蔓的 updateTick 提前返回补丁里 ——
达到深度上限或区块未加载时,安全返回而不是继续传播,
从而消除幽灵区块加载。
相关条目
源码
src/main/java/pl/asie/foamfix/ghostbuster/GhostBusterSafeAccessors.java