diff --git a/src/main/java/appeng/helpers/DualityInterface.java b/src/main/java/appeng/helpers/DualityInterface.java index 90a359102..e019996ff 100644 --- a/src/main/java/appeng/helpers/DualityInterface.java +++ b/src/main/java/appeng/helpers/DualityInterface.java @@ -561,6 +561,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn { try { + this.gridProxy.getGrid().postEvent( new MENetworkCraftingPatternChange( this, this.gridProxy.getNode() ) ); this.gridProxy.getTick().wakeDevice( this.gridProxy.getNode() ); } catch( final GridAccessException e ) @@ -808,17 +809,18 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn return; } + final InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() ); + final Iterator i = this.waitingToSendFacing.get( s ).iterator(); while ( i.hasNext() ) { ItemStack whatToSend = i.next(); - final InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() ); if( ad != null ) { final ItemStack result = ad.addItems( whatToSend ); if( !result.isEmpty() ) { - whatToSend.setCount( whatToSend.getCount() - ( whatToSend.getCount() - result.getCount() ) ); + whatToSend.setCount( result.getCount() ); } else { diff --git a/src/main/java/appeng/me/cache/CraftingGridCache.java b/src/main/java/appeng/me/cache/CraftingGridCache.java index 8b55c9825..240d0851a 100644 --- a/src/main/java/appeng/me/cache/CraftingGridCache.java +++ b/src/main/java/appeng/me/cache/CraftingGridCache.java @@ -115,7 +115,7 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper private IEnergyGrid energyGrid; int i; private boolean updateList = false; - private boolean updatePatterns = true; + private boolean updatePatterns = false; public CraftingGridCache( final IGrid grid ) { @@ -415,14 +415,20 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper if( !updatePatterns ) { List newCraftables = new ArrayList<>(); - for( IAEItemStack stack : api.getOutputs() ) + + ObjectSet b = new ObjectRBTreeSet<>( COMPARATOR ); + ImmutableList a = this.craftableItems.get( api.getCondensedOutputs()[0] ); + if( a != null ) { - ImmutableList a = this.craftableItems.get( stack ); - if( a == null || a.get( 0 ).getPriority() < api.getPriority() ) - { - this.craftableItems.put( stack, ImmutableList.of( api ) ); - newCraftables.add( stack.copy().reset().setCraftable( true ) ); - } + b.addAll( this.craftableItems.get( api.getOutputs()[0] ) ); + } + b.add( api ); + + for( IAEItemStack stack : api.getCondensedOutputs() ) + { + IAEItemStack i = stack.copy().reset().setCraftable( true ); + this.craftableItems.put( i, ImmutableList.copyOf( b ) ); + newCraftables.add( i ); } this.storageGrid.postCraftablesChanges( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ), newCraftables, new BaseActionSource() ); } diff --git a/src/main/java/appeng/util/inv/AdaptorItemHandler.java b/src/main/java/appeng/util/inv/AdaptorItemHandler.java index 65b6843ae..5828dc0be 100644 --- a/src/main/java/appeng/util/inv/AdaptorItemHandler.java +++ b/src/main/java/appeng/util/inv/AdaptorItemHandler.java @@ -232,6 +232,10 @@ public class AdaptorItemHandler extends InventoryAdaptor for( int slot = 0; slot < this.itemHandler.getSlots(); slot++ ) { + if( !simulate ) + { + itemsToAdd = itemsToAdd.copy(); + } itemsToAdd = this.itemHandler.insertItem( slot, itemsToAdd, simulate ); if( itemsToAdd.isEmpty() ) diff --git a/src/main/java/appeng/util/inv/AdaptorItemRepository.java b/src/main/java/appeng/util/inv/AdaptorItemRepository.java index 86f5db69e..de7e93b4b 100644 --- a/src/main/java/appeng/util/inv/AdaptorItemRepository.java +++ b/src/main/java/appeng/util/inv/AdaptorItemRepository.java @@ -163,23 +163,26 @@ public class AdaptorItemRepository extends InventoryAdaptor return this.addItems( toBeAdded, false ); } - protected ItemStack addItems( final ItemStack itemsToAdd, final boolean simulate ) + protected ItemStack addItems( ItemStack itemsToAdd, final boolean simulate ) { if( itemsToAdd.isEmpty() ) { return ItemStack.EMPTY; } - ItemStack left = itemsToAdd.copy(); + if( !simulate ) + { + itemsToAdd = itemsToAdd.copy(); + } - left = this.itemRepository.insertItem( left, simulate ); + itemsToAdd = this.itemRepository.insertItem( itemsToAdd, simulate ); - if( left.isEmpty() ) + if( itemsToAdd.isEmpty() ) { return ItemStack.EMPTY; } - return left; + return itemsToAdd; } @Override diff --git a/src/main/java/appeng/util/inv/BlockingItemHandler.java b/src/main/java/appeng/util/inv/BlockingItemHandler.java index 60958e3bd..ac21c4df5 100644 --- a/src/main/java/appeng/util/inv/BlockingItemHandler.java +++ b/src/main/java/appeng/util/inv/BlockingItemHandler.java @@ -37,11 +37,10 @@ public class BlockingItemHandler extends BlockingInventoryAdaptor for( int slot = 0; slot < slots; slot++ ) { ItemStack is = this.itemHandler.getStackInSlot( slot ); - if( is.isEmpty() || !isBlockableItem( is ) ) + if( !is.isEmpty() && isBlockableItem( is ) ) { - continue; + return true; } - return true; } return false; }