RFB 插件入口

基本信息

属性 值
类名 com.mitchej123.jarjar.rfb.plugin.JarJarRfbPlugin
注册文件 META-INF/rfb-plugin/jarjar.properties
RFB ID JarJar
Transformer 数 6
Logger JarJar (LogManager.getLogger("JarJar"))
关闭开关 -Djarjar.disable=true

JarJarRfbPlugin 是 RetroFuturaBootstrap 在发现 META-INF/rfb-plugin/*.properties 后实例化的入口类,它把 6 个 ASM transformer 注册进 RFB 管线,并在构造阶段往 Launch.blackboard 写入两个标记位:

  • jarjar.rfbPluginLoaded = Boolean.TRUE:告知 JarJar 内部类(如 CoreModManagerV2)RFB 已经接管
  • jarjar.disabled = DISABLED:告知上述类 transformer 已整体关闭

makeTransformers 返回列表

按注册顺序:

  1. EarlyAccessTransformer — 在 ASM 层面把 FML 关键类的私有字段/方法/内部类改为 public
  2. FMLTransformer — 把 CoreModManager/MetadataCollection 静态调用重定向到 V2 版本;整段替换 CoreModManager.handleLaunch 方法体
  3. MixinPlatformAgentTransformer — 让 MixinPlatformAgentFMLLegacy.initFMLCoreMod 直接 return null,避免与 JarJar 重复加载 coremod
  4. V2ConstructionReplacerTransformer — 把 Loader/ModContainerFactory/ModDiscoverer/ASMModParser 的 new/invokespecial 重定向到 V2 子类
  5. CodeChickenCoreTransformer — 在 codechicken.core.ClassDiscoverer.findClasspathMods 注入 Hooks.shouldIgnore 调用
  6. MetadataCollectionTransformer — 给 MetadataCollection.modList 字段补 @SerializedName(modList, alternate=["modlist","ModList"])

关闭条件

当 JVM 启动参数包含 -Djarjar.disable=true:

  • DISABLED = true
  • onConstruction 写 Launch.blackboard.put("jarjar.disabled", Boolean.TRUE) 并打 INFO 日志
  • makeTransformers 返回空数组
  • 内部 V2 类(CoreModManagerV2、LoaderV2 等)会读取 blackboard 跳过替换逻辑(参见 Hooks.shouldIgnore)

rfb-plugin 配置

name=JarJar
version=${version}
className=com.mitchej123.jarjar.rfb.plugin.JarJarRfbPlugin
transformerExclusions=com.gtnewhorizon.gtnhlib.asm.
loadBefore=
loadAfter=
loadRequires=
versionConstraints=

transformerExclusions 让 gtnhlib 的 ASM 常量池工具类不被任何 transformer 重写。

相关条目