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 启用。