aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/gregtech/api/util/GT_OreDictUnificator.java22
-rw-r--r--src/main/java/gregtech/api/util/GT_Recipe.java28
2 files changed, 35 insertions, 15 deletions
diff --git a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
index 7032fc87fc..82c14f2aeb 100644
--- a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
+++ b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java
@@ -255,24 +255,32 @@ public class GT_OreDictUnificator {
* false.
*/
public static boolean isInputStackEqual(ItemStack aStack, ItemStack unified_tStack) {
+ if (GT_Utility.isStackInvalid(aStack)) return false;
+ return isInputStackEqual(aStack, getAssociation(aStack), unified_tStack);
+ }
+
+ /**
+ * Compares the first argument against an already-unificated second argument as if aUseBlackList was both true and
+ * false.
+ */
+ public static boolean isInputStackEqual(ItemStack aStack, ItemData aStackPrefixData, 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())
+ if (aStackPrefixData == null || !aStackPrefixData.hasValidPrefixMaterialData())
return GT_Utility.areStacksEqual(aStack, unified_tStack, true);
- else if (tPrefixMaterial.mBlackListed) {
+ else if (aStackPrefixData.mBlackListed) {
if (GT_Utility.areStacksEqual(aStack, unified_tStack, true)) return true;
else alreadyCompared = true;
}
if (!alreadyCompared && !GregTech_API.sUnificationEntriesRegistered && isBlacklisted(aStack)) {
- tPrefixMaterial.mBlackListed = true;
+ aStackPrefixData.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 (aStackPrefixData.mUnificationTarget == null)
+ aStackPrefixData.mUnificationTarget = sName2StackMap.get(aStackPrefixData.toString());
+ rStack = aStackPrefixData.mUnificationTarget;
if (GT_Utility.isStackInvalid(rStack))
return !alreadyCompared && GT_Utility.areStacksEqual(aStack, unified_tStack, true);
return GT_Utility.areStacksEqual(rStack, unified_tStack, true);
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java
index 71eab4163a..53d237096c 100644
--- a/src/main/java/gregtech/api/util/GT_Recipe.java
+++ b/src/main/java/gregtech/api/util/GT_Recipe.java
@@ -32,6 +32,7 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput;
import gregtech.api.objects.GT_ItemStack;
+import gregtech.api.objects.ItemData;
import gregtech.api.recipe.RecipeCategory;
import gregtech.api.recipe.RecipeMap;
import gregtech.api.recipe.RecipeMaps;
@@ -173,6 +174,17 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
public boolean matchesType(final ItemStack other) {
return GT_Utility.areStacksEqual(this.unifiedStack, other, !usesNbtMatching);
}
+
+ /**
+ * @return True if the given input+oredict data for that input can be used as a valid recipe ingredient.
+ */
+ public boolean matchesRecipe(final ItemData oredictOther, final ItemStack other) {
+ if (usesNbtMatching) {
+ return GT_Utility.areStacksEqual(this.unifiedStack, other, false);
+ } else {
+ return GT_OreDictUnificator.isInputStackEqual(other, oredictOther, unifiedStack);
+ }
+ }
}
private GT_Recipe(GT_Recipe aRecipe, boolean shallow) {
@@ -552,9 +564,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
return;
}
- final ItemStack[] unifiedProvidedInputs = new ItemStack[aInputs.length];
+ final ItemData[] unifiedProvidedInputs = new ItemData[aInputs.length];
for (int i = 0; i < aInputs.length; i++) {
- unifiedProvidedInputs[i] = GT_OreDictUnificator.get_nocopy(true, aInputs[i]);
+ unifiedProvidedInputs[i] = GT_OreDictUnificator.getAssociation(aInputs[i]);
}
final @NotNull RecipeItemInput @NotNull [] combinedInputs = getCachedCombinedItemInputs();
@@ -567,8 +579,8 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
continue;
}
- final ItemStack providedUnifiedItem = unifiedProvidedInputs[iProvided];
- if (!recipeItemCost.matchesType(providedUnifiedItem)) {
+ final ItemData providedUnifiedItem = unifiedProvidedInputs[iProvided];
+ if (!recipeItemCost.matchesRecipe(providedUnifiedItem, providedItem)) {
continue;
}
@@ -628,9 +640,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
// Fewer item types provided than required by the recipe, making it impossible to satisfy.
return 0;
}
- final ItemStack[] unifiedProvidedInputs = new ItemStack[aInputs.length];
+ final ItemData[] unifiedProvidedInputs = new ItemData[aInputs.length];
for (int i = 0; i < aInputs.length; i++) {
- unifiedProvidedInputs[i] = GT_OreDictUnificator.get_nocopy(true, aInputs[i]);
+ unifiedProvidedInputs[i] = GT_OreDictUnificator.getAssociation(aInputs[i]);
}
recipeItemLoop: for (final RecipeItemInput combinedInput : combinedInputs) {
@@ -638,9 +650,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
long providedAmount = 0;
for (int i = 0; i < unifiedProvidedInputs.length; i++) {
- final ItemStack providedUnifiedItem = unifiedProvidedInputs[i];
+ final ItemData providedUnifiedItem = unifiedProvidedInputs[i];
final ItemStack providedItem = aInputs[i];
- if (!combinedInput.matchesType(providedUnifiedItem)) {
+ if (!combinedInput.matchesRecipe(providedUnifiedItem, providedItem)) {
continue;
}