diff --git a/me/Grid.java b/me/Grid.java index 2a6065a7b..8bc2b1f1c 100644 --- a/me/Grid.java +++ b/me/Grid.java @@ -28,6 +28,7 @@ public class Grid implements IGrid HashMap, GridCacheWrapper> caches = new HashMap, GridCacheWrapper>(); GridNode pivot; + int isImportant; // how import is this network? public Grid(GridNode center) { this.pivot = center; @@ -228,4 +229,10 @@ public class Grid implements IGrid } } + public void setImportantFlag(int i, boolean publicHasPower) + { + int flag = 1 << i; + isImportant = (isImportant & ~flag) | (publicHasPower ? flag : 0); + } + } diff --git a/me/GridConnection.java b/me/GridConnection.java index 22aaf77a3..b3f0474c2 100644 --- a/me/GridConnection.java +++ b/me/GridConnection.java @@ -62,7 +62,7 @@ public class GridConnection implements IGridConnection, IPathItem GridPropagator gp = new GridPropagator( a.getInternalGrid() ); b.beginVisition( gp ); } - else if ( a.myGrid.size() > b.myGrid.size() ) + else if ( isNetworkABetter( a, b ) ) { GridPropagator gp = new GridPropagator( a.getInternalGrid() ); b.beginVisition( gp ); @@ -82,6 +82,11 @@ public class GridConnection implements IGridConnection, IPathItem sideB.addConnection( this ); } + private boolean isNetworkABetter(GridNode a, GridNode b) + { + return ((Grid) a.myGrid).isImportant > ((Grid) b.myGrid).isImportant || a.myGrid.size() > b.myGrid.size(); + } + @Override public void destroy() { diff --git a/me/cache/EnergyGridCache.java b/me/cache/EnergyGridCache.java index addb8ea0f..cceddea4d 100644 --- a/me/cache/EnergyGridCache.java +++ b/me/cache/EnergyGridCache.java @@ -27,6 +27,7 @@ import appeng.api.networking.events.MENetworkPowerStatusChange; import appeng.api.networking.events.MENetworkPowerStorage; import appeng.api.networking.pathing.IPathingGrid; import appeng.api.networking.storage.IStackWatcherHost; +import appeng.me.Grid; import appeng.me.GridNode; import appeng.me.energy.EnergyThreshold; import appeng.me.energy.EnergyWatcher; @@ -379,6 +380,7 @@ public class EnergyGridCache implements IEnergyGrid return; publicHasPower = newState; + ((Grid) myGrid).setImportantFlag( 0, publicHasPower ); grid.postEvent( new MENetworkPowerStatusChange() ); }