diff --git a/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java new file mode 100644 index 00000000..d1b14750 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api/ItemStackWrapper.java @@ -0,0 +1,53 @@ +package WayofTime.bloodmagic.api; + +import lombok.EqualsAndHashCode; +import lombok.RequiredArgsConstructor; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +@RequiredArgsConstructor +@EqualsAndHashCode +public class ItemStackWrapper { + + public final Item item; + public final int stackSize; + public final int meta; + + public ItemStackWrapper(Item item, int stackSize) { + this(item, stackSize, 0); + } + + public ItemStackWrapper(Item item) { + this(item, 1, 0); + } + + public ItemStackWrapper(Block block, int stackSize, int meta) { + this(Item.getItemFromBlock(block), stackSize, meta); + } + + public ItemStackWrapper(Block block, int stackSize) { + this(block, stackSize, 0); + } + + public ItemStackWrapper(Block block) { + this(block, 1, 0); + } + + public ItemStack toStack() { + return new ItemStack(item, stackSize, meta); + } + + public String getDisplayName() { + return toStack().getDisplayName(); + } + + @Override + public String toString() { + return stackSize + "x" + item.getUnlocalizedName() + "@" + this.meta; + } + + public static ItemStackWrapper getHolder(ItemStack stack) { + return new ItemStackWrapper(stack.getItem(), stack.stackSize, stack.getItemDamage()); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api/altar/AltarRecipe.java b/src/main/java/WayofTime/bloodmagic/api/altar/AltarRecipe.java index d8e56dd2..d4729fc0 100644 --- a/src/main/java/WayofTime/bloodmagic/api/altar/AltarRecipe.java +++ b/src/main/java/WayofTime/bloodmagic/api/altar/AltarRecipe.java @@ -1,7 +1,7 @@ package WayofTime.bloodmagic.api.altar; +import WayofTime.bloodmagic.api.ItemStackWrapper; import lombok.Getter; -import net.minecraft.item.ItemStack; import javax.annotation.Nullable; @@ -10,7 +10,7 @@ public class AltarRecipe { public final int syphon, consumeRate, drainRate; public final boolean useTag; - public final ItemStack input, output; + public final ItemStackWrapper input, output; public final EnumAltarTier minTier; /** @@ -25,7 +25,7 @@ public class AltarRecipe { * @param drainRate - The rate at which LP is drained during crafting * @param useTag - */ - public AltarRecipe(ItemStack input, @Nullable ItemStack output, EnumAltarTier minTier, int syphon, int consumeRate, int drainRate, boolean useTag) { + public AltarRecipe(ItemStackWrapper input, @Nullable ItemStackWrapper output, EnumAltarTier minTier, int syphon, int consumeRate, int drainRate, boolean useTag) { this.input = input; this.output = output; this.minTier = minTier; @@ -35,11 +35,11 @@ public class AltarRecipe { this.useTag = useTag; } - public AltarRecipe(ItemStack input, ItemStack output, EnumAltarTier minTier, int syphon, int consumeRate, int drainRate) { + public AltarRecipe(ItemStackWrapper input, ItemStackWrapper output, EnumAltarTier minTier, int syphon, int consumeRate, int drainRate) { this(input, output, minTier, syphon, consumeRate, drainRate, false); } - public AltarRecipe (ItemStack input, EnumAltarTier minTier, int consumeRate, int drainRate) { + public AltarRecipe (ItemStackWrapper input, EnumAltarTier minTier, int consumeRate, int drainRate) { this(input, null, minTier, 0, consumeRate, drainRate); } } diff --git a/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java index 208616b9..43205ba5 100644 --- a/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java +++ b/src/main/java/WayofTime/bloodmagic/api/registry/AltarRecipeRegistry.java @@ -1,16 +1,16 @@ package WayofTime.bloodmagic.api.registry; import WayofTime.bloodmagic.api.BloodMagicAPI; +import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.altar.AltarRecipe; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import lombok.Getter; -import net.minecraft.item.ItemStack; public class AltarRecipeRegistry { @Getter - private static BiMap recipes = HashBiMap.create(); + private static BiMap recipes = HashBiMap.create(); public static void registerRecipe(AltarRecipe recipe) { if (!recipes.containsValue(recipe)) @@ -19,11 +19,7 @@ public class AltarRecipeRegistry { BloodMagicAPI.getLogger().error("Error adding recipe for " + recipe.input.getDisplayName() + (recipe.output == null ? "" : " -> " + recipe.output.getDisplayName()) + ". Recipe already exists."); } - public static AltarRecipe getRecipeForInput(ItemStack input) { - for (ItemStack stack : recipes.keySet()) - if (stack.getIsItemStackEqual(input)) - return recipes.get(stack); - - return null; + public static AltarRecipe getRecipeForInput(ItemStackWrapper input) { + return recipes.get(input); } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java index 0ee1e3ad..8c16f9ac 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic.tile; import WayofTime.bloodmagic.altar.BloodAltar; import WayofTime.bloodmagic.api.BloodMagicAPI; +import WayofTime.bloodmagic.api.ItemStackWrapper; import WayofTime.bloodmagic.api.NBTHolder; import WayofTime.bloodmagic.api.altar.AltarRecipe; import WayofTime.bloodmagic.api.altar.AltarUpgrade; @@ -71,7 +72,7 @@ public class TileAltar extends TileInventory implements IBloodAltar, IUpdatePlay setInputFluid(fluidIn); } - altarTier = Enums.getIfPresent(EnumAltarTier.class, tagCompound.getString(NBTHolder.NBT_ALTAR_TIER)).get(); + altarTier = Enums.getIfPresent(EnumAltarTier.class, tagCompound.getString(NBTHolder.NBT_ALTAR_TIER)).or(EnumAltarTier.ONE); isActive = tagCompound.getBoolean(NBTHolder.NBT_ALTAR_ACTIVE); liquidRequired = tagCompound.getInteger(NBTHolder.NBT_ALTAR_LIQUID_REQ); canBeFilled = tagCompound.getBoolean(NBTHolder.NBT_ALTAR_FILLABLE); @@ -164,8 +165,8 @@ public class TileAltar extends TileInventory implements IBloodAltar, IUpdatePlay if (getStackInSlot(0) != null) { // Do recipes - if (AltarRecipeRegistry.getRecipes().containsKey(getStackInSlot(0))) { - AltarRecipe recipe = AltarRecipeRegistry.getRecipeForInput(getStackInSlot(0)); + if (AltarRecipeRegistry.getRecipes().containsKey(ItemStackWrapper.getHolder(getStackInSlot(0)))) { + AltarRecipe recipe = AltarRecipeRegistry.getRecipeForInput(ItemStackWrapper.getHolder(getStackInSlot(0))); if (altarTier.ordinal() >= recipe.getMinTier().ordinal()) { this.liquidRequired = recipe.getSyphon(); diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java b/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java index fa472de7..3e11f640 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java @@ -1,6 +1,5 @@ package WayofTime.bloodmagic.tile; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryHelper;