BuildCraftTransport 模块(appeng.integration.modules.BuildCraftTransport)

基本信息

属性 值
源码 appeng/integration/modules/BuildCraftTransport.java
类声明 49,public class
实现接口 IBuildCraftTransport(integration/abstraction/IBuildCraftTransport.java:35)+ IIntegrationModule
静态单例 public static BuildCraftTransport instance
modID BuildCraft|Transport(IntegrationType.java:23)
side BOTH
本 wiki 收录情况 BuildCraft 未被本 wiki 收录 —— 写全名 BuildCraft

本包最大的模块(101 行抽象接口 + 5 个 helper 类)

配套的 integration/modules/BCHelpers/ 有 5 个文件 (见 bc-helpers 总览)。

生命周期

阶段 行号 动作
init() 211 initPipeConnection() + initFacades()(:212-213)
postInit() 217 registerPowerP2P()(:218)、registerItemP2P()(:219)、registerLiquidsP2P()(:220),随后注册 BCPipeHandler(:229)

IBuildCraftTransport 的 5 个方法

抽象接口在 integration/abstraction/IBuildCraftTransport.java,101 行, 是 abstraction/ 里最长的接口:

方法 接口行号 语义
isFacade(ItemStack is) 41 该物品是不是 facade
getTextureForFacade(ItemStack facade) 66 取 facade 的贴图物品
isPipe(TileEntity te, ForgeDirection dir) 80 该面是不是管道
canAddItemsToPipe(TileEntity te, ItemStack is, ForgeDirection dir) 90 能否塞进去
addItemsToPipe(TileEntity te, ItemStack is, ForgeDirection dir) 100 塞进去

注入内容 1:管道连接(initPipeConnection)

init()(:212)调它。postInit 在 :229 注册外部存储:

api.registries().externalStorage().addExternalStorageInterface(new BCPipeHandler());
handler 源文件 目标
BCPipeHandler integration/modules/BCHelpers/BCPipeHandler.java BC 管道
BCPipeInventory integration/modules/BCHelpers/BCPipeInventory.java 同上
AECableSchematicTile integration/modules/BCHelpers/AECableSchematicTile.java 蓝图
AEGenericSchematicTile integration/modules/BCHelpers/AEGenericSchematicTile.java 蓝图
AERotatableBlockSchematic integration/modules/BCHelpers/AERotatableBlockSchematic.java 可定向方块蓝图

⚠️ 这是 5 个外部存储注册点之一(全部 5 个见 me/storage 总览)。

注入内容 2:facade 互操作

init()(:213)调 initFacades()。关键一步是发 IMC:

// BuildCraftTransport.java:165
FMLInterModComms.sendMessage("BuildCraft|Transport", "add-facade", item);

即把 AE2 的 facade 物品告知 BC,使其能当 BC 管道 facade 用。 isFacade(:41)与 getTextureForFacade(:66)是反向查询。

AE2 侧用到的 BC 类型(BuildCraftTransport.java:27-29 import):

BC 类型 用途
buildcraft.api.facades.IFacadeItem facade 识别
buildcraft.api.transport.IInjectable 能否注入
buildcraft.api.transport.IPipeTile 管道 tile

注入内容 3:P2P 调律(3 类)

postInit()(:218-220)注册 25 项调律(grep -c addNewAttunement = 25):

TunnelType 数量 物品
TunnelType.RF_POWER 6 pipePower + Wood / Stone / Quartz / Gold / Diamond / Cobblestone(Cobblestone 那项跨两行,:172-174)
TunnelType.ITEM 11 pipeItems + Wood / Stone / Quartz / Iron / Gold / Diamond / Emerald / Cobblestone / Sandstone / Obsidian / Void
TunnelType.FLUID 8 pipeFluids + Wood / Stone / Sandstone / Iron / Gold / Emerald / Cobblestone / Void

6 + 11 + 8 = 25,与 addNewAttunement 的出现次数一致。

全部形式为 new ItemStack(buildcraft.BuildCraftTransport.pipeXxx) —— 引用对方的静态字段,不是构造新物品。

⚠️ 静态字段引用意味着:类加载时就要解析 BuildCraftTransport。 但因为本模块只在 isModLoaded("BuildCraft|Transport") 通过后才被 loadClass(IntegrationNode.java:82),所以安全。

mod 没装时是否安全跳过

是。BuildCraft|Transport 未装 → FAILED, 类不被加载 → buildcraft.* 不解析。

⚠️ 但 BuildCraft 有三个独立 modID (IntegrationType.java:21 / :23 / :25: BuildCraft|Core / BuildCraft|Transport / BuildCraft|Builders)。 三个目标独立判定,只装了 Core 没装 Transport 时, 本模块禁用而 BuildCraftCore 启用。

相关条目