diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java index 751d2d05..0e7b0172 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.altar; +import java.util.Collections; import java.util.List; import lombok.Getter; @@ -354,7 +355,8 @@ public class BloodAltar implements IFluidHandler if (tileAltar.getStackInSlot(0) != null) { // Do recipes - for (AltarRecipe recipe : AltarRecipeRegistry.getRecipes().values()) + AltarRecipe recipe = AltarRecipeRegistry.getRecipeForInput(tileAltar.getStackInSlot(0)); + if (recipe != null) { if (recipe.doesRequiredItemMatch(tileAltar.getStackInSlot(0), altarTier)) { diff --git a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java index 45317d80..b19b4eb2 100644 --- a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java +++ b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java @@ -8,6 +8,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import java.util.ArrayList; +import java.util.List; + @RequiredArgsConstructor @EqualsAndHashCode public class ItemStackWrapper @@ -80,4 +83,22 @@ public class ItemStackWrapper result.setTagCompound(nbtTag); return result; } + + public static List toWrapperList(List itemStackList) + { + List wrapperList = new ArrayList(); + for (ItemStack stack : itemStackList) + wrapperList.add(ItemStackWrapper.getHolder(stack)); + + return wrapperList; + } + + public static List toStackList(List wrapperList) + { + List stackList = new ArrayList(); + for (ItemStackWrapper wrapper : wrapperList) + stackList.add(wrapper.toStack()); + + return stackList; + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java index 8e41c3f7..24ef045b 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java @@ -1,6 +1,7 @@ package WayofTime.bloodmagic.api.registry; import WayofTime.bloodmagic.api.BloodMagicAPI; +import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.altar.EnumAltarTier; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; @@ -15,7 +16,7 @@ import java.util.List; public class AltarRecipeRegistry { - private static BiMap, AltarRecipe> recipes = HashBiMap.create(); + private static BiMap, AltarRecipe> recipes = HashBiMap.create(); /** * Registers an {@link AltarRecipe} for the Blood Altar. This can be a @@ -50,13 +51,24 @@ public class AltarRecipeRegistry */ public static AltarRecipe getRecipeForInput(List input) { - if (recipes.keySet().contains(input)) - return recipes.get(input); + List wrapperList = ItemStackWrapper.toWrapperList(input); + if (recipes.keySet().contains(wrapperList)) + return recipes.get(wrapperList); return null; } - public static BiMap, AltarRecipe> getRecipes() + public static AltarRecipe getRecipeForInput(ItemStack input) + { + return getRecipeForInput(Collections.singletonList(input)); + } + + public static AltarRecipe getRecipeForInput(String input) + { + return getRecipeForInput(OreDictionary.getOres(input)); + } + + public static BiMap, AltarRecipe> getRecipes() { return HashBiMap.create(recipes); } @@ -66,7 +78,7 @@ public class AltarRecipeRegistry @EqualsAndHashCode public static class AltarRecipe { - private final List input; + private final List input; private final ItemStack output; private final EnumAltarTier minTier; private final int syphon, consumeRate, drainRate; @@ -96,7 +108,7 @@ public class AltarRecipeRegistry */ public AltarRecipe(List input, ItemStack output, EnumAltarTier minTier, int syphon, int consumeRate, int drainRate, boolean fillable) { - this.input = input; + this.input = ItemStackWrapper.toWrapperList(input); this.output = output; this.minTier = minTier; this.syphon = syphon < 0 ? -syphon : syphon; @@ -138,8 +150,8 @@ public class AltarRecipeRegistry if (tierCheck.ordinal() < minTier.ordinal()) return false; - for (ItemStack stack : input) - if (comparedStack.isItemEqual(stack)) + for (ItemStackWrapper stack : input) + if (comparedStack.isItemEqual(stack.toStack())) return true; return false; diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java index bb81bc70..413f442b 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java +++ b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.compat.guideapi.page; +import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; import WayofTime.bloodmagic.util.helper.TextHelper; import amerifrance.guideapi.api.impl.Book; @@ -29,7 +30,7 @@ public class PageAltarRecipe extends Page public PageAltarRecipe(AltarRecipeRegistry.AltarRecipe recipe) { - this.input = recipe.getInput(); + this.input = ItemStackWrapper.toStackList(recipe.getInput()); this.output = recipe.getOutput(); this.tier = recipe.getMinTier().toInt(); this.bloodRequired = recipe.getSyphon(); diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java index c1a43a04..190629df 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java @@ -7,27 +7,27 @@ import java.util.Map; import javax.annotation.Nonnull; import WayofTime.bloodmagic.api.BloodMagicAPI; +import WayofTime.bloodmagic.api.ItemStackWrapper; import net.minecraft.item.ItemStack; import WayofTime.bloodmagic.api.orb.IBloodOrb; import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; import net.minecraftforge.common.ForgeModContainer; -import net.minecraftforge.fluids.UniversalBucket; public class AltarRecipeMaker { @Nonnull public static List getRecipes() { - Map, AltarRecipeRegistry.AltarRecipe> altarMap = AltarRecipeRegistry.getRecipes(); + Map, AltarRecipeRegistry.AltarRecipe> altarMap = AltarRecipeRegistry.getRecipes(); ArrayList recipes = new ArrayList(); - for (Map.Entry, AltarRecipeRegistry.AltarRecipe> itemStackAltarRecipeEntry : altarMap.entrySet()) + for (Map.Entry, AltarRecipeRegistry.AltarRecipe> itemStackAltarRecipeEntry : altarMap.entrySet()) { // Make sure input is not a Blood Orb. If it is, the recipe is for a filling orb, and we don't want that. - if (!(itemStackAltarRecipeEntry.getKey().get(0).getItem() instanceof IBloodOrb)) + if (!(itemStackAltarRecipeEntry.getKey().get(0).toStack().getItem() instanceof IBloodOrb)) { - List input = itemStackAltarRecipeEntry.getValue().getInput(); + List input = ItemStackWrapper.toStackList(itemStackAltarRecipeEntry.getValue().getInput()); ItemStack output = itemStackAltarRecipeEntry.getValue().getOutput(); int requiredTier = itemStackAltarRecipeEntry.getValue().getMinTier().toInt(); int requiredLP = itemStackAltarRecipeEntry.getValue().getSyphon();