模组兼容

基本信息

属性 值
目标模组枚举 mixins/TargetedMod.java(53 行,13 个常量)
加载检测 Loader.isModLoaded(modId),结果缓存在 loadState 字段
专用兼容类 common/compat/ 下 4 个
兼容配置块 5 个 BaseCompatSetting 子类,见 模组兼容组
额外集成 1 处未声明的 Thaumic Mixins,见下

功能

TargetedMod 是本模组唯一的「目标模组表」。每个常量携带真实 modid, 补丁通过 addRequiredMod(TargetedMod.X) 声明依赖,通过 SalisArcana.MOD_COMPAT 侧的兼容类做行为适配。

目标模组表

常量 modid 核心模组类 引用次数
THAUMCRAFT Thaumcraft — 147
ANGELICA angelica — 3
NOT_ENOUGH_ITEMS NotEnoughItems codechicken.nei.asm.NEICorePlugin 3
TC4_TWEAKS tc4tweak — 3
AUTOMAGY Automagy — 2
BAUBLES_EXPANDED Baubles|Expanded — 2
HODGEPODGE hodgepodge — 2
GTNH_THAUMCRAFT_WANDS gtnhtcwands — 1
THAUMIC_TINKERER ThaumicTinkerer — 1
UNDERGROUND_BIOMES UndergroundBiomes — 1
CONTROLLING controlling — 1
MODERN_KEYBINDING mkb — 1
ASPECT_RECIPE_INDEX aspectrecipeindex — 1

表中列出全部 13 个常量。全部被引用,无未使用的死枚举项。

⚠️ Baubles|Expanded 的 modid 包含竖线(版本范围写法), TargetedMod 用双参构造把它同时设成 modid 与 TargetModBuilder 的 modId (TargetedMod.java:17)。在 Markdown 表格中该竖线已转义为 \|。

专用兼容类

类 目标模组 调用时机 源码
BaublesExpandedCompat Baubles|Expanded ModCompat.preInit() common/compat/BaublesExpandedCompat.java
UBCCompat UndergroundBiomes ModCompat.init() common/compat/UBCCompat.java
GTNHTCWandsCompat gtnhtcwands 按需 common/compat/GTNHTCWandsCompat.java
NEIConfig NotEnoughItems 按需 common/compat/NEIConfig.java

ModCompat(common/compat/ModCompat.java,仅 13 行)是统一入口:

public static void preInit() {
    BaublesExpandedCompat.initialize();
}

public static void init() {
    UBCCompat.init();
}

——ModCompat.java:5-11。它由 CommonProxy.java:76(preInit)与 CommonProxy.java:134(init)分别调用。只有这 2 个兼容类走统一入口; GTNHTCWandsCompat 与 NEIConfig 由其他代码直接调用。

NEI 兼容

common/compat/nei/ 下 3 个文件:

文件 作用
IMCForNEI.java 与 NEI 的物品集成交互消息
WandCapSubstitutionHandler.java 法杖端盖替换的 NEI 处理器
WandCoreSubstitutionHandler.java 法杖核心替换的 NEI 处理器

后两者的启用各自受 mod_integrations 配置块控制 (capReplacementNEIHandler / coreReplacementNEIHandler), 而该配置块整体受 TargetedMod.ASPECT_RECIPE_INDEX 是否加载控制。

⚠️ 存在两套不同的 NEI/配方索引兼容:TargetedMod.NOT_ENOUGH_ITEMS (modid NotEnoughItems)与 TargetedMod.ASPECT_RECIPE_INDEX (modid aspectrecipeindex)是两个不同的模组,前者依赖 Gradle 的 devOnlyNonPublishable(仅开发期),后者是 GTNH 整合包中的正式组件。

未声明的集成:Thaumic Mixins

xyz.uniblood.thaumicmixins 既不在 dependencies.gradle,也不在 TargetedMod 的 13 个常量中,仅以字符串字面量出现在 SalisArcanaClassTransformer.java:21:

new ModCompatEditor(
    "xyz.uniblood.thaumicmixins.mixinplugin.ThaumicMixinsLateMixins",
    "getMixins",
    "(Ljava/util/Set;)Ljava/util/List;")

它通过 ASM 拦截 Thaumic Mixins 的 getMixins 方法,让后者对本模组要混入的 7 个类让位(清单见 核心模组与 ASM 变换器)。

因缺少 FML 依赖声明,本模组的兼容判断不检查 Thaumic Mixins 是否加载—— ASM 层对不存在的方法签名做改写是安全的。

依赖分类

dependencies.gradle 与 @Mod(dependencies = ...) 共同决定了依赖的强度。 两者并不一致,需分开看:

FML 层(@Mod(dependencies),SalisArcana.java:24)

required-after:Thaumcraft;after:tc4tweak@[1.5.32,);after:gtnhtcwands
强度 模组 说明
硬依赖 Thaumcraft required-after,缺它本模组无法加载
软依赖 tc4tweak after: 且带版本下界 [1.5.32,)
软依赖 gtnhtcwands after:,无版本约束

Thaumcraft 是唯一的硬依赖,其 modid 在 SalisArcana.java:24 与 TargetedMod.java:14 两处独立出现且一致。

Gradle 层(dependencies.gradle)

配置 条目 是否随 jar 发布
api thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev 是(公开 API 依赖)
api com.github.GTNewHorizons:Baubles-Expanded:2.2.24-GTNH:dev 是
compileOnly curse.maven:tc4tweaks-431297:6321233 否
compileOnly curse.maven:hodgepodge-688899:6039713 否
compileOnly maven.modrinth:bugtorch:1.2.13 否
compileOnly maven.modrinth:etfuturum:2.6.2 否
compileOnly curse.maven:undergroundbiomesconstructs-72744:2304497 否
compileOnly com.github.GTNewHorizons:GTNH-TC-Wands:1.4.14:dev 否
compileOnly com.github.GTNewHorizons:Angelica:2.2.17:dev 否
compileOnly com.github.GTNewHorizons:ThaumicTinkerer:2.12.33:dev 否
compileOnly curse.maven:automagy-222153:2285272 否
devOnlyNonPublishable com.github.GTNewHorizons:NotEnoughItems:2.8.144-GTNH:dev 否
devOnlyNonPublishable com.github.GTNewHorizons:AspectRecipeIndex:1.1.5:dev 否
runtimeOnlyNonPublishable com.github.GTNewHorizons:waila:1.19.34:dev@jar 否(运行期有)

⚠️ Baubles-Expanded 是 api 但不是 FML 硬依赖: 它会作为 Maven 依赖发布,但 @Mod(dependencies) 字符串里没有 Baubles。 所以 FML 不会因为缺少 Baubles 而拒绝加载本模组; TargetedMod.BAUBLES_EXPANDED 的兼容块只在它实际加载时才生效。

dependencies.gradle 中另有 2 行被注释掉的依赖 (dependencies.gradle:42 与 dependencies.gradle:58,均为 tc4tweaks 的 另一种配置方式)。按「注释掉的注册计为零」不计入上表。

插件级依赖

依赖 来源 说明
UniMixins gradle.properties 的 usesMixins = true 由 gtnhconvention 插件自动引入,未在 dependencies.gradle 声明
RetroFuturaGradle settings.gradle 的 com.gtnewhorizons.gtnhsettingsconvention + build.gradle 的 com.gtnewhorizons.gtnhconvention 构建工具链

README.MD 的依赖说明列出的是 Thaumcraft 4 + UniMixins 0.1.23+, 与上述 FML 层依赖一致。

宿主模组

Thaumcraft 4(modid Thaumcraft,Gradle 坐标 thaumcraft:Thaumcraft:1.7.10-4.2.3.5)。

此判定读自依赖文件而非名称推断,三处独立证据一致: dependencies.gradle:40 的 api("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev")、 SalisArcana.java:24 的 required-after:Thaumcraft、 src/main/resources/mcmod.info 的描述 「A collection of config, utility, and bug fix options for Thaumcraft 4.」。

全仓 153 个补丁中 147 个要求 TargetedMod.THAUMCRAFT, 混入类包名绝大多数位于 thaumcraft.* 之下——本模组本质上是 Thaumcraft 4 的补丁与扩展集合,而非独立玩法模组。

相关条目