Fixes #3143: Queue network list updates in onTick (#3144)

This commit is contained in:
fscan
2017-10-08 15:12:28 +02:00
committed by yueh
parent e8d554d69d
commit 6032c0328e
2 changed files with 33 additions and 118 deletions
+33 -5
View File
@@ -21,9 +21,11 @@ package appeng.hooks;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.concurrent.TimeUnit;
@@ -49,7 +51,6 @@ import appeng.core.AppEng;
import appeng.core.sync.packets.PacketPaintedEntity;
import appeng.crafting.CraftingJob;
import appeng.me.Grid;
import appeng.me.NetworkList;
import appeng.tile.AEBaseTile;
import appeng.util.IWorldCallable;
import appeng.util.Platform;
@@ -118,7 +119,7 @@ public class TickHandler
{
if( Platform.isServer() ) // for no there is no reason to care about this on the client...
{
this.getRepo().networks.add( grid );
this.getRepo().addNetwork( grid );
}
}
@@ -126,7 +127,7 @@ public class TickHandler
{
if( Platform.isServer() ) // for no there is no reason to care about this on the client...
{
this.getRepo().networks.remove( grid );
this.getRepo().removeNetwork( grid );
}
}
@@ -147,6 +148,7 @@ public class TickHandler
{
final LinkedList<IGridNode> toDestroy = new LinkedList<>();
this.getRepo().updateNetworks();
for( final Grid g : this.getRepo().networks )
{
for( final IGridNode n : g.getNodes() )
@@ -218,6 +220,7 @@ public class TickHandler
}
// tick networks.
this.getRepo().updateNetworks();
for( final Grid g : this.getRepo().networks )
{
g.update();
@@ -295,12 +298,37 @@ public class TickHandler
private Queue<AEBaseTile> tiles = new LinkedList<>();
private Collection<Grid> networks = new NetworkList();
private Set<Grid> networks = new HashSet<>();
private Set<Grid> toAdd = new HashSet<>();
private Set<Grid> toRemove = new HashSet<>();
private void clear()
{
this.tiles = new LinkedList<>();
this.networks = new NetworkList();
this.networks = new HashSet<>();
this.toAdd = new HashSet<>();
this.toRemove = new HashSet<>();
}
private synchronized void addNetwork( Grid g )
{
this.toAdd.add( g );
this.toRemove.remove( g );
}
private synchronized void removeNetwork( Grid g )
{
this.toRemove.add( g );
this.toAdd.remove( g );
}
private synchronized void updateNetworks()
{
this.networks.removeAll( this.toRemove );
this.toRemove.clear();
this.networks.addAll( this.toAdd );
this.toAdd.clear();
}
}