AngelicaCompatCore

基本信息

属性 值
类名 com.gtnewhorizons.angelicacompat.core.AngelicaCompatCore
实现接口 cpw.mods.fml.relauncher.IFMLLoadingPlugin、com.gtnewhorizon.gtnhmixins.IEarlyMixinLoader
加载时点 FML 加载阶段(LaunchWrapper 调用 getASMTransformerClass / getMixinConfig)
核心配置文件 mixins.angelicacompat.early.json(早期 Mixin)

功能

AngelicaCompat 的真正启动入口。@Mod 入口 AngelicaCompat 只调用 ModStatus.preInit(),所有 ASM transformer 与早期 Mixin 都通过 AngelicaCompatCore 在 FML 启动期装载。

主要职责

  1. 注册 ASM transformer 类数组(getASMTransformerClass):

  2. 注册早期 Mixin(getMixins):

    • 返回 Mixins.getEarlyMixins(loadedCoreMods)。
    • 当前只有 XAEROS_MINIMAP_EARLY 一个早期 Mixin,指向 MixinEntityRenderer_Xaeros。
  3. 类转储(dumpClass):

    • 当 DUMP_CLASSES() 为 true 时,将每个 transformer 改写前后的字节码写入 dump/angelicacompat/<className>-<timestamp>-<transformer>.class;
    • 方便在升级下游 mod 时用 javap -c -p 对比前后差异。
  4. 运行期环境检查(isObfEnv):

    • 通过反射读 Launch blackboard 的 fml.deobfuscatedEnvironment 键决定是否处于 Obf 环境;
    • 供 AsmUtil.obf 在 SRG 字段名 ↔ Deobf 字段名之间切换。
  5. 生命周期常量:

    • DUMP_CLASSES 由 -Dangelica.dumpClass=true 系统属性控制;非 Obf 环境总是 dump(便于 IDE 调试)。

关键方法

方法 行为
getMixinConfig() 返回 "mixins.angelicacompat.early.json"
getMixins(Set<String>) 转发 Mixins.getEarlyMixins(loadedCoreMods)
getASMTransformerClass() 合并通用 AsmTransformers 与各 CompatHandler.extraTransformers() 输出的 transformer 类全限定名
getModContainerClass() null(不提供 mod 容器)
getSetupClass() null
injectData(Map) 空实现
getAccessTransformerClass() null

启动流程(按时间顺序)

  1. LaunchWrapper 加载 AngelicaCompatCore(通过 GTNHMixins 反射)
  2. getASMTransformerClass() → 返回 transformer 类数组 → LaunchWrapper 注册
  3. getMixinConfig() + getMixins() → GTNHMixins 注册早期 Mixin → Mixin 框架织入
  4. 每个 transformer 在被 LaunchWrapper 调用时调用 CompatRegistry.INSTANCE 读取数据 → 改写字节码
  5. AngelicaCompat.@Mod 主类构造 → preInit 阶段调用 ModStatus.preInit()

相关条目