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。

相关