跨模组集成

基本信息

crossmod/ 下 3 组集成,共 14 个类,全部是软依赖, 按需探测后注册。

组 目录 类数 目标 mod
WAILA crossmod/waila/ 9 Waila(含 FMP 分支)
OpenComputers crossmod/opencomputers/ 4 OpenComputers
Thaumic Energistics crossmod/thaumcraft/ 1 thaumicenergistics + thaumcraftneiplugin

一、WAILA(9 个类)

入口 WailaInit.run(),用 FMLInterModComms.sendMessage("Waila", "register", "…WailaInit.register") 把 register(IWailaRegistrar) 交给 WAILA 回调。

WailaInit.register 的注册动作:

动作 目标类 条件
registerBodyProvider + registerNBTProvider IPartHost(AE2 部件) 无条件
同上 codechicken.multipart.TileMultipart IntegrationRegistry.INSTANCE.isEnabled(IntegrationType.FMP),且用 Class.forName 反射,ClassNotFoundException 被吞掉
GuiContainerManager.addTooltipHandler(new FCTooltipHandlerWaila()) — Platform.isClient()
registerBodyProvider + registerNBTProvider AEBaseTile 无条件
registerBodyProvider TileCertusQuartzTank !ModAndClassUtil.WAILA_PLUGINS

最后一条的判断是取反的:只有当 WAILA_PLUGINS 为假时才 注册石英罐的 provider,即安装了 WAILA 插件版时不重复注册。 这与前几条的 isEnabled / isClient 方向相反,读代码时容易看反。

数据提供者类: PartWailaDataProvider(part/FluidInvWailaDataProvider 为其子类)、 TileWailaDataProvider(tile/FluidInvWailaDataProvider、 tile/LevelMaintainerWailaDataProvider 为其子类)、 CertusQuartzTankWailaDataProvider。 另有工具类 Tooltip(物品 tooltip 格式串)。

二、OpenComputers(4 个类)

OCDriverInit.run()(由 FluidCraft.java:53 的 init() 在 ModAndClassUtil.OC 为真时调用)内含 6 次 li.cil.oc.api.Driver.add, 即 3 个驱动 + 3 个 Provider(OC 要求成对注册):

驱动 Provider
DriverOCPatternEditor DriverOCPatternEditor.Provider
DriverLevelMaintainer DriverLevelMaintainer.Provider
DriverDualFluidInterface DriverDualFluidInterface.Provider

三者在 Gui Types 里都有对应界面 (OC_PATTERN_EDITOR、LEVEL_MAINTAINER、DUAL_INTERFACE_FLUID)。

三、Thaumic Energistics(1 个类)

ThaumicEnergisticsCrafting.postInit(),由 CommonProxy.postInit() 在 if (ModAndClassUtil.ThE) 分支下调用 (CommonProxy.java:92-95)。

它解决的是「魔术侧要素物品不能直接塞进 ME 网络」的问题:

成员 说明
neiAddonAspect GameRegistry.findItem("thaumcraftneiplugin", "Aspect")
thaumicEnergisticsAspect GameRegistry.findItem("thaumicenergistics", "crafting.aspect")
isAspectStack(ItemStack) 判断是否上述两件物品
convertItemAspectStack(IAEStack<?>) 把要素物品转成带 "AspectTag" 的 IAEStack
getAspectTag(ItemStack) 私有;两种物品读 不同的 NBT 键

getAspectTag 的两分支:

来源 读取方式
thaumcraftneiplugin 的 Aspect NBT Aspects 标签(NBTTagList);非 NBTTagList 返回 null
thaumicenergistics 的 crafting.aspect NBT 的 Aspect 字符串键

两个字段在 postInit 里 findItem,模组缺失时为 null; isAspectStack 用 == 比较,null 时不会误判 —— 但 AE2 侧未装 Thaumcraft 时这条分支根本不会执行。

相关条目

源码

  • src/main/java/com/glodblock/github/crossmod/waila/(9 个 .java)
  • src/main/java/com/glodblock/github/crossmod/opencomputers/{OCDriverInit,DriverOCPatternEditor,DriverLevelMaintainer,DriverDualFluidInterface}.java
  • src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java
  • 复算:grep -c 'Driver.add' src/main/java/com/glodblock/github/crossmod/opencomputers/OCDriverInit.java → 6