From f9c274fb4816ffadec8dc46496a75bdfa0d28afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 27 Jun 2021 23:17:26 -0300 Subject: [PATCH] Reduce power flickering by increasing energy polling rate in testing 84 dense cells could sustain MAX Integer on a FE p2p pair --- gradle.properties | 2 +- .../java/appeng/me/cache/EnergyGridCache.java | 58 +++++++------------ 2 files changed, 21 insertions(+), 39 deletions(-) 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 ); + } } } }