/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.util.crafting;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.minecraft.item.ItemStack;
import mods.railcraft.api.crafting.IBlastFurnaceCraftingManager;
import mods.railcraft.api.crafting.IBlastFurnaceRecipe;
import mods.railcraft.api.crafting.RailcraftCraftingManager;
import mods.railcraft.common.blocks.aesthetics.cube.EnumCube;
import mods.railcraft.common.items.firestone.ItemFirestoneRefined;
import mods.railcraft.common.items.RailcraftToolItems;
import mods.railcraft.common.items.firestone.ItemFirestoneCracked;
import mods.railcraft.common.plugins.thaumcraft.ThaumcraftPlugin;
import mods.railcraft.common.util.inventory.InvTools;
import net.minecraft.init.Items;
import net.minecraftforge.oredict.OreDictionary;
public class BlastFurnaceCraftingManager implements IBlastFurnaceCraftingManager {
private final List<BlastFurnaceRecipe> recipes = new ArrayList<BlastFurnaceRecipe>();
private List<ItemStack> fuels;
public static IBlastFurnaceCraftingManager getInstance() {
return RailcraftCraftingManager.blastFurnace;
}
@Override
public List<ItemStack> getFuels() {
if (fuels == null) {
List<ItemStack> fuel = new ArrayList<ItemStack>() {
@Override
public boolean add(ItemStack e) {
if (e == null)
return false;
return super.add(e);
}
};
fuel.add(ThaumcraftPlugin.getItem("itemResource", 0));
fuel.add(RailcraftToolItems.getCoalCoke());
fuel.add(EnumCube.COKE_BLOCK.getItem());
fuel.add(new ItemStack(Items.coal, 1, 1));
fuel.add(InvTools.makeStack(ItemFirestoneRefined.item, 1, OreDictionary.WILDCARD_VALUE));
fuel.add(InvTools.makeStack(ItemFirestoneCracked.item, 1, OreDictionary.WILDCARD_VALUE));
fuels = Collections.unmodifiableList(fuel);
}
return fuels;
}
@Override
public List<? extends IBlastFurnaceRecipe> getRecipes() {
return recipes;
}
public static class BlastFurnaceRecipe implements IBlastFurnaceRecipe {
private final ItemStack input;
private final boolean matchDamage;
private final boolean matchNBT;
private final int cookTime;
private final ItemStack output;
public BlastFurnaceRecipe(ItemStack input, boolean matchDamage, boolean matchNBT, int cookTime, ItemStack output) {
this.input = input.copy();
this.matchDamage = matchDamage;
this.matchNBT = matchNBT;
this.cookTime = cookTime;
this.output = output.copy();
}
@Override
public boolean isRoomForOutput(ItemStack outputSlot) {
if ((outputSlot == null || output == null || (InvTools.isItemEqual(outputSlot, output) && outputSlot.stackSize + output.stackSize <= output.getMaxStackSize())))
return true;
return false;
}
@Override
public ItemStack getInput() {
return input.copy();
}
public boolean matchDamage() {
return matchDamage;
}
public boolean matchNBT() {
return matchNBT;
}
@Override
public ItemStack getOutput() {
return output.copy();
}
@Override
public int getOutputStackSize() {
if (output == null)
return 0;
return output.stackSize;
}
@Override
public int getCookTime() {
return cookTime;
}
}
@Override
public void addRecipe(ItemStack input, boolean matchDamage, boolean matchNBT, int cookTime, ItemStack output) {
if (input != null && output != null)
recipes.add(new BlastFurnaceRecipe(input, matchDamage, matchNBT, cookTime, output));
}
@Override
public IBlastFurnaceRecipe getRecipe(ItemStack input) {
if (input == null) return null;
for (BlastFurnaceRecipe r : recipes) {
if (!r.matchDamage || InvTools.isWildcard(r.input)) continue;
if (InvTools.isItemEqual(input, r.input, true, r.matchNBT))
return r;
}
for (BlastFurnaceRecipe r : recipes) {
if (InvTools.isItemEqual(input, r.input, r.matchDamage, r.matchNBT))
return r;
}
return null;
}
}