Mapping Registry

基本信息

pl.asie.foamfix.bugfixmod.coremod.MappingRegistry —— 在 MCP 名 与 SRG(混淆)名 之间做查找,供字节码补丁定位目标方法/字段。

静态字段 类型 说明
fieldMap Map<String, String> 类名.字段名 → SRG 名
methodMap Map<String, String> 类名.方法名 → SRG 名
hasInit boolean 单次初始化守卫
isObf boolean 是否处于混淆环境

init(isObf) 的关键行为

if (MappingRegistry.isObf) { /* 只在混淆时填表 */ }

非混淆环境(开发/反编译运行时)完全不填表, getFieldNameFor / getMethodNameFor 在 !isObf 时直接返回请求的 MCP 名。 因此映射表的行数只在混淆运行时有意义。

⚠️ 映射条目按开关条件注册

每条映射都包在对应的 if (settings.XxxEnabled) 里 —— 映射表大小随配置变化。例如 EntityBoat.setIsBoatEmpty 仅当 BoatDesyncFixEnabled 为真才写入 methodMap(func_70270_d)。

「ghost buster - general」三条(Block.updateTick、IBlockAccess.getBlock、 IBlockAccess.isAirBlock)在 isObf 分支内无条件写入。

查询 API

方法 行 说明
getFieldNameFor(String request) 109 入参格式 类名.字段名
getMethodNameFor(String request) 122 入参格式 类名.方法名

两者均在 !isObf 时短路返回原名。

调用者

补丁构造时普遍写成 MappingRegistry.getMethodNameFor("EntityBoat.setIsBoatEmpty"), 见 BugfixMod Class Transformer 的 setupPatchers()。

相关条目

源码

  • src/main/java/pl/asie/foamfix/bugfixmod/coremod/MappingRegistry.java