integration/modules/helpers 外部存储适配器(helpers)
覆盖范围
appeng.integration.modules.helpers 包,11 个 .java 文件。
实测:find integration/modules/helpers -name '*.java' | wc -l = 11。
这 11 个文件里藏着 4 个外部存储 handler + 2 个例外
| 文件 | 行号 | 职责 | 归属目标 |
|---|---|---|---|
BSCrateHandler.java |
22 | IExternalStorageHandler |
BetterStorage |
BSCrate.java |
27 | IMEInventory<IAEItemStack> —— 单个 BetterStorage 箱 |
BetterStorage |
BSCrateStorageAdaptor.java |
25 | extends InventoryAdaptor —— 把 BS 箱转成 AE 抽象 |
BetterStorage |
FactorizationHandler.java |
24 | IExternalStorageHandler |
Factorization |
FactorizationBarrel.java |
27 | IMEInventory<IAEItemStack> —— 单个 FZ 桶 |
Factorization |
JabbaStorageHandler.java |
15 | IExternalStorageHandler |
Jabba |
JabbaBarrel.java |
15 | IMEInventory<IAEItemStack> —— 单个 Jabba 桶 |
Jabba |
MFRDSUHandler.java |
24 | IExternalStorageHandler |
Deep Storage Unit(MFR) |
MinefactoryReloadedDeepStorageUnit.java |
27 | IMEInventory<IAEItemStack> —— 单个 DSU |
Deep Storage Unit(MFR) |
FMPPacketEvent.java |
17 | extends Event(Forge 事件) |
Forge MultiPart |
NullRFHandler.java |
17 | IEnergyReceiver —— 空实现 |
CoFH Core |
4 个外部存储 handler 的注册点
IExternalStorageHandler 全仓库 6 个 addExternalStorageInterface 调用点,
其中 5 个在本目录,1 个在 AE2 核心:
| handler | 注册位置 | 目标 |
|---|---|---|
AEExternalHandler |
core/Registration.java:554 |
AE2 自带(me/storage) |
BSCrateHandler |
integration/modules/BetterStorage.java:53 |
BetterStorage |
FactorizationHandler |
integration/modules/FZ.java:139 |
Factorization |
JabbaStorageHandler |
integration/modules/Jabba.java:38 |
Jabba |
MFRDSUHandler |
integration/modules/DSU.java:50 |
Deep Storage Unit |
BCPipeHandler |
integration/modules/BuildCraftTransport.java:229 |
BuildCraft Transport(在 bc-helpers) |
5 个全部在 postInit() 阶段注册。
统一模式:Handler + 单容器 Inventory
每个外部存储都是两层:
IExternalStorageHandler ← 注册进 AE2 外部存储注册表
└─ canHandle(TileEntity, ...) ← 「这是不是我能处理的方块」
└─ getInventory(TileEntity, ...) ← 返回 IMEInventory
└─ IMEInventory<IAEItemStack> ← 单个容器的 AE2 抽象
| 目标 | handler | 单容器 | 额外适配层 |
|---|---|---|---|
| BetterStorage | BSCrateHandler(:22) |
BSCrate(:27) |
BSCrateStorageAdaptor(:25,extends InventoryAdaptor) |
| Factorization | FactorizationHandler(:24) |
FactorizationBarrel(:27) |
靠 FZ.java:129-134 的反射句柄 |
| Jabba | JabbaStorageHandler(:15) |
JabbaBarrel(:15) |
— |
| DSU(MFR) | MFRDSUHandler(:24) |
MinefactoryReloadedDeepStorageUnit(:27) |
— |
IMEInventory<IAEItemStack> 是 AE2 自己的接口
(appeng/api/storage/IMEInventory.java),
IAEItemStack 是 AE2 自己的物品栈抽象 —— 跨 mod 物品不会进 AE2 的类型系统。
两个例外
NullRFHandler(:17)—— P2P RF 隧道的空对象
// parts/p2p/PartP2PRFPower.java:39
private static final IEnergyReceiver NULL_HANDLER = new NullRFHandler();
NullRFHandler implements cofh.api.energy.IEnergyReceiver,
是 P2P 隧道(RF) 在没有真实
RF 接收端时的空对象(null object)。全仓库唯一使用点
是 PartP2PRFPower.java:39 的 static final 常量。
⚠️ 注意它与 integration/modules/RFItem.java(空壳)无关。
RFItem 目标什么都不注入;NullRFHandler 是 parts/ 侧独立需要的。
FMPPacketEvent(:17)—— Forge 事件
extends net.minecraftforge.event.Event,构造器 :21 收 EntityPlayerMP。
| 产生方 | 位置 |
|---|---|
integration/modules/FMP.java:179 |
return new FMPPacketEvent(sender);(newFMPPacketEvent,:178) |
core/sync/packets/PacketMultiPart.java:44 |
MinecraftForge.EVENT_BUS.post(fmp.newFMPPacketEvent(sender))(不在本分片) |
| 消费方 | 位置 |
|---|---|
appeng/fmp/FMPEvent.java:45 |
public void ServerFMPEvent(final FMPPacketEvent event) |
⚠️ FMP.java:125 注册到 Forge 事件总线的是
appeng/fmp/FMPEvent.java:40 的 FMPEvent,
它与本目录的 FMPPacketEvent 是两个不同的类。
跨 mod 物品不混入 AE2
⚠️ 本目录所有 IMEInventory 实现只做单位换算与搬运,
它们不构造任何跨 mod 物品。
BSCrateStorageAdaptor / FactorizationBarrel 等把对方容器
映射成 IAEItemStack,走的是 AE2 的物品栈抽象。
对方物品只在 me/storage/MEIInventoryWrapper.java:33
的 InventoryAdaptor 层出现(不在本维度)。
相关条目
- integration/modules 总览
- FZ 模块
- DSU 模块
- bc-helpers 总览(BCPipeHandler)
- me/storage 总览(6 个外部存储注册点)
- P2P 隧道(RF)(
NullRFHandler的唯一使用点)