From 8c5842aca9cdfcbe9a2d3d452be7a0fc0bc5748e Mon Sep 17 00:00:00 2001 From: yueh Date: Sun, 14 Jan 2018 13:43:31 +0100 Subject: [PATCH] Fixes #3315: Slightly more permissive checks for autocrafting (#3319) * Fixes #3315: Slightly more permissive checks for autocrafting Also fixes a bug in the fallback for looking up patterns to only use ItemStack.EMPTY. --- .../java/appeng/me/cache/CraftingGridCache.java | 3 ++- .../appeng/util/helpers/ItemComparisonHelper.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/appeng/me/cache/CraftingGridCache.java b/src/main/java/appeng/me/cache/CraftingGridCache.java index 81c87d364..8810da918 100644 --- a/src/main/java/appeng/me/cache/CraftingGridCache.java +++ b/src/main/java/appeng/me/cache/CraftingGridCache.java @@ -489,7 +489,8 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper if( ais.getItem() == whatToCraft.getItem() && ( !ais.getItem().getHasSubtypes() || ais.getItemDamage() == whatToCraft.getItemDamage() ) ) { // TODO: check if OK - if( details.isValidItemForSlot( slotIndex, ais.createItemStack(), world ) ) + // TODO: this is slightly hacky, but fine as long as we only deal with itemstacks + if( details.isValidItemForSlot( slotIndex, ais.asItemStackRepresentation(), world ) ) { return this.craftableItems.get( ais ); } diff --git a/src/main/java/appeng/util/helpers/ItemComparisonHelper.java b/src/main/java/appeng/util/helpers/ItemComparisonHelper.java index d11f190a0..db4b55e36 100644 --- a/src/main/java/appeng/util/helpers/ItemComparisonHelper.java +++ b/src/main/java/appeng/util/helpers/ItemComparisonHelper.java @@ -180,10 +180,25 @@ public class ItemComparisonHelper { return true; } + + final boolean isLeftEmpty = left == null || left.hasNoTags(); + final boolean isRightEmpty = right == null || right.hasNoTags(); + + if( isLeftEmpty && isRightEmpty ) + { + return true; + } + + if( isLeftEmpty != isRightEmpty ) + { + return false; + } + if( left != null ) { return left.equals( right ); } + return false; } }