ToolDesyncFix Event Handler

基本信息

pl.asie.foamfix.bugfixmod.mod.ToolDesyncFixEventHandler —— 修复「耐久变化导致的客户端/服务端不同步」(Unbreaking 附魔相关)。 仅客户端注册。

方法

方法 行 说明
构造器 38 反射定位 PlayerControllerMP.syncCurrentPlayItem
isValid() 45 定位是否成功
blockBreak(BlockEvent.BreakEvent) 50 事件回调

双名反射定位

syncItemMth = ReflectionHelper.findMethod(
    PlayerControllerMP.class, null, new String[] {"syncCurrentPlayItem", "func_78750_j"});

传入MCP 名与 SRG 名两个候选,让同一份代码在混淆/非混淆环境都能工作 —— 与 Mapping Registry 的思路互补 (这里用 ReflectionHelper 直接双查,不需要映射表)。

注册门槛

FoamFixMod.preinit 里:

if (settings.ToolDesyncFixEnabled) {
    ToolDesyncFixEventHandler handler = new ToolDesyncFixEventHandler();
    if (handler.isValid()) { /* 注册 */ }
    else { logger.error("Could not initialize ToolDesyncFixEventHandler!"); }
}

isValid() 是硬门槛 —— 反射失败则不注册并报错, 不会带着 null 方法继续跑。这是本 mod 里少见的显式防御。

相关条目

源码

  • src/main/java/pl/asie/foamfix/bugfixmod/mod/ToolDesyncFixEventHandler.java