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