FoamFix Core
基本信息
pl.asie.foamfix.coremod.FoamFixCore implements IFMLLoadingPlugin, IFMLCallHook ——
FML 加载插件入口,通过 jar manifest 的 FMLCorePlugin 属性声明。
注解
| 注解 | 值 |
|---|---|
@IFMLLoadingPlugin.Name |
FoamFix/1.7 (Do not report to Forge!) |
@IFMLLoadingPlugin.SortingIndex |
1001 |
@IFMLLoadingPlugin.TransformerExclusions |
{"pl.asie.foamfix"} |
SortingIndex = 1001决定它在 coremod 排序中的位置 —— 数值越小越早加载,这是 mod 间字节码补丁顺序的关键参数。
Manifest 声明
build.gradle:107-109:
FMLCorePlugin = pl.asie.foamfix.coremod.FoamFixCore
FMLCorePluginContainsFMLMod = true
ContainsFMLMod=true 允许同一个 jar 同时是 coremod 与普通 mod ——
这正是本 mod 的形态。
接口实现
| 方法 | 返回 |
|---|---|
getASMTransformerClass() |
BugfixModClassTransformer 的类名 |
getModContainerClass() |
FoamFixCoreContainer |
getSetupClass() |
FoamFixCore(自身) |
getAccessTransformerClass() |
null —— 不使用 AT |
call()(IFMLCallHook) |
null |
injectData:把 FML 数据传入 transformer
BugfixModClassTransformer.instance.settingsFile =
new File(((File) data.get("mcLocation")).getPath() + "/config/foamfix.cfg");
BugfixModClassTransformer.instance.initialize((Boolean) data.get("runtimeDeobfuscationEnabled"));
两个关键点:
mcLocation决定配置文件路径(专用服务器上saves检测的基准)。runtimeDeobfuscationEnabled决定MappingRegistry用 SRG 名还是 MCP 名 —— 开发环境(混淆)下必须走 SRG。
TransformerExclusions 的作用
排除自身包 pl.asie.foamfix,避免自己的类被自己的补丁再次改写。
这 25 个补丁里有几个目标正是 pl.asie.foamfix 下的类
(如 GhostBusterSafeAccessors、LinuxGuiChatBrowseInject),
靠这条排除规则保证它们不被二次处理。
相关条目
源码
src/main/java/pl/asie/foamfix/coremod/FoamFixCore.javabuild.gradle:107-109