模组集成 Mod Integrations

基本信息

属性 值
注册入口 common/registration/RegisteredIntegrations.java
初始化时机 FML postInit(CommonProxy.java:81)
集成总数 8(6 个独立探测 + 2 个依赖式加载)
存在性检测 Loader.isModLoaded(getModId())(IntegrationMod.java:22-23)

加载机制

IntegrationMod.init() 是模板方法,先探测模组是否加载再调用 doInit()(IntegrationMod.java:22-23):

if (Loader.isModLoaded(this.getModId())) {
    this.isPresent = true;
    ...
}

两类加载方式(RegisteredIntegrations.java:31-45):

方式 判定 行为
registerIndependent 无条件构造 构造后 init(),内部自行 isModLoaded 判定,未加载则 doInit 不执行
registerDependent 先 Loader.isModLoaded(modId) 未加载直接 return;加载则反射 newInstance() 后 init()

registerIndependent 在 init() 后会记录日志(RegisteredIntegrations.java:72-75):

integration.init();
if (integration.isPresent()) {
    Gadomancy.log.info("Initialized hook for mod \"" + integration.getModId() + "\"!");
}

独立探测的集成(6 个)

集成类 目标 modid 钩子内容
IntegrationAutomagy Automagy 把 Automagy 的无限罐(infinityJar)注册为可粘方块:元数据 3、不可贴标签、可装药瓶(IntegrationAutomagy.java:42-43);另定义奥术节点罐的要素费用 visCostAdvNodeJar = FIRE/EARTH/ORDER/AIR/ENTROPY/WATER 各 125(IntegrationAutomagy.java:31-32)
IntegrationMorph Morph 通过反射取得 Morph 的方法并缓存到 methodHasMorph,提供 isMorphed() 判定(IntegrationMorph.java:30-41);方法查找部分被注释(IntegrationMorph.java:33)
IntegrationNEI NotEnoughItems 隐藏 4 类内部物品:ItemFakeModIcon、BlockStickyJar(元数据 Short.MAX_VALUE)、ItemArcanePackage(Short.MAX_VALUE)、ItemFakeLootbag(Short.MAX_VALUE)(IntegrationNEI.java:24-27)
IntegrationThaumicExploration ThaumicExploration 把 Thaumic Exploration 的垃圾罐(trashJar)注册为可粘方块(元数据 0、不可贴标签、可装药瓶)与其可粘物品(配方栈、研究门槛 TRASHJAR)(IntegrationThaumicExploration.java:26-28)
IntegrationThaumicTinkerer ThaumicTinkerer 反射取得 infusedCropTile 字段并缓存,提供 isCropBlock(Block) 与 isCropTile(TileEntity) 静态判定(IntegrationThaumicTinkerer.java:21-40)
IntegrationMystcraft Mystcraft 注册 EventHandlerMystcraft 到 MinecraftForge.EVENT_BUS 与 FMLCommonHandler 总线(mystcraft/IntegrationMystcraft.java:24-25)

依赖式加载的集成(2 个)

集成类 目标 modid 钩子内容
IntegrationThaumicHorizions ThaumicHorizons 客户端侧:卸载 RenderGolemTH 并注册 RenderAdditionalGolemTH,让 Gadomancy 的傀儡在 Thaumic Horizons 下正确渲染(thaumichorizions/IntegrationThaumicHorizons.java:43-46)
IntegrationWaila Waila 注册 6 个 Waila 信息提供者(waila/IntegrationWaila.java:28-39)

Waila 提供者明细

提供者类 目标 注册的槽位
StickyJarProvider BlockStickyJar tail / stack / head / body(4 种槽位全注册)
AdvancedGolemProvider EntityGolemBase(Thaumcraft 基类) tail
InfusionClawProvider BlockInfusionClaw body
RemoteJarProvider BlockRemoteJar body

依赖声明核对

dependencies.gradle 声明的依赖与代码中的实际使用:

Gradle 坐标 声明方式 代码中是否使用 备注
thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev api(...) 是 硬依赖,@Mod 中声明 required-after:Thaumcraft@[4.1.1.11,)
com.github.GTNewHorizons:Baubles-Expanded:2.2.21-GTNH:dev api(...) 是 baubles.api.BaublesApi 用于 幽魂熟悉
com.github.GTNewHorizons:GTNHLib:0.11.35:dev api(...) 否 全仓 0 处导入
ThaumicEnergistics:1.7.58-GTNH compileOnly + transitive = false 是 真实 import thaumicenergistics.api.storage.IAspectStorage(TileEssentiaCompressor.java:50),经 @Optional.Interface / @Optional.Method 挂接
AspectRecipeIndex:1.1.3 runtimeOnlyNonPublishable 否 全仓 0 处引用;作为运行时扫描服务而非代码依赖
waila:1.19.31-GTNH compileOnly + transitive = false 是 IntegrationWaila + 4 个提供者类
ThaumicHorizons:1.8.22-GTNH compileOnly + transitive = false 是 IntegrationThaumicHorizions + RenderAdditionalGolemTH
Automagy compileOnly + transitive = false 是 IntegrationAutomagy
Mystcraft compileOnly + transitive = false 是 IntegrationMystcraft + EventHandlerMystcraft
NotEnoughItems:2.8.118-GTNH implementation(...) 是 IntegrationNEI

声明与使用不一致的两项

  1. Baubles-Expanded 声明为 api 硬依赖,但未出现在 @Mod 的 dependencies 字符串中。@Mod 声明为
    dependencies = "required-after:Thaumcraft@[4.1.1.11,);after:Waila;after:Automagy"
    
    (Gadomancy.java:34)——即代码层使用了 baubles.api.BaublesApi,Gradle 层声明为 api 依赖,但 FML 层未声明 required-after:baubles。两者都记录,不臆造其中之一。
  2. GTNHLib 与 AspectRecipeIndex 在代码中 0 处使用。前者是 api(...),后者是 runtimeOnlyNonPublishable(...);两者均不构成任何已注册内容。

Morph 与 ThaumicExploration 未在 gradle 中声明

IntegrationMorph 与 IntegrationThaumicExploration 在 dependencies.gradle 中没有对应坐标,但两者都通过字符串形式的 Loader.isModLoaded("Morph") / Loader.isModLoaded("ThaumicExploration") 做软探测,并用反射访问目标类,因此无需编译期依赖。

数值

数值名 值
集成总数 8
独立探测式 6
依赖式 2
编译期声明的 mod 依赖 6
声明但代码 0 使用 2(GTNHLib、AspectRecipeIndex)
代码使用但 @Mod 未声明 1(Baubles-Expanded)
Waila 提供者数 4 个类 / 8 次注册

相关条目

  • 配置项 - enableAdditionalNodeTypes 的说明中提到 WitchingGadgets 兼容性
  • 研究树 - 集成提供的研究(如 TRASHJAR)