GhostBuster

基本信息

GhostBuster 是 FoamFix 里处理「幽灵区块加载」(ghost chunkloading)的子系统, 由 3 个类 + 3 个字节码补丁构成。

命令

/ghostbuster [on|off] —— 仅在 gbEnableDebugger = true 时注册 (FoamFixMod.serverStarting → event.registerServerCommand(new CommandGhostBuster()))。

参数 行为
on GhostBusterLogger.debugChunkProviding = true
off GhostBusterLogger.debugChunkProviding = false
无参数 / 非法参数 打印当前状态

⚠️ 该命令只切换日志开关,不启用任何修复 —— 修复由 gbEnableFixes 等配置项在类加载期决定(见 BugfixMod Settings)。 「开着命令但没开修复」是常见误解。

日志落盘

FoamFixMod.serverStopped 调用 GhostBusterLogger.saveLogFile() —— 服务器停止时才写文件。gbDebuggerLogFilePath 为空则输出到 MC 日志文件。

补丁分工

补丁 目标类 机制
GhostBusterHook net/minecraft/world/gen/ChunkProviderServer.provideChunk 插入 hook 调 GhostBusterLogger.onProvideChunk
GhostBusterWrapStaticLiquid ×2 BlockStaticLiquid(Block.updateTick 与 BlockStaticLiquid.isFlammable) 包装静态流体方法
GhostBusterEarlyReturnPatcher.updateTick ×5 见下表 在 updateTick 开头插入提前返回

5 个 EarlyReturn 目标与递归深度参数

目标类 第二参数 含义
net/minecraft/block/BlockGrass 3 草方块传播深度
biomesoplenty/common/blocks/BlockBOPGrass 3 BOP 草方块
net/minecraft/block/BlockDynamicLiquid 4 源码注释 1.7.10 max slope distance
net/minecraftforge/fluids/BlockFluidClassic 4 源码注释 recursionDepth limit
net/minecraftforge/fluids/BlockFluidFinite 1 有限流体
net/minecraft/block/BlockVine 4 藤蔓

表中 BlockFluidClassic 属 gbFixFluidsModded,其余按对应配置项开关。 第二个参数是递归深度上限,值取自源码实参,不是推测。

⚠️ 第三方目标类

biomesoplenty/common/blocks/BlockBOPGrass 是 Biomes O’ Plenty 的类。 本 mod 无 @Mod 依赖声明(BOP 仅在 gt5 时代可选), 该补丁被 gbFixGrassBOP(默认 true)控制。 若 BOP 未安装,类不存在则补丁不会命中 —— 字节码补丁按类名匹配, 不存在的类不会被加载,因此不会崩;但这是隐式行为,不是显式保护。

相关条目

源码

  • src/main/java/pl/asie/foamfix/ghostbuster/CommandGhostBuster.java
  • src/main/java/pl/asie/foamfix/ghostbuster/GhostBusterLogger.java
  • src/main/java/pl/asie/foamfix/ghostbuster/GhostBusterSafeAccessors.java
  • src/main/java/pl/asie/foamfix/coremod/GhostBusterHookPatcher.java
  • src/main/java/pl/asie/foamfix/coremod/GhostBusterWrapperPatcher.java
  • src/main/java/pl/asie/foamfix/bugfixmod/coremod/patchers/GhostBusterEarlyReturnPatcher.java