me/ 能量阈值与观察(energy)
覆盖范围
appeng.me.energy 包,2 个 .java 文件 —— me/ 下最小的子包。
实测:find me/energy -name '*.java' | wc -l = 2。
两个类
| 文件 | 行号 | 职责 |
|---|---|---|
EnergyWatcher.java |
24 | IEnergyWatcher 实现 + Set<Double> 语义的集合。一条「此设备关心哪些能量阈值」 |
EnergyThreshold.java |
16 | 一个 (double 阈值, IEnergyWatcher 归属) 对。Comparable |
为什么只有 2 个文件
me/energy/ 不是能量子系统的主体。真正的能量分配在
EnergyGridCache(me/cache/EnergyGridCache.java:50)。
本包只提供阈值触发机制:机器登记若干能量档位,跨过档位时被通知,
从而实现「低于 25% 停机」这类行为。
EnergyWatcher
| 方法 | 行号 | 说明 |
|---|---|---|
| 构造器 | 30 | (EnergyGridCache cache, IEnergyWatcherHost host) |
post(EnergyGridCache) |
35 | 触发回调 —— 能量跨过阈值时由 cache 调用 |
getHost() |
39 | 回到设备 |
⚠️ 命名陷阱:类名叫 EnergyWatcher,但它的角色更像
「阈值集合 + 回调转发器」,而 me/helpers/ 里的 IEnergyWatcherHost
才是「被通知的设备」。
⚠️ 第二个陷阱:EnergyWatcher 同时实现了集合接口
(size :44 / isEmpty :49 / contains :54 / iterator :59 /
toArray :64,:69 / add :74 / remove :84 / containsAll :90 /
addAll :95 等)—— 元素类型是 Double(阈值),不是 watcher 本身。
源码未声明 implements Set<Double>,但方法集是完整的 Set 契约。
EnergyThreshold
| 方法 | 行号 | 说明 |
|---|---|---|
| 构造器 | 22 | (double lim, IEnergyWatcher wat) |
hashCode() |
34 | |
compareTo(EnergyThreshold o) |
39 | 按 lim 排序 |
getWatcher() |
47 |
它实现 Comparable,排序依据是阈值本身,因此阈值集合可以保持有序,
跨档检查退化成相邻比较。
生命周期
两个类都不是 IGridCache,没有 5 个网格钩子。
它们由 EnergyGridCache 在
addNode / removeNode 时收集与释放。
与既有维度的关系
- 宿主实现
IEnergyWatcherHost的方块类 tile: 典型是 方块能源方块、 方块充电站 - 触发源:EnergyGridCache
- 通道能量来源(另一条路径,不经阈值):helpers 总览