ThE 与第三方模组的集成
基本信息
| 属性 | 值 |
|---|---|
| 集成核心类 | thaumicenergistics.common.integration.IntegrationCore(init() 由 ThaumicEnergistics.load() 调用,ThaumicEnergistics.java:129) |
| 模组清单枚举 | thaumicenergistics.common.integration.ModsList |
| 声明的必需依赖 | required-after:appliedenergistics2@[rv3-beta-817,)、required-after:Thaumcraft@[4.2.3.5,)、after:Waila(ThaumicEnergistics.java:45) |
mcmod.info 依赖 |
appliedenergistics2、thaumcraft(mcmod.info) |
功能
IntegrationCore.init() 负责服务端/通用集成,客户端 mod 的集成单独放在 integrateWithClientMods() 且仅在客户端执行(IntegrationCore.java:38-44):
if (EffectiveSide.isClientSide()) {
IntegrationCore.integrateWithClientMods();
}
集成总表
| 模组 | 类型 | 检测方式 | 实现类 | 作用 |
|---|---|---|---|---|
| Applied Energistics 2 | 必需 | @Mod(dependencies=...) |
全 mod | ThE 全部部件/机器的基础 |
| Thaumcraft 4 | 必需 | @Mod(dependencies=...) |
全 mod | 要素、研究、奥术配方 |
| Waila | 可选(软) | Loader.isModLoaded("Waila") |
ModuleWaila |
HUD 信息显示 |
| NotEnoughItems | 可选(软) | Loader.isModLoaded("NotEnoughItems") |
ModuleNEI |
配方显示与隐藏 |
| ComputerCraft | 可选(软) | Loader.isModLoaded("ComputerCraft") |
ModuleCC |
要素供应器的 Lua 外设 |
| Thaumic Tinkerer | 单向通信 | FMLInterModComms.sendMessage |
IntegrationCore |
请求 TT 排除本 mod 的方块 |
| Thaumcraft NEI Plugin | 仅查询 | ModsList.THAUMCRAFT_NEI_PLUGIN.isLoaded() |
ModsList |
只读检测 |
| Aspect Recipe Index | 仅查询 | ModsList.ASPECT_RECIPE_INDEX.isLoaded() |
ModsList |
只读检测 |
注意 Waila 在 @Mod(dependencies) 中是 after:Waila(不带 required-after:),因此是软依赖;AE2 与 Thaumcraft 才是 required-after: 硬依赖。
ComputerCraft 集成
ModuleCC.ThEPeripherals implements IPeripheralProvider 为 Essentia Provider 提供 Lua 外设(ModuleCC.java:19-38):
if (te instanceof TileEssentiaProvider) {
return new EssentiaProviderPeripheral(world, x, y, z);
}
外设实现 IPeripheral 且 IEssentiaProviderWatcher(EssentiaProviderPeripheral.java:41)—— 后者是关键:外设把自己注册为供应器的观察者,从而在要素网络变化时收到回调。相关方法链:addComputerWatch(:281)、removeComputerWatcher(:446)、onProviderBroken(:355)、postChange(:365)、onListUpdate(:437)、onProviderPowerChange。
暴露的 Lua 方法(CCMethods 枚举,EssentiaProviderPeripheral.java:179-207,另加动态方法 events,见 :174):
| 方法 | 说明(源码注释) |
|---|---|
isOnline |
Is the provider active and online? |
getAspects |
Gets the list of aspects stored in the network. Stored in pairs of (name,amount) |
getAmount |
Gets how much of the specified essentias are in the network. Args: Param array of aspect names |
registerAsWatcher |
Register for network changes Args: aspect names, can be null for all aspects |
unregisterAsWatcher |
Unregister for network changes Args: aspect names, can be null for all aspects |
help |
Gets help object. |
events |
动态追加的方法名(getMethodNames 中 names[staticLen] = "events",:174) |
单向排除机制:ThE 主动通知 Thaumic Tinkerer 把 Essentia Provider 加入其 CC 黑名单(IntegrationCore.java:49):
FMLInterModComms.sendMessage("ThaumicTinkerer", "AddCCBlacklist", TileEssentiaProvider.class.getName());
这样避免 TT 也为该方块生成一份外设,造成玩家在 CC 中看到两个功能重叠的外设。
Waila 集成
ModuleWaila 实现 IWailaDataProvider,通过 FMLInterModComms.sendMessage("Waila", "register", ... + ".callbackRegister") 注册(ModuleWaila.java:45)。Waila 随后回调 callbackRegister(IWailaRegistrar),注册 3 个 body provider(:55-64):
| 注册目标 | 类型 |
|---|---|
AbstractBlockProviderBase.class |
三种 provider 方块 |
BlockArcaneAssembler.class |
奥术装配机 |
TileEssentiaVibrationChamber.class |
要素振动室 |
getWailaBody 的实现是通用的:若 tile 实现 IWailaSource 就调用 addWailaInformation(tooltip)(:74-86)。getWailaHead / getWailaStack / getWailaTail 全部原样返回(:98-116)—— ThE 不改标题栏与物品图标,只追加正文行。
这也解释了为什么 Essentia Provider、Arcane Assembler、Essentia Vibration Chamber 这几个方块在 HUD 上有额外信息(要素存量、已存 Vis 等)。
NEI 集成
ModuleNEI 注册 GUI overlay 与处理器(ModuleNEI.java:247-305),其中两项对本 mod 可见性有直接影响:
| 行为 | 源码 |
|---|---|
隐藏 Aspect 物品 |
API.hideItem(ItemEnum.CRAFTING_ASPECT.getStack())(:276) |
注册 ACTSlotPositioner 自定义槽位定位器 |
public static class ACTSlotPositioner implements IStackPositioner(:196)—— 修正 Arcane Crafting Terminal GUI 的槽位定位 |
| 注册 NEI GUI 处理器 | API.registerNEIGuiHandler(new NEIGuiHandler())(:273) |
| 注册 5 组催化剂信息 | registerCatalystInfo(...)(:292-305),其中一处显式指向 "thaumicenergistics:part.base:5"(即 meta 5 = Arcane Crafting Terminal,:298) |
催化剂信息通过 FMLInterModComms.sendMessage("NotEnoughItems", "registerCatalystInfo", nbt) 发送(:316)。
ModsList:只读检测的两个模组
ModsList 枚举只有两个条目(ModsList.java:5-8):
THAUMCRAFT_NEI_PLUGIN("thaumcraftneiplugin"),
ASPECT_RECIPE_INDEX("aspectrecipeindex");
isLoaded() 惰性求值并缓存到 Boolean isLoaded(:15-20)。这两个模组只被查询、不被集成 —— 存在它们意味着 ThE 感知这两个 mod 的存在(用于展示或兼容性判断),但本仓中未找到进一步的动作。
AE2 升级卡注册
IntegrationCore.init() 中最大的一块是向 AE2 注册本 mod 物品的可用升级卡(:52-83):
| 升级类型 | 适用物品 | 上限 |
|---|---|---|
SPEED |
Arcane Assembler | MAX_SPEED_UPGRADES = 4 |
VOID_OVERFLOW |
要素电池 1k–16384k + Quantum | 1 |
DISTRIBUTION |
要素电池 1k–16384k | 1 |
STICKY |
要素电池 1k–16384k + Quantum + Singularity | 1 |
总线部件的升级卡(Import/Export/Storage Bus)不在此处注册,而在 ItemAEPart 构造函数中通过遍历 AEPartsEnum.VALUES 调用 upgrade.registerItem(...) 完成(ItemAEPart.java:50-60)。
物品字典
CommonProxy.registerItems() 额外做两件事(CommonProxy.java:48-54):
OreDictionary.registerOre("gearIron", IronGear)—— 使 Iron Gear 可被其他 mod 的gearIron配方使用OreDictionary.registerOre("materialAspectShard", new ItemStack(ConfigItems.itemShard, 1, WILDCARD_VALUE))—— 注册 Thaumcraft 的全部碎片为materialAspectShard,使 AE2 能提示可替代物品
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 软依赖检测的模组数 | 3(Waila / NEI / ComputerCraft) | IntegrationCore.java:24-47 |
单向 FMLInterModComms 消息 |
1(ThaumicTinkerer / AddCCBlacklist) |
IntegrationCore.java:49 |
| 硬依赖数 | 2(AE2、Thaumcraft) | ThaumicEnergistics.java:45 |
| 软依赖数 | 1(after:Waila) |
同上 |
ModsList 条目数 |
2 | ModsList.java:6-7 |
| Waila body provider 数 | 3 | ModuleWaila.java:56-62 |
| CC 外设方法数 | 6 静态 + 1 动态(events) |
EssentiaProviderPeripheral.java:166-207 |
| 注册的升级类型数 | 4 | IntegrationCore.java:52-83 |
| 注册的物品字典名 | 2(gearIron、materialAspectShard) |
CommonProxy.java:49、:52-54 |
交互
| 触发 | 行为 |
|---|---|
| 安装 Waila | HUD 上 ThE 的 provider / 装配机 / 振动室显示额外信息行 |
| 安装 NEI | Arcane Crafting Terminal 槽位定位修正;Aspect 物品被隐藏 |
| 安装 ComputerCraft | Essentia Provider 可被 CC 计算机识别为外设,可用 7 个 Lua 方法 |
| 安装 Thaumic Tinkerer | TT 收到消息后把 Essentia Provider 加入 CC 黑名单(避免双外设) |
| 未安装上述任一 | 相关 Loader.isModLoaded 返回 false,跳过集成,mod 正常运行 |
| 关闭 AE2 特性 | 要素电池无 VOID_OVERFLOW / DISTRIBUTION / STICKY 升级;电池槽不可用时 FeatureCells 整体不注册 |
| 关闭 Thaumcraft 特性 | 伪研究 MIRROR/JAR、WARDED 依 ThA 配置条件注册 |
合成配方
本条目描述集成机制。与集成相关的配方:
Force TC Facades开关为真时,FeatureThaumcraftFacades会覆写 AE2 的 facade 设置,使部分 Thaumcraft 方块的外贴面可被合成 —— 这是 ThE 对 AE2 配置的主动修改,属配置驱动的行为而非固定配方materialAspectShard物品字典注册使 AE2 能为碎片提示替代品(CommonProxy.java:51-54)
相关条目
- Essentia Provider - 提供 CC 外设与 Waila 信息的方块
- Arcane Assembler - NEI 槽位定位与 Waila 信息的对象
- Essentia Vibration Chamber - 提供 Waila 信息的方块
- Iron Gear - 进入物品字典的物品
- Aspect - 被 NEI 隐藏的物品