GridStorageCache(appeng.me.cache.GridStorageCache)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/cache/GridStorageCache.java |
| 类声明行号 | 68 |
| 实现接口 | appeng.api.networking.IStorageGrid |
| 注册 | core/Registration.java:547(键 IStorageGrid.class) |
| 构造器 | :117,单参 IGrid(注册表强制要求) |
职责
全网存储聚合层。它自己不做物品搬运,而是维护一张表:
每个 IMEInventoryHandler(cell、存储总线、接口、外部存储等)挂在哪,
以及每一格的内容是什么。
对外暴露的三个 monitor
| 方法 | 行号 | 返回 |
|---|---|---|
getItemInventory() |
335 | IMEMonitor<IAEItemStack> |
getFluidInventory() |
340 | IMEMonitor<IAEFluidStack> |
getMEMonitor(IAEStackType<?>) |
345 | @Nullable IMEMonitor<?>,按类型查,无则 null |
⚠️ 三个 monitor 不是本 cache 的字段,是构造器里
this.monitors.put(type, new NetworkMonitor<>(this, type))(GridStorageCache.java:123)
建出来的,类型为 NetworkMonitor(见 NetworkMonitor)。
变更追踪的两个内部类
| 内部类 | 行号 | 职责 |
|---|---|---|
CellChangeTrackerRecord |
357 | 单条待应用的 cell 变更(栈类型 + 槽位 + 值) |
CellChangeTracker |
378 | 批量收集,逐类型合并后 postChanges(:382) |
cellUpdate(MENetworkCellArrayUpdate)(:237)是它们的唯一入口。
cell 提供者
| 方法 | 行号 |
|---|---|
registerCellProvider(ICellProvider) |
323 |
unregisterCellProvider(ICellProvider) |
329 |
用途:让「会改变 cell 内容」的机器(如高速接口)能主动通知网络。 cell 本体见 CellInventory。
变更广播
两个重载,行号 :307 与 :317:
postAlterationOfStoredItems(StorageChannel, Iterable<? extends IAEStack<?>>, ...)postAlterationOfStoredItems(IAEStackType<?>, Iterable<? extends IAEStack<?>>, ...)
观察者索引
getInterestManager()(:349)返回 GenericInterestManager<ItemWatcher>,
泛型参数是 me/storage/ItemWatcher.java(不是网络事件订阅者,是兴趣管理器条目)。
实现见 GenericInterestManager。
生命周期
| 钩子 | 行号 | 实现 |
|---|---|---|
onUpdateTick() |
128 | 有实现 |
removeNode |
143 | 有实现 |
addNode |
165 | 有实现 |
onSplit |
187 | 空 {} |
onJoin |
190 | 空 {} |
populateGridStorage |
193 | 空 {} |
不持久化是合理的:存储内容已经在 cell / 外部存储里了, cache 只是索引,重建即可。