兼容性

基本信息

属性 值
类型 游戏设定(依赖与门控)
声明位置 @Mod(dependencies = ...) 于 AspectRecipeIndex.java
硬依赖数 4 组
软依赖数 3
Minecraft 仅 [1.7.10](acceptedMinecraftVersions)
远程版本 acceptableRemoteVersions = "*"(纯客户端模组,版本不敏感)

硬依赖(required-after)

DEPENDENCIES 常量的完整值:

  • required-after:Thaumcraft
  • required-after:gtnhmixins
  • required-after:gtnhlib
  • required-after:TC4Tweaks|API|InfusionRecipeLib
  • after:Automagy

Thaumcraft

几乎所有功能都建立在 Thaumcraft 的内部 API 上,且大量使用非公开成员(不是 public API):

用到的内部成员 用途
Thaumcraft.proxy.playerKnowledge aspect pool 增减、元素发现判定
Thaumcraft.proxy.getScannedObjects() 玩家扫描记录(索引数据源)
ThaumcraftCraftingManager 物品的 object tags / bonus tags
GuiResearchRecipe.getFromCache 扫描 hash → ItemStack
ScanManager.generateItemHash ItemStack → 扫描 hash
ClientTickEventsFML / MappingThread mixin 目标(见 Mixin)
ConfigItems.itemResource / itemWandCasting 魔杖材料与法器物品
EventHandlerRunic Runic 护甲的 charge / hardening 读写
PacketHandler / PacketAspectPool 唯一的网络包(见 Aspect 研究点)
ItemWispEssence 被排除在 essentia 提取之外

也把创造模式标签页挂在 Thaumcraft.tabTC 上。

GTNHLib(gtnhlib)

用到的类 用途
com.gtnewhorizon.gtnhlib.config.Config @Config 注解,见 配置项
ConfigurationManager 配置文件注册与读写
ConfigException 注册失败时抛 RuntimeException 导致崩溃
com.gtnewhorizon.gtnhlib.color.ColorResource 8 个 UI 颜色常量

注意 dependencies.gradle 里 GTNHLib 是 implementation(...) { transitive = false }。

GTNHLib Mixins(gtnhmixins)

提供 @LateMixin、ILateMixinLoader、IMixins、MixinBuilder、ITargetMod、TargetModBuilder、Phase。usesMixins = true 同时使 UniMixins 成为必需依赖。

TC4Tweaks / TC4RecipeLib / InfusionRecipeLib

三选一的 required-after 写法。用途集中在 InfusionRecipeHandler:

用到的类型 用途
net.glease.tc4tweak.api.infusionrecipe.InfusionRecipeExt 把 TC 原生 InfusionRecipe 转成增强版
EnhancedInfusionRecipe 提供 getCentral() / getComponentsExt() / getAspects()
RecipeIngredient 外围材料,支持 getRepresentativeStacks() 与 matches

dependencies.gradle 里对应 net.glease:tc4recipelib。

容错设计:转换被 try { ... } catch (RuntimeException e) { continue; } 包住,注释写明"keep bad recipe from killing the scan"——一个坏配方不会中断整个扫描。RecipeIngredient.matches 更是被 catch (Throwable) 兜住。

软依赖与运行期门控

NotEnoughItems

  • dependencies.gradle 里是 api(...),是整个功能面的宿主:7 个 recipe handler、7 个 usage handler、GUI 覆盖、stringify handler 全部注册在 NEI 上。
  • 唯一的"可选项"是 API.registerStackStringifyHandler(...):整段包在 try { ... } catch (NoSuchMethodError ignored) {} 里,即 NEI 缺少该 API 时静默跳过。
  • 本模组通过 IMC 主动向 NotEnoughItems 发送注册消息,见 IMC 注册消息。

Automagy(after:Automagy,软)

唯一的运行期门控在 ResearchInfo.getResearchPrerequisites:

  • 条件:Loader.isModLoaded("Automagy") 且 researchItem.category.equals("AUTOMAGY")。
  • 效果:额外从 tuhljin.automagy.config.ModResearchItems.cluesOnKill 反查出"击杀并扫描"要求,追加到研究 tooltip(lang 键 aspectrecipeindex.research.prerequisites.kill)。
  • 反查用的是本模组自己的 Util.getKeysByValue(map, value) 工具方法。
  • dependencies.gradle 里 Automagy 是 compileOnly("curse.maven:automagy-222153:2285272")。

GTNH-TC-Wands(软,门控整条魔杖配方路径)

WandRecipeHandler 里有一个 static final boolean GTNH_WAND_RECIPES = Loader.isModLoaded("gtnhtcwands"):

取值 配方来源 用到的 API
true TCWandAPI.getWandWrappers() / getCaps() 交叉生成 AbstractWandWrapper、CapWrapper、SceptreWrapper、GTTier
false WandRod.rods.values() × WandCap.caps.values() 笛卡尔积 无额外依赖

这是模组里最大的一个可选分支:GTNH-TC-Wands 缺席时走自研的笛卡尔积生成器,存在时用其 wrapper API(后者同时提供自定义杖配方)。dependencies.gradle 里它是 compileOnly。

GTNH 分支下的用途查询会额外处理:原始元素(做 SCEPTRE 杖)、杖柄、杖帽、螺钉 / 导体(OreDictionary 查 screw + 材料名)。

Baubles-Expanded(仅开发期运行)

runtimeOnlyNonPublishable("com.github.GTNewHorizons:Baubles-Expanded:2.2.22-GTNH:dev")。

不是发布依赖,也不参与任何门控——只是 runClient 环境的依赖(Thaumcraft 会因为缺少饰品模组而报错)。

不完全兼容的第三方

模组 情况
TCNEIPlugin(jan2048 的 Thaumcraft NEI 插件) 可以共存,但会重复。本模组 FMLMissingMappingsEvent 处理器显式 mapping.ignore() 掉 thaumcraftneiplugin:Aspect 这个物品映射;README 建议直接移除 TCNEIPlugin 与 TCNEIAdditions
TCNEIAdditions(Time_Conqueror,本模组的代码基础) 同上
为 TCNEIPlugin 写兼容的第三方模组 README 明确:不会自动兼容,需要各自加支持(这类代码会直接操作 TCNEIPlugin 的元素物品、依赖其奥法工作台覆盖行为)

一般兼容

README 声明:绝大多数 Thaumcraft 插件新增的元素、配方、魔杖组件都会自动被支持,因为索引直接读 Aspect.aspects 与 ThaumcraftApi.getCraftingRecipes()。需要专门适配的只有 Automagy 与 GTNH-TC-Wands。

相关条目