From 2c802310989edb2b94eb28d3f943dc7b7cf108fe Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 11 Mar 2017 12:23:16 +0100 Subject: [PATCH] Fixes slow oredict comparison, fixes #1044 --- .../com/raoulvdberge/refinedstorage/api/IRSAPI.java | 12 +++++++++++- .../com/raoulvdberge/refinedstorage/apiimpl/API.java | 4 ++-- .../refinedstorage/apiimpl/util/Comparer.java | 5 +++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java index 643be038c..efefc67e9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java @@ -118,9 +118,19 @@ public interface IRSAPI { /** * @param stack the stack + * @param tag whether the NBT tag of the stack should be calculated in the hashcode * @return a hashcode for the given stack */ - int getItemStackHashCode(ItemStack stack); + int getItemStackHashCode(ItemStack stack, boolean tag); + + + /** + * @param stack the stack + * @return a hashcode for the given stack + */ + default int getItemStackHashCode(ItemStack stack) { + return getItemStackHashCode(stack, true); + } /** * @param stack the stack diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java index 55b6e62d8..900ce2394 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java @@ -186,8 +186,8 @@ public class API implements IRSAPI { } @Override - public int getItemStackHashCode(ItemStack stack) { - return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); + public int getItemStackHashCode(ItemStack stack, boolean tag) { + return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * ((tag && stack.hasTagCompound()) ? stack.getTagCompound().hashCode() : 1); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java index 5e3d50bde..c7d314a45 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java @@ -117,8 +117,9 @@ public class Comparer implements IComparer { return validity == EnumActionResult.SUCCESS; } - int code = API.instance().getItemStackHashCode(left); - code = 31 * code + API.instance().getItemStackHashCode(right); + // We do not care about the NBT tag since the oredict doesn't care either, and generating a NBT hashcode is slow. + int code = API.instance().getItemStackHashCode(left, false); + code = 31 * code + API.instance().getItemStackHashCode(right, false); if (oredictCache.containsKey(code)) { return oredictCache.get(code);