aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/util/GT_OreDictUnificator.java')
-rw-r--r--src/main/java/gregtech/api/util/GT_OreDictUnificator.java43
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;
}