push patterns in round-robin

This commit is contained in:
Salomão
2021-04-29 21:19:07 -03:00
parent 0fae87afc7
commit 76ae078d24
2 changed files with 26 additions and 0 deletions
@@ -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<EnumFacing> 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<EnumFacing> 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;
}
@@ -93,6 +93,7 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU
private final List<TileCraftingTile> storage = new ArrayList<>();
private final List<TileCraftingMonitorTile> status = new ArrayList<>();
private final HashMap<IMEMonitorHandlerReceiver<IAEItemStack>, Object> listeners = new HashMap<>();
private final Map<ICraftingPatternDetails,List<ICraftingMedium>> 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 )