Fixed Infinite Power Bug with Energy Acceptor.

This commit is contained in:
AlgorithmX2
2014-03-11 20:54:04 -05:00
parent 08df0f8b06
commit ca46b3e2d9
2 changed files with 35 additions and 13 deletions
+13 -10
View File
@@ -270,19 +270,22 @@ public class EnergyGridCache implements IEnergyGrid
if ( machine instanceof IAEPowerStorage ) if ( machine instanceof IAEPowerStorage )
{ {
IAEPowerStorage ps = (IAEPowerStorage) machine; IAEPowerStorage ps = (IAEPowerStorage) machine;
if ( ps.getPowerFlow() != AccessRestriction.WRITE ) if ( ps.isAEPublicPowerStorage() )
globalAvailablePower -= ps.getAECurrentPower(); {
if ( ps.getPowerFlow() != AccessRestriction.WRITE )
globalAvailablePower -= ps.getAECurrentPower();
if ( lastProvider == machine ) if ( lastProvider == machine )
lastProvider = null; lastProvider = null;
if ( lastRequestor == machine ) if ( lastRequestor == machine )
lastRequestor = null; lastRequestor = null;
globalMaxPower -= ps.getAEMaxPower(); globalMaxPower -= ps.getAEMaxPower();
providers.remove( machine ); providers.remove( machine );
requesters.remove( machine ); requesters.remove( machine );
}
} }
if ( machine instanceof IStackWatcherHost ) if ( machine instanceof IStackWatcherHost )
@@ -383,7 +386,7 @@ public class EnergyGridCache implements IEnergyGrid
if ( availableTicksSinceUpdate > 90 ) if ( availableTicksSinceUpdate > 90 )
refreshPower(); refreshPower();
return globalAvailablePower; return Math.max( 0.0, globalAvailablePower );
} }
@Override @Override
+22 -3
View File
@@ -45,8 +45,7 @@ public class TileEnergyAcceptor extends AENetworkPowerTile
if ( powerRequested > 0 ) if ( powerRequested > 0 )
{ {
internalCurrentPower += eg eg.injectPower( extractAEPower( powerRequested, Actionable.MODULATE, PowerMultiplier.ONE ), Actionable.MODULATE );
.injectPower( extractAEPower( powerRequested, Actionable.MODULATE, PowerMultiplier.ONE ), Actionable.MODULATE );
} }
} }
catch (GridAccessException e) 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() { public TileEnergyAcceptor() {
gridProxy.setIdlePowerUsage( 1.0 / 16.0 ); gridProxy.setIdlePowerUsage( 0.0 );
addNewHandler( new TilePowerRelayHandler() ); addNewHandler( new TilePowerRelayHandler() );
internalMaxPower = 100;
} }
@Override @Override