diff --git a/me/cache/EnergyGridCache.java b/me/cache/EnergyGridCache.java index 9eb8083d..f46bf792 100644 --- a/me/cache/EnergyGridCache.java +++ b/me/cache/EnergyGridCache.java @@ -270,19 +270,22 @@ public class EnergyGridCache implements IEnergyGrid if ( machine instanceof IAEPowerStorage ) { IAEPowerStorage ps = (IAEPowerStorage) machine; - if ( ps.getPowerFlow() != AccessRestriction.WRITE ) - globalAvailablePower -= ps.getAECurrentPower(); + if ( ps.isAEPublicPowerStorage() ) + { + if ( ps.getPowerFlow() != AccessRestriction.WRITE ) + globalAvailablePower -= ps.getAECurrentPower(); - if ( lastProvider == machine ) - lastProvider = null; + if ( lastProvider == machine ) + lastProvider = null; - if ( lastRequestor == machine ) - lastRequestor = null; + if ( lastRequestor == machine ) + lastRequestor = null; - globalMaxPower -= ps.getAEMaxPower(); + globalMaxPower -= ps.getAEMaxPower(); - providers.remove( machine ); - requesters.remove( machine ); + providers.remove( machine ); + requesters.remove( machine ); + } } if ( machine instanceof IStackWatcherHost ) @@ -383,7 +386,7 @@ public class EnergyGridCache implements IEnergyGrid if ( availableTicksSinceUpdate > 90 ) refreshPower(); - return globalAvailablePower; + return Math.max( 0.0, globalAvailablePower ); } @Override diff --git a/tile/networking/TileEnergyAcceptor.java b/tile/networking/TileEnergyAcceptor.java index 116a2da7..582c736e 100644 --- a/tile/networking/TileEnergyAcceptor.java +++ b/tile/networking/TileEnergyAcceptor.java @@ -45,8 +45,7 @@ public class TileEnergyAcceptor extends AENetworkPowerTile if ( powerRequested > 0 ) { - internalCurrentPower += eg - .injectPower( extractAEPower( powerRequested, Actionable.MODULATE, PowerMultiplier.ONE ), Actionable.MODULATE ); + eg.injectPower( extractAEPower( powerRequested, Actionable.MODULATE, PowerMultiplier.ONE ), Actionable.MODULATE ); } } catch (GridAccessException e) @@ -58,9 +57,29 @@ public class TileEnergyAcceptor extends AENetworkPowerTile } }; + @Override + protected double funnelPowerIntoStorage(double newPower, Actionable mode) + { + try + { + IEnergyGrid grid = gridProxy.getEnergy(); + double overFlow = grid.injectPower( newPower, Actionable.SIMULATE ); + + if ( mode == Actionable.MODULATE ) + grid.injectPower( Math.max( 0.0, newPower - overFlow ), Actionable.MODULATE ); + + return super.funnelPowerIntoStorage( overFlow, mode ); + } + catch (GridAccessException e) + { + return super.funnelPowerIntoStorage( newPower, mode ); + } + } + public TileEnergyAcceptor() { - gridProxy.setIdlePowerUsage( 1.0 / 16.0 ); + gridProxy.setIdlePowerUsage( 0.0 ); addNewHandler( new TilePowerRelayHandler() ); + internalMaxPower = 100; } @Override