NavigatorCore
coremod + early mixin loader;配置注册的 static 块
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.gtnewhorizons.navigator.core.NavigatorCore |
| 行数 | 61 |
| 实现 | IFMLLoadingPlugin + IEarlyMixinLoader |
| 注解 | @IFMLLoadingPlugin.MCVersion("1.7.10")(:17) |
一个类同时扮演两个角色
| 角色 | 由什么实现 |
|---|---|
| FML coremod | IFMLLoadingPlugin(5 个方法) |
| early mixin loader | IEarlyMixinLoader(2 个方法) |
⚠️ 所以本 mod 必须通过 FMLCorePlugin 或
coremods.txt 加载才能注册 early mixin。
若只作为普通 mod 加载,Navigator 的 @Mod
不会调用本类 —— early mixin 全部失效。
五个 IFMLLoadingPlugin 方法
| 方法 | 行 | 返回 | 说明 |
|---|---|---|---|
getASMTransformerClass() |
:30-32 |
new String[0] |
不注入 ASM transformer |
getModContainerClass() |
:35-37 |
null |
无自定义 mod 容器 |
getSetupClass() |
:40-42 |
null |
无 setup 类 |
injectData(Map) |
:45 |
空实现 | 不读 data 里的任何键 |
getAccessTransformerClass() |
:48-50 |
null |
无 AT |
⚠️ injectData 是空实现 ——
GTNHLib Mixins 的 IEarlyMixinLoader 通过 getMixins(Set<String>)
参数拿已加载 coremod,不依赖 injectData,
所以这里空着是安全的(见 :58-60)。
⚠️ 无 Access Transformer ——
与 InGameInfoXML 的
META-INF/igi_at.cfg(3 条字段放开)形成对比:
本 mod 全部靠 Mixin accessor(@Accessor 接口)访问私有成员,
不使用 AT。
early mixin 的两个方法(:52-60)
@Override public String getMixinConfig() { return "mixins.navigator.early.json"; }
@Override public List<String> getMixins(Set<String> loadedCoreMods) {
return IMixins.getEarlyMixins(Mixins.class, loadedCoreMods);
}
| 方法 | 值 |
|---|---|
getMixinConfig() |
mixins.navigator.early.json |
getMixins 委托 |
IMixins.getEarlyMixins(Mixins.class, loadedCoreMods) |
⚠️ mixins.navigator.early.json 与 mixins.navigator.json 是两套:
| 配置 | package | 加载者 |
|---|---|---|
mixins.navigator.early.json |
...mixins.early |
本类 |
mixins.navigator.json |
...mixins |
无加载者 |
⚠️ mixins.navigator.json 的 package 是
com.gtnewhorizons.navigator.mixins(不带 .early),
但本仓没有任何 IMixinLoader 返回这个配置名 ——
它只作为 resource 存在。见分类页缺陷说明。
配置注册的 static 块(:20-27)
static {
try {
ConfigurationManager.registerConfig(GeneralConfig.class);
ConfigurationManager.registerConfig(ModuleConfig.class);
} catch (ConfigException e) {
throw new RuntimeException(e);
}
}
| 顺序 | 注册的配置类 |
|---|---|
| 1 | GeneralConfig |
| 2 | ModuleConfig |
⚠️ 放在 static 块里是 GTNHLib 的推荐做法 ——
比 preInit 更早,确保配置在任何使用方之前就已读盘。
⚠️ 但 ConfigException 被包成 RuntimeException 重新抛出(:25),
会直接崩掉类加载。若配置文件损坏(如非法字符),
NavigatorCore 类加载失败 → coremod 加载失败 → 整个游戏启动中断,
而不是降级为「用默认值启动」。
⚠️ 这个 static 块与 SupportedMods 的 枚举初始化有时序耦合,见分类页缺陷 1、2。
相关
- GeneralConfig / ModuleConfig - 本类注册的配置
- Navigator - 常规 mod 入口(与本类并行)
- NavigatorLateMixins - late 阶段的对应物
- Mixins - 两个
getMixins都委托给它的枚举