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