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 启动期装载。
主要职责
-
注册 ASM transformer 类数组(
getASMTransformerClass):- 收集 AsmTransformers 中当前应装载的所有 transformer 全限定类名;
- 收集所有 CompatHandlers 中启用的 handler 的
extraTransformers()返回的额外 transformer 类名(如 StacksOnStacksTransformer)。 - 合并后返回给 LaunchWrapper。
-
注册早期 Mixin(
getMixins):- 返回
Mixins.getEarlyMixins(loadedCoreMods)。 - 当前只有
XAEROS_MINIMAP_EARLY一个早期 Mixin,指向 MixinEntityRenderer_Xaeros。
- 返回
-
类转储(
dumpClass):- 当
DUMP_CLASSES()为 true 时,将每个 transformer 改写前后的字节码写入dump/angelicacompat/<className>-<timestamp>-<transformer>.class; - 方便在升级下游 mod 时用
javap -c -p对比前后差异。
- 当
-
运行期环境检查(
isObfEnv):- 通过反射读 Launch
blackboard的fml.deobfuscatedEnvironment键决定是否处于 Obf 环境; - 供 AsmUtil.obf 在 SRG 字段名 ↔ Deobf 字段名之间切换。
- 通过反射读 Launch
-
生命周期常量:
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 |
启动流程(按时间顺序)
- LaunchWrapper 加载
AngelicaCompatCore(通过 GTNHMixins 反射) getASMTransformerClass()→ 返回 transformer 类数组 → LaunchWrapper 注册getMixinConfig()+getMixins()→ GTNHMixins 注册早期 Mixin → Mixin 框架织入- 每个 transformer 在被 LaunchWrapper 调用时调用
CompatRegistry.INSTANCE读取数据 → 改写字节码 AngelicaCompat.@Mod主类构造 →preInit阶段调用ModStatus.preInit()
相关条目
- Mod 入口 - 调用
ModStatus.preInit()的@Mod主类 - ModStatus - preInit 阶段记录的状态位
- PatchesConfig - 7 项
RequiresMcRestart开关 - CompatHandlers -
extraTransformers()来自这里 - AsmTransformers - 通用 transformer 装载枚举
- CompatRegistry - 中央注册表
- MixinCompatHackTweaker - 同为 LaunchWrapper Tweaker
- 所有 ASM transformer 条目 - 它们的装载入口