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

View file

@ -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

View file

@ -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