diff --git a/gradle.properties b/gradle.properties index 1477b3715..7d93bb7f3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ aechannel=stable aebuild=7 aegroup=appeng aebasename=appliedenergistics2 -trousers=omni-fixes-v43d +trousers=omni-fixes-v43h ######################################################### # Versions # diff --git a/src/main/java/appeng/me/cache/EnergyGridCache.java b/src/main/java/appeng/me/cache/EnergyGridCache.java index 7ac9d10bb..ea2523f98 100644 --- a/src/main/java/appeng/me/cache/EnergyGridCache.java +++ b/src/main/java/appeng/me/cache/EnergyGridCache.java @@ -202,23 +202,6 @@ public class EnergyGridCache implements IEnergyGrid @Override public void onUpdateTick() { - if (!providerToRemove.isEmpty() && !ongoingExtractOperation) { - this.providers.removeIf( p -> providerToRemove.contains( p ) ); - providerToRemove.clear(); - } - if (!requesterToRemove.isEmpty() && !ongoingInjectOperation) { - this.requesters.removeIf( r -> providerToRemove.contains( r ) ); - requesterToRemove.clear(); - } - if (!providersToAdd.isEmpty() && !ongoingExtractOperation) { - this.providers.addAll(providersToAdd); - providersToAdd.clear(); - } - if( !requesterToAdd.isEmpty() && !ongoingInjectOperation){ - this.requesters.addAll(requesterToAdd); - requesterToAdd.clear(); - } - if( !this.interests.isEmpty() ) { final double oldPower = this.lastStoredPower; @@ -248,7 +231,7 @@ public class EnergyGridCache implements IEnergyGrid if( this.drainPerTick > 0.0001 ) { final double drained = this.extractAEPower( this.getIdlePowerUsage(), Actionable.MODULATE, PowerMultiplier.CONFIG ); - currentlyHasPower = drained >= this.drainPerTick - 0.001; + currentlyHasPower = drained >= this.drainPerTick - 0.001 && this.getStoredPower() > 0; } else { @@ -352,6 +335,9 @@ public class EnergyGridCache implements IEnergyGrid { double extractedPower = 0; + this.providers.addAll( providersToAdd ); + providersToAdd.clear(); + final Iterator it = this.providers.iterator(); ongoingExtractOperation = true; @@ -361,12 +347,6 @@ public class EnergyGridCache implements IEnergyGrid { final IAEPowerStorage node = it.next(); - if ( providerToRemove.contains( node )) { - it.remove(); - providerToRemove.remove( node ); - continue; - } - final double req = amt - extractedPower; final double newPower = node.extractAEPower( req, mode, PowerMultiplier.ONE ); extractedPower += newPower; @@ -376,7 +356,10 @@ public class EnergyGridCache implements IEnergyGrid it.remove(); } } - } finally { + } finally + { + providers.removeIf( p -> providerToRemove.contains( p ) ); + this.providerToRemove.clear(); ongoingExtractOperation = false; } @@ -401,6 +384,9 @@ public class EnergyGridCache implements IEnergyGrid { final double originalAmount = amt; + this.requesters.addAll( requesterToAdd ); + requesterToAdd.clear(); + final Iterator it = this.requesters.iterator(); ongoingInjectOperation = true; @@ -410,12 +396,6 @@ public class EnergyGridCache implements IEnergyGrid { final IAEPowerStorage node = it.next(); - if ( requesterToRemove.contains( node )) { - it.remove(); - requesterToRemove.remove( node ); - continue; - } - amt = node.injectAEPower( amt, mode ); if( amt > 0 && mode == Actionable.MODULATE ) @@ -425,6 +405,8 @@ public class EnergyGridCache implements IEnergyGrid } } finally { + requesters.removeIf( r -> requesterToRemove.contains( r ) ); + this.requesterToRemove.clear(); ongoingInjectOperation = false; } @@ -505,11 +487,7 @@ public class EnergyGridCache implements IEnergyGrid @Override public double getStoredPower() { - if( this.availableTicksSinceUpdate > 2 ) - { - this.refreshPower(); - } - + this.refreshPower(); return Math.max( 0.0, this.globalAvailablePower ); } @@ -810,8 +788,12 @@ public class EnergyGridCache implements IEnergyGrid if( this.stored < 0.01 ) { - EnergyGridCache.this.ticksSinceHasPowerChange = 0; - EnergyGridCache.this.publicPowerState( false, EnergyGridCache.this.myGrid ); + refreshPower(); + if (globalAvailablePower < MAX_BUFFER_STORAGE - 0.001) + { + EnergyGridCache.this.ticksSinceHasPowerChange = 0; + EnergyGridCache.this.publicPowerState( false, EnergyGridCache.this.myGrid ); + } } } }