From b32834e2b3852b5a3dbd232c6f81c12a8dbe85f0 Mon Sep 17 00:00:00 2001 From: yueh Date: Thu, 8 Mar 2018 16:35:13 +0100 Subject: [PATCH] Fixes #3411: Limit patterns without substitute to precise operations. (#3413) This will no longer ignore NBT data when searching for an itemstack, thus less likely to trigger the CraftingManager fallback. --- .../implementations/CraftingCPUCluster.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java index 147949daf..86766b091 100644 --- a/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/CraftingCPUCluster.java @@ -19,6 +19,7 @@ package appeng.me.cluster.implementations; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -227,7 +228,7 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU { if( input instanceof IAEItemStack ) { - final IAEItemStack is = this.waitingFor.findPrecise( (IAEItemStack) input ); + final IAEItemStack is = this.waitingFor.findPrecise( input ); if( is != null && is.getStackSize() > 0 ) { return true; @@ -243,7 +244,7 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU return input; } - final IAEItemStack what = (IAEItemStack) input.copy(); + final IAEItemStack what = input.copy(); final IAEItemStack is = this.waitingFor.findPrecise( what ); if( type == Actionable.SIMULATE )// causes crafting to lock up? @@ -684,7 +685,25 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU if( details.isCraftable() ) { - for( IAEItemStack fuzz : this.inventory.getItemList().findFuzzy( input[x], FuzzyMode.IGNORE_ALL ) ) + final Collection itemList; + + if( details.canSubstitute() ) + { + itemList = this.inventory.getItemList().findFuzzy( input[x], FuzzyMode.IGNORE_ALL ); + } + else + { + itemList = new ArrayList<>( 1 ); + + final IAEItemStack item = this.inventory.getItemList().findPrecise( input[x] ); + + if( item != null ) + { + itemList.add( item ); + } + } + + for( IAEItemStack fuzz : itemList ) { fuzz = fuzz.copy(); fuzz.setStackSize( input[x].getStackSize() );