MEMonitorIInventory(appeng.me.storage.MEMonitorIInventory)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/storage/MEMonitorIInventory.java |
| 类声明行号 | 41 |
| 实现接口 | appeng.api.storage.IStorageBusMonitor<IAEItemStack> |
| 构造器 | :54,单参 InventoryAdaptor adaptor |
| 流体版 | MEMonitorIFluidHandler.java:43(收 IFluidHandler) |
职责
把普通容器(原版 IInventory,经 InventoryAdaptor 做单位换算)
包装成带观察者通知与 tick 调制的 handler。存储总线与接口 part 想
「接一个箱子」时走的就是这条路。
与「真正的 IInventory」的区别
⚠️ 名称容易误导:IInventory 在此不是 net.minecraft.inventory.IInventory
的直通,而是经 InventoryAdaptor(appeng/helpers/,不在本分片)
转换后的 AE 抽象。单位换算(1 桶 = 1250 mB 之类)由 adaptor 负责。
关键方法
| 方法 | 行号 | 说明 |
|---|---|---|
addListener(IMEMonitorHandlerReceiver, Object token) |
60 | |
removeListener(IMEMonitorHandlerReceiver) |
65 | |
injectItems(IAEItemStack, Actionable, BaseActionSource) |
70 | |
extractItems(IAEItemStack, Actionable, BaseActionSource) |
94 | |
getAvailableItems(IItemList, int) |
— | 签名由接口提供 |
getChannel() |
120 | @Nullable StorageChannel |
onTick() |
125 | 返回 TickRateModulation |
getAccess() |
234 | |
isPrioritized(IAEItemStack) |
239 | |
canAccept(IAEItemStack) |
244 | |
getPriority() |
249 | |
getSlot() |
254 | |
validForPass(int) |
259 |
onTick() 返回 TickRateModulation
这是自适应节流:容器没变化就降频,有变化就升频。 它与网格级的 TickManagerCache 是两套独立的节流 —— 后者调的是节点 tick 频率,前者调的是单个 handler 的轮询频率。
MEMonitorIFluidHandler.onTick() 在 :159,结构相同。
生命周期钩子
无。不是 IGridCache。生命周期跟随所包装的容器。
与既有维度的关系
- 宿主:存储总线 part
- 观察端:存储监控 part
- 聚合方:GridStorageCache