GenericInterestManager(appeng.me.helpers.GenericInterestManager)

基本信息

属性 值
源码 appeng/me/helpers/GenericInterestManager.java
类声明行号 20
类型 public class GenericInterestManager<T>
构造器 :26,单参 Multimap<IAEStack, T> interests
内部类 SavedTransactions(:81,private class,非 static)

职责

「谁关心哪个栈」的反向索引。Multimap<IAEStack, T> 之上的薄封装, 核心增量是事务缓冲:批量搬运期间攒下操作,结束时一次性落表。

核心 API

方法 行号 说明
enableTransactions() 30 开启缓冲
disableTransactions() 38 关闭并 flush
put(IAEStack stack, T iw) 55 登记兴趣
remove(IAEStack stack, T iw) 64 撤销兴趣
containsKey(IAEStack stack) 73
get(IAEStack stack) 77 → Collection<T>

事务机制

SavedTransactions(:81)构造器记三样东西(:87):

boolean putOperation   // 是 put 还是 remove
IAEStack myStack
T watcher

disableTransactions()(:38)遍历攒下的事务,逐条应用到 Multimap。

⚠️ SavedTransactions 是非 static 内部类(需要访问外层的 Multimap), 这与同包 me/cache/helpers/ 里的 TickTracker、TunnelIterator 等 (多为 static)风格不统一。

唯一的实际使用者

GridStorageCache.getInterestManager()(me/cache/GridStorageCache.java:349) 返回 GenericInterestManager<ItemWatcher>。

元素类型 T = ItemWatcher(me/storage/ItemWatcher.java:25), 它实现 IStackWatcher。链路是:

某机器关心某物品
  └─ ItemWatcher(IStackWatcher)注册进 Multimap<IAEStack, ItemWatcher>
       └─ 该物品在全网变化时,只通知关心的那几台机器

生命周期钩子

无。不是 IGridCache。它由 GridStorageCache 持有, 随网格创建 / 销毁。

关系区分:与 NetworkEventBus 完全不同

GenericInterestManager NetworkEventBus
分发粒度 按物品栈过滤的观察者 广播 / 定向的网格事件
机制 Multimap 索引 + 事务缓冲 反射扫描 @MENetworkEventSubscribe
位置 me/helpers/ me/ 根
条目 本页 NetworkEventBus

两者不冲突:NetworkEventBus 通知「网变了」, GenericInterestManager 定位「哪些机器关心这个具体物品」。

相关条目