diff --git a/src/main/java/appeng/helpers/DualityInterface.java b/src/main/java/appeng/helpers/DualityInterface.java index 9f7174fe2..d04dfa334 100644 --- a/src/main/java/appeng/helpers/DualityInterface.java +++ b/src/main/java/appeng/helpers/DualityInterface.java @@ -149,6 +149,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn private int isWorking = -1; private final Accessor accessor = new Accessor(); private GTCEInventoryAdaptor GTad; + EnumSet visitedFaces = EnumSet.noneOf( EnumFacing.class ); public DualityInterface( final AENetworkProxy networkProxy, final IInterfaceHost ih ) { @@ -939,8 +940,12 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn final World w = tile.getWorld(); final EnumSet possibleDirections = this.iHost.getTargets(); + for( final EnumFacing s : possibleDirections ) { + if (visitedFaces.contains( s )) + continue; + final TileEntity te = w.getTileEntity( tile.getPos().offset( s ) ); if( te instanceof IInterfaceHost ) { @@ -964,6 +969,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn { if( cm.pushPattern( patternDetails, table, s.getOpposite() ) ) { + visitedFaces.add( s ); return true; } continue; @@ -1004,10 +1010,12 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn } } this.pushItemsOut( possibleDirections ); + visitedFaces.add( s ); return true; } } } + visitedFaces.clear(); return false; } diff --git a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java index bf42c35de..e1f66746c 100644 --- a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java @@ -93,6 +93,7 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU private final List storage = new ArrayList<>(); private final List status = new ArrayList<>(); private final HashMap, Object> listeners = new HashMap<>(); + private final Map> visitedMediums = new HashMap<>(); private ICraftingLink myLastLink; private String myName = ""; private boolean isDestroyed = false; @@ -653,6 +654,23 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU continue; } + if (visitedMediums.containsKey( details )) + { + if( visitedMediums.get( details ).containsAll( cc.getMediums( e.getKey() ) ) ) + { + visitedMediums.clear(); + visitedMediums.put( details, new ArrayList<>() ); + } + } + + visitedMediums.putIfAbsent( details, new ArrayList<>() ); + + if( visitedMediums.get( details ).contains( m ) ) + { + continue; + } + visitedMediums.get( details ).add( m ); + if( !m.isBusy() ) { if( ic == null )