diff options
Diffstat (limited to 'src/main/java/gregtech/api/util/GT_OreDictUnificator.java')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_OreDictUnificator.java | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java index 2d493ebe2d..7032fc87fc 100644 --- a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java +++ b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java @@ -7,7 +7,6 @@ import static gregtech.api.enums.GT_Values.W; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -25,9 +24,10 @@ import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.SubTag; import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_ItemStack2; import gregtech.api.objects.ItemData; import gregtech.api.objects.MaterialStack; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; /** * NEVER INCLUDE THIS FILE IN YOUR MOD!!! @@ -41,9 +41,12 @@ import gregtech.api.objects.MaterialStack; public class GT_OreDictUnificator { private static final Map<String, ItemStack> sName2StackMap = new HashMap<>(); - private static final Map<GT_ItemStack2, ItemData> sItemStack2DataMap = new HashMap<>(); - private static final Map<GT_ItemStack2, List<ItemStack>> sUnificationTable = new HashMap<>(); - private static final Set<GT_ItemStack2> sNoUnificationList = new HashSet<>(); + private static final Map<ItemStack, ItemData> sItemStack2DataMap = new Object2ObjectOpenCustomHashMap<>( + GT_ItemStack.ITEMSTACK_HASH_STRATEGY2); + private static final Map<ItemStack, List<ItemStack>> sUnificationTable = new Object2ObjectOpenCustomHashMap<>( + GT_ItemStack.ITEMSTACK_HASH_STRATEGY2); + private static final Set<ItemStack> sNoUnificationList = new ObjectOpenCustomHashSet<>( + GT_ItemStack.ITEMSTACK_HASH_STRATEGY2); private static int isRegisteringOre = 0, isAddingOre = 0; private static boolean mRunThroughTheList = true; @@ -57,12 +60,12 @@ public class GT_OreDictUnificator { * the Industrial Diamond, which is better than regular Diamond, but also usable in absolutely all Diamond Recipes. */ public static void addToBlacklist(ItemStack aStack) { - if (GT_Utility.isStackValid(aStack) && !GT_Utility.isStackInList(aStack, sNoUnificationList)) - sNoUnificationList.add(new GT_ItemStack2(aStack)); + if (GT_Utility.isStackValid(aStack) && !GT_Utility.isStackInStackSet(aStack, sNoUnificationList)) + sNoUnificationList.add(aStack); } public static boolean isBlacklisted(ItemStack aStack) { - return GT_Utility.isStackInList(aStack, sNoUnificationList); + return GT_Utility.isStackInStackSet(aStack, sNoUnificationList); } public static void add(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack) { @@ -281,12 +284,11 @@ public class GT_OreDictUnificator { // 5900x tries to do NEI lookup synchronized (sUnificationTable) { if (sUnificationTable.isEmpty() && !sItemStack2DataMap.isEmpty()) { - for (GT_ItemStack tGTStack0 : sItemStack2DataMap.keySet()) { - ItemStack tStack0 = tGTStack0.toStack(); + for (ItemStack tGTStack0 : sItemStack2DataMap.keySet()) { + ItemStack tStack0 = GT_ItemStack.internalCopyStack(tGTStack0); ItemStack tStack1 = get_nocopy(false, tStack0); if (!GT_Utility.areStacksEqual(tStack0, tStack1)) { - GT_ItemStack2 tGTStack1 = new GT_ItemStack2(tStack1); - List<ItemStack> list = sUnificationTable.computeIfAbsent(tGTStack1, k -> new ArrayList<>()); + List<ItemStack> list = sUnificationTable.computeIfAbsent(tStack1, k -> new ArrayList<>()); // greg's original code tries to dedupe the list using List#contains, which won't work // on vanilla ItemStack. I removed it since it never worked and can be slow. list.add(tStack0); @@ -303,7 +305,7 @@ public class GT_OreDictUnificator { for (ItemStack aStack : aStacks) { if (aStack == null) continue; rList.add(aStack); - List<ItemStack> tList = sUnificationTable.get(new GT_ItemStack2(aStack)); + List<ItemStack> tList = sUnificationTable.get(aStack); if (tList != null) { for (ItemStack tStack : tList) { ItemStack tStack1 = GT_Utility.copyAmount(aStack.stackSize, tStack); @@ -346,7 +348,7 @@ public class GT_OreDictUnificator { for (MaterialStack tMaterial : aData.mByProducts) tMaterial.mAmount /= aStack.stackSize; aStack = GT_Utility.copyAmount(1, aStack); } - sItemStack2DataMap.put(new GT_ItemStack2(aStack), aData); + sItemStack2DataMap.put(aStack, aData); if (aData.hasValidMaterialData()) { long tValidMaterialAmount = aData.mMaterial.mMaterial.contains(SubTag.NO_RECYCLING) ? 0 : aData.mMaterial.mAmount >= 0 ? aData.mMaterial.mAmount : M; @@ -358,11 +360,10 @@ public class GT_OreDictUnificator { if (mRunThroughTheList) { if (GregTech_API.sLoadStarted) { mRunThroughTheList = false; - for (Entry<GT_ItemStack2, ItemData> tEntry : sItemStack2DataMap.entrySet()) if (!tEntry.getValue() + for (Entry<ItemStack, ItemData> tEntry : sItemStack2DataMap.entrySet()) if (!tEntry.getValue() .hasValidPrefixData() || tEntry.getValue().mPrefix.mAllowNormalRecycling) GT_RecipeRegistrator.registerMaterialRecycling( - tEntry.getKey() - .toStack(), + GT_ItemStack.internalCopyStack(tEntry.getKey()), tEntry.getValue()); } } else { @@ -379,7 +380,7 @@ public class GT_OreDictUnificator { if (GT_Utility.isStackInvalid(aStack)) { return; } - sItemStack2DataMap.remove(new GT_ItemStack2(aStack)); + sItemStack2DataMap.remove(aStack); } public static void addAssociation(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack, @@ -393,8 +394,10 @@ public class GT_OreDictUnificator { @Nullable public static ItemData getItemData(ItemStack aStack) { if (GT_Utility.isStackInvalid(aStack)) return null; - ItemData rData = sItemStack2DataMap.get(new GT_ItemStack2(aStack)); - if (rData == null) rData = sItemStack2DataMap.get(new GT_ItemStack2(aStack, true)); + ItemData rData = sItemStack2DataMap.get(aStack); + if (rData == null) { // Try the lookup again but with wildcard damage value + rData = sItemStack2DataMap.get(GT_ItemStack.internalCopyStack(aStack, true)); + } return rData; } |