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 定位「哪些机器关心这个具体物品」。