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