EnergyGridCache(appeng.me.cache.EnergyGridCache)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/cache/EnergyGridCache.java |
| 类声明行号 | 50 |
| 实现接口 | appeng.api.networking.IEnergyGrid |
| 注册 | core/Registration.java:545(键 IEnergyGrid.class) |
| 构造器 | :99 |
职责
全网能量分配中心。它同时扮演三个角色:
- 消费者:机器从这里取电(
extractAEPower,见下) - 生产者:发电设备往这里注电(
injectAEPower/injectPower) - 电池:能源方块存电(
getStoredPower/getMaxStoredPower,:488/:497)
递归与防环
凡是可能跨网调用的方法都多一个 Set<IEnergyGrid> seen 参数:
| 方法 | 行号 |
|---|---|
extractAEPower(double, Actionable, Set<IEnergyGrid> seen) |
234 |
injectAEPower(double, Actionable, Set<IEnergyGrid> seen) |
307 |
getEnergyDemand(double, Set<IEnergyGrid> seen) |
361 |
calculateInfiniteStore(boolean, Set<IEnergyGrid> seen) |
397 |
跨网路径来自 Grid.getAllRecursiveGridConnections(me/Grid.java:321),
即存储总线互联的网络(见 Grid)。
无限能源(创造模式)
| 方法 | 行号 | 说明 |
|---|---|---|
setHasInfiniteStore(boolean) |
386 | 直接置位 |
getHasInfiniteStore() |
392 | 读当前网 |
calculateInfiniteStore(boolean, Set) |
397 | 递归汇总,子网为真则整网为真 |
injectPower(double, Actionable)(:469)是无 seen 的便捷重载。
统计量
| 方法 | 行号 |
|---|---|
getIdlePowerUsage() |
208 |
getAvgPowerUsage() |
454 |
getAvgPowerInjection() |
459 |
isNetworkPowered() |
464 |
事件订阅
| 方法 | 行号 | 事件 |
|---|---|---|
postInit(MENetworkPostCacheConstruction) |
104 | 缓存建好后 |
EnergyNodeChanges(MENetworkPowerIdleChange) |
109 | 空闲功耗变化 |
EnergyNodeChanges(MENetworkPowerStorage) |
122 | 储能变化 |
两者都带 @MENetworkEventSubscribe(由 NetworkEventBus 反射扫到,
见 NetworkEventBus)。
唯一实现全部 6 个钩子的 cache
| 钩子 | 行号 |
|---|---|
onUpdateTick |
143 |
addNode |
565 |
removeNode |
516 |
onSplit |
613 |
onJoin |
621 |
populateGridStorage |
628 |
populateGridStorage 之所以必须实现,是因为 GridStorage 有一条
extraEnergy 的特殊处理分支(me/GridStorage.java:93-100)——见
GridStorage。