aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
diff options
context:
space:
mode:
authorKiwi <42833050+Kiwi233@users.noreply.github.com>2020-12-13 21:24:20 +0800
committerGitHub <noreply@github.com>2020-12-13 21:24:20 +0800
commitd567ee9f63c6e11f2b21f26687cfc2ecaed200a1 (patch)
tree8e4c275624a966c4482b90ad85cda2375c6a63b9 /src/main/java/gregtech/api/util/GT_OreDictUnificator.java
parentcec32d0a604156802eee3f9e8fefccb40a62d7ef (diff)
parent7ce77a615de68add2bb0fa71818b3e36241a02a7 (diff)
downloadGT5-Unofficial-d567ee9f63c6e11f2b21f26687cfc2ecaed200a1.tar.gz
GT5-Unofficial-d567ee9f63c6e11f2b21f26687cfc2ecaed200a1.tar.bz2
GT5-Unofficial-d567ee9f63c6e11f2b21f26687cfc2ecaed200a1.zip
Merge pull request #2 from GTNewHorizons/experimental
5.09.33.57
Diffstat (limited to 'src/main/java/gregtech/api/util/GT_OreDictUnificator.java')
-rw-r--r--src/main/java/gregtech/api/util/GT_OreDictUnificator.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
index 9d9b45cecf..188af9cfaa 100644
--- a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
+++ b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
@@ -156,6 +156,59 @@ public class GT_OreDictUnificator {
return GT_Utility.copyAmount(aStack.stackSize, rStack);
}
+ /** Doesn't copy the returned stack or set quantity. Be careful and do not mutate it;
+ * intended only to optimize comparisons */
+ static ItemStack get_nocopy(boolean aUseBlackList, ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return null;
+ ItemData tPrefixMaterial = getAssociation(aStack);
+ ItemStack rStack = null;
+ if (tPrefixMaterial == null || !tPrefixMaterial.hasValidPrefixMaterialData() || (aUseBlackList && tPrefixMaterial.mBlackListed))
+ return aStack;
+ if (aUseBlackList && !GregTech_API.sUnificationEntriesRegistered && isBlacklisted(aStack)) {
+ tPrefixMaterial.mBlackListed = true;
+ return aStack;
+ }
+ if (tPrefixMaterial.mUnificationTarget == null)
+ tPrefixMaterial.mUnificationTarget = sName2StackMap.get(tPrefixMaterial.toString());
+ rStack = tPrefixMaterial.mUnificationTarget;
+ if (GT_Utility.isStackInvalid(rStack)) return aStack;
+ assert rStack != null;
+ rStack.setTagCompound(aStack.getTagCompound());
+ return rStack;
+ }
+
+ /** Compares the first argument against an already-unificated second argument as if
+ * aUseBlackList was both true and false. */
+ public static boolean isInputStackEqual(ItemStack aStack, ItemStack unified_tStack) {
+ boolean alreadyCompared = false;
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ ItemData tPrefixMaterial = getAssociation(aStack);
+ ItemStack rStack = null;
+ if (tPrefixMaterial == null || !tPrefixMaterial.hasValidPrefixMaterialData())
+ return GT_Utility.areStacksEqual(aStack, unified_tStack, true);
+ else if(tPrefixMaterial.mBlackListed) {
+ if (GT_Utility.areStacksEqual(aStack, unified_tStack, true))
+ return true;
+ else
+ alreadyCompared = true;
+ }
+ if (!alreadyCompared && !GregTech_API.sUnificationEntriesRegistered && isBlacklisted(aStack)) {
+ tPrefixMaterial.mBlackListed = true;
+ if (GT_Utility.areStacksEqual(aStack, unified_tStack, true))
+ return true;
+ else
+ alreadyCompared = true;
+ }
+ if (tPrefixMaterial.mUnificationTarget == null)
+ tPrefixMaterial.mUnificationTarget = sName2StackMap.get(tPrefixMaterial.toString());
+ rStack = tPrefixMaterial.mUnificationTarget;
+ if (GT_Utility.isStackInvalid(rStack))
+ return !alreadyCompared && GT_Utility.areStacksEqual(aStack, unified_tStack, true);
+ assert rStack != null;
+ rStack.setTagCompound(aStack.getTagCompound());
+ return GT_Utility.areStacksEqual(rStack, unified_tStack, true);
+ }
+
public static List<ItemStack> getNonUnifiedStacks(Object obj) {
synchronized (sUnificationTable) {
if (sUnificationTable.isEmpty() && !sItemStack2DataMap.isEmpty()) {