From 2f8761af5b751dbd2c01d33b6dc8afe095e707b4 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 2 Nov 2016 19:56:25 +0100 Subject: [PATCH] Cache ore dictionary compare checks --- .../refinedstorage/apiimpl/util/Comparer.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 bfe9c177a..6a8530331 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java @@ -1,11 +1,15 @@ package com.raoulvdberge.refinedstorage.apiimpl.util; import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.apiimpl.API; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.ArrayUtils; +import java.util.HashMap; +import java.util.Map; + public class Comparer implements IComparer { @Override public boolean isEqual(ItemStack left, ItemStack right, int flags) { @@ -92,6 +96,8 @@ public class Comparer implements IComparer { return true; } + private Map oredictCache = new HashMap<>(); + @Override public boolean isEqualOredict(ItemStack left, ItemStack right) { if (left == null && right == null) { @@ -102,15 +108,26 @@ public class Comparer implements IComparer { return false; } + int code = API.instance().getItemStackHashCode(left); + code = 31 * code + API.instance().getItemStackHashCode(right); + + if (oredictCache.containsKey(code)) { + return oredictCache.get(code); + } + int[] leftIds = OreDictionary.getOreIDs(left); int[] rightIds = OreDictionary.getOreIDs(right); for (int i : rightIds) { if (ArrayUtils.contains(leftIds, i)) { + oredictCache.put(code, true); + return true; } } + oredictCache.put(code, false); + return false; } }