模组集成 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 |
声明与使用不一致的两项
- 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。两者都记录,不臆造其中之一。
- 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)