模组兼容
基本信息
| 属性 | 值 |
|---|---|
| 目标模组枚举 | 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 的补丁与扩展集合,而非独立玩法模组。
相关条目
- 核心模组与 ASM 变换器 — Thaumic Mixins 抢占的实现
- 模组兼容组 — 5 个兼容配置块及其子设置
- 补丁注册框架 —
TargetedMod的全部用法 - Salis Arcana — 模组总览