模组加载检测
基本信息
| 属性 | 值 |
|---|---|
| 类 | com.gtnewhorizon.gtnhlib.compat.Mods |
| 源码 | src/main/java/com/gtnewhorizon/gtnhlib/compat/Mods.java |
| 常量数 | 4 |
| 判定方式 | cpw.mods.fml.common.Loader.isModLoaded(String) |
⚠️ 本 mod 中没有名为 ModTags 的类。compat/Mods.java 全文只有 4 个 public static final boolean,是 GTNHLib 实际提供的 mod 检测入口。
常量
compat/Mods.java 全文:
public class Mods {
public static final boolean FALSETWEAKS = Loader.isModLoaded("falsetweaks");
public static final boolean NEI = Loader.isModLoaded("NotEnoughItems");
public static final boolean ANGELICA = Loader.isModLoaded("angelica");
// Covers both Baubles and Baubles-Expanded.
public static final boolean BAUBLES = Loader.isModLoaded("Baubles");
}
| 常量 | 检测的 modid | 说明 |
|---|---|---|
FALSETWEAKS |
falsetweaks |
FalseTweaks |
NEI |
NotEnoughItems |
NotEnoughItems |
ANGELICA |
angelica |
Angelica |
BAUBLES |
Baubles |
同时覆盖 Baubles 与 Baubles-Expanded(源码注释明确说明) |
关键陷阱:这些是 static final,值在类加载时冻结
四个常量都是 static final boolean 并在静态初始化时调用 Loader.isModLoaded。由于 GTNHLib 的 coremod 早在 mod 加载前就运行,一旦 Mods 类被加载,值即固定。BAUBLES 字段的注释之所以要专门说明"同时覆盖两者",正是因为 Baubles-Expanded 复用了 Baubles 这个 modid。
因此:
- 在 coremod / mixin 早期阶段引用
Mods.BAUBLES可能得到错误的false - 需要在 FML 生命周期内、mod 列表确定之后再求值时,应改用
Loader.isModLoaded(...)直接调用
对比:GTNHLib 自身的 GTNHLib 类用的是可变的非 final 静态字段(GTNHLib.java:32-34),在 preInit 中赋值:
public static boolean isMFRLoaded;
public static boolean isCoFHCoreLoaded;
public static boolean isMui2Loaded;
这正是为了避开上面的冻结问题。
数值
| 数值名 | 值 |
|---|---|
| 常量数 | 4 |
static final 常量 |
4(全部) |
| 覆盖的外部 mod | 4(falsetweaks、NotEnoughItems、angelica、Baubles) |
| 额外覆盖的 fork | 1(Baubles-Expanded,与 Baubles 共用 modid) |
GTNHLib 类的 3 个可变标志(isMFRLoaded、isCoFHCoreLoaded、isMui2Loaded)不在 Mods 中,而是在 preInit 单独赋值,覆盖 MineFactory Reloaded、CoFH Core、ModularUI 2 三个 mod。
交互
Mods.NEI 与 GTNHLibConfig.ignoreNEIVersion 配合:后者为 true 时跳过 NEI 版本检查(见 第三方模组兼容)。
Mods.BAUBLES 供 compat/BaublesCompat.java 使用,后者在类加载失败时静默降级。
相关条目
- 第三方模组兼容 - 同一
compat包下的实际兼容实现 - GTNHLib 主配置 -
ignoreNEIVersion开关