EnergyGridCache(appeng.me.cache.EnergyGridCache)

基本信息

属性 值
源码 appeng/me/cache/EnergyGridCache.java
类声明行号 50
实现接口 appeng.api.networking.IEnergyGrid
注册 core/Registration.java:545(键 IEnergyGrid.class)
构造器 :99

职责

全网能量分配中心。它同时扮演三个角色:

  1. 消费者:机器从这里取电(extractAEPower,见下)
  2. 生产者:发电设备往这里注电(injectAEPower / injectPower)
  3. 电池:能源方块存电(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。

相关条目