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 只是索引,重建即可。

相关条目