MEInventoryHandler(appeng.me.storage.MEInventoryHandler)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/storage/MEInventoryHandler.java |
| 类声明行号 | 37 |
| 实现接口 | appeng.api.util.IMEInventoryHandler<T> |
| 泛型约束 | T extends IAEStack<T> |
| 构造器 | :52,两个参数 (IMEInventory<T> i, IAEStackType<T> type) |
职责
AE2 里最常用的 handler 基类。它把「被包装的 IMEInventory」与
「访问策略」两层分开:搬运全部委托给被包装对象,策略由本类持有。
访问策略四件套
| 概念 | getter | setter | 语义 |
|---|---|---|---|
| 白名单 / 黑名单 | getWhitelist() :66 |
setWhitelist(IncludeExclude) :70 |
哪些内容允许进出 |
| 基础访问权限 | getBaseAccess() :74 |
setBaseAccess(AccessRestriction) :78 |
READ / WRITE / 无限制 |
| 注入分区 | getPartitionList() :93 |
setPartitionList(...) :97 |
注入落到哪台机器 |
| 抽取分区 | getExtractPartitionList() :85 |
setExtractPartitionList(...) :89 |
抽取从哪台机器 |
IncludeExclude 与 AccessRestriction 枚举定义在 appeng/api/(不在本分片)。
搬运方法
| 方法 | 行号 |
|---|---|
injectItems(T, Actionable, BaseActionSource) |
102 |
extractItems(T, Actionable, BaseActionSource) |
112 |
getAvailableItems(IItemList<T>, int) |
128 |
getAvailableItems(IItemList<T>, int, Optional<Predicate<T>>) |
133 |
getAvailableItemsFilter(IItemList<T>, int) |
156,protected |
isVisible() |
150 |
三个子类
| 子类 | 源文件:行 | 额外职责 |
|---|---|---|
CellInventoryHandler<T> |
CellInventoryHandler.java:30 |
cell 格式化状态、字节 / 类型记账 |
StorageBusInventoryHandler<T> |
StorageBusInventoryHandler.java:15 |
优先级列表 getAvailableItemsWithPriority(:63) |
ItemCellInventoryHandler / FluidCellInventoryHandler |
:17 / :19 |
物品 / 流体 cell 的 tag 与 channel |
getAvailableItemsFilter 是扩展点
protected(:156)—— 子类在此叠加自己的过滤(如 cell 的模糊模式、
存储总线的优先级),基类负责统一调度。StorageBusInventoryHandler
覆写的是公开的 getAvailableItems 两个重载(:22 / :27),
路径与 CellInventoryHandler 不同,两条路都通。
生命周期钩子
无。不是 IGridCache。handler 由外部(cell 自身、存储总线 part、
外部存储接口)在挂载 / 卸载时创建与销毁。