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"));

两个关键点:

  1. mcLocation 决定配置文件路径(专用服务器上 saves 检测的基准)。
  2. runtimeDeobfuscationEnabled 决定 MappingRegistry 用 SRG 名还是 MCP 名 —— 开发环境(混淆)下必须走 SRG。

TransformerExclusions 的作用

排除自身包 pl.asie.foamfix,避免自己的类被自己的补丁再次改写。 这 25 个补丁里有几个目标正是 pl.asie.foamfix 下的类 (如 GhostBusterSafeAccessors、LinuxGuiChatBrowseInject), 靠这条排除规则保证它们不被二次处理。

相关条目

源码

  • src/main/java/pl/asie/foamfix/coremod/FoamFixCore.java
  • build.gradle:107-109