NetworkMonitor(appeng.me.cache.NetworkMonitor)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/cache/NetworkMonitor.java |
| 类声明行号 | 55 |
| 实现接口 | IMEMonitor<T>(appeng/api/storage/IMEMonitor.java) |
| 泛型约束 | T extends IAEStack<T> |
是否注册为 IGridCache |
否 |
最重要的一点:它不是网格缓存
⚠️ me/cache/ 目录下 10 个类,只有 9 个进 IGridCacheRegistry。
NetworkMonitor 不在其中(注册表见 core/Registration.java:543-552,
逐项清单见 grid-cache 总览)。
它是 GridStorageCache 的内部产物,每个 stack 类型一个实例:
// me/cache/GridStorageCache.java:123
this.monitors.put(type, new NetworkMonitor<>(this, type));
构造器 NetworkMonitor.java:81,签名 (GridStorageCache cache, IAEStackType<T> type)。
职责
IMEMonitor<T> 的全网视图。它自己不存任何东西,所有读写都转发给
NetworkInventoryHandler:
| 方法 | 行号 | 转发目标 |
|---|---|---|
getHandler() |
249 | 返回底层 IMEInventoryHandler<T> |
getExternalNetworkInventory() |
239 | IMENetworkInventory<T> |
injectItems |
191 | handler |
extractItems |
111 | handler |
优先级与槽位
「哪个 cell 先被抽」由这几组方法表达,全部委托给 handler:
| 方法 | 行号 |
|---|---|
getPriority() |
163 |
getSlot() |
168 |
isPrioritized(T input) |
223 |
getAvailableItemsWithPriority(int iteration) |
147 |
getStorageList() |
174 |
锁
setLocked(boolean)(:88)/ isLocked()(:92)—— 供正在做大批量转移的
操作临时冻结 monitor。
观察者
addListener(:101)/ removeListener(:228),token 校验用
isValid(Object)(:124)。
StorageChannel 缺省实现
getChannel()(:152)返回 @Nullable 的 StorageChannel ——
api/storage/StorageChannel.java(不在本分片)。
NetworkMonitor 返回 null,意味着它不受优先级配置约束,
始终按全网统一规则分配。