package net.minecraft.item.crafting; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public class FurnaceRecipes { private static final FurnaceRecipes smeltingBase = new FurnaceRecipes(); /** The list of smelting results. */ private Map smeltingList = new HashMap(); private Map experienceList = new HashMap(); private HashMap<List<Integer>, ItemStack> metaSmeltingList = new HashMap<List<Integer>, ItemStack>(); private HashMap<List<Integer>, Float> metaExperience = new HashMap<List<Integer>, Float>(); /** * Used to call methods addSmelting and getSmeltingResult. */ public static final FurnaceRecipes smelting() { return smeltingBase; } private FurnaceRecipes() { this.addSmelting(Block.oreIron.blockID, new ItemStack(Item.ingotIron), 0.7F); this.addSmelting(Block.oreGold.blockID, new ItemStack(Item.ingotGold), 1.0F); this.addSmelting(Block.oreDiamond.blockID, new ItemStack(Item.diamond), 1.0F); this.addSmelting(Block.sand.blockID, new ItemStack(Block.glass), 0.1F); this.addSmelting(Item.porkRaw.itemID, new ItemStack(Item.porkCooked), 0.35F); this.addSmelting(Item.beefRaw.itemID, new ItemStack(Item.beefCooked), 0.35F); this.addSmelting(Item.chickenRaw.itemID, new ItemStack(Item.chickenCooked), 0.35F); this.addSmelting(Item.fishRaw.itemID, new ItemStack(Item.fishCooked), 0.35F); this.addSmelting(Block.cobblestone.blockID, new ItemStack(Block.stone), 0.1F); this.addSmelting(Item.clay.itemID, new ItemStack(Item.brick), 0.3F); this.addSmelting(Block.cactus.blockID, new ItemStack(Item.dyePowder, 1, 2), 0.2F); this.addSmelting(Block.wood.blockID, new ItemStack(Item.coal, 1, 1), 0.15F); this.addSmelting(Block.oreEmerald.blockID, new ItemStack(Item.emerald), 1.0F); this.addSmelting(Item.potato.itemID, new ItemStack(Item.bakedPotato), 0.35F); this.addSmelting(Block.oreCoal.blockID, new ItemStack(Item.coal), 0.1F); this.addSmelting(Block.oreRedstone.blockID, new ItemStack(Item.redstone), 0.7F); this.addSmelting(Block.oreLapis.blockID, new ItemStack(Item.dyePowder, 1, 4), 0.2F); } /** * Adds a smelting recipe. */ public void addSmelting(int par1, ItemStack par2ItemStack, float par3) { this.smeltingList.put(Integer.valueOf(par1), par2ItemStack); this.experienceList.put(Integer.valueOf(par2ItemStack.itemID), Float.valueOf(par3)); } /** * Returns the smelting result of an item. * Deprecated in favor of a metadata sensitive version */ @Deprecated public ItemStack getSmeltingResult(int par1) { return (ItemStack)this.smeltingList.get(Integer.valueOf(par1)); } public Map getSmeltingList() { return this.smeltingList; } @Deprecated //In favor of ItemStack sensitive version public float getExperience(int par1) { return this.experienceList.containsKey(Integer.valueOf(par1)) ? ((Float)this.experienceList.get(Integer.valueOf(par1))).floatValue() : 0.0F; } /** * A metadata sensitive version of adding a furnace recipe. */ public void addSmelting(int itemID, int metadata, ItemStack itemstack, float experience) { metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack); metaExperience.put(Arrays.asList(itemID, metadata), experience); } /** * Used to get the resulting ItemStack form a source ItemStack * @param item The Source ItemStack * @return The result ItemStack */ public ItemStack getSmeltingResult(ItemStack item) { if (item == null) { return null; } ItemStack ret = (ItemStack)metaSmeltingList.get(Arrays.asList(item.itemID, item.getItemDamage())); if (ret != null) { return ret; } return (ItemStack)smeltingList.get(Integer.valueOf(item.itemID)); } /** * Grabs the amount of base experience for this item to give when pulled from the furnace slot. */ public float getExperience(ItemStack item) { if (item == null || item.getItem() == null) { return 0; } float ret = item.getItem().getSmeltingExperience(item); if (ret < 0 && metaExperience.containsKey(Arrays.asList(item.itemID, item.getItemDamage()))) { ret = metaExperience.get(Arrays.asList(item.itemID, item.getItemDamage())); } if (ret < 0 && experienceList.containsKey(item.itemID)) { ret = ((Float)experienceList.get(item.itemID)).floatValue(); } return (ret < 0 ? 0 : ret); } public Map<List<Integer>, ItemStack> getMetaSmeltingList() { return metaSmeltingList; } }