diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_OreDictUnificator.java | 22 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/GT_Recipe.java | 28 |
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; } |