001    package net.minecraft.src;
002    
003    import java.util.Arrays;
004    import java.util.HashMap;
005    import java.util.Map;
006    
007    public class FurnaceRecipes
008    {
009        private static final FurnaceRecipes smeltingBase = new FurnaceRecipes();
010    
011        /** The list of smelting results. */
012        private Map smeltingList = new HashMap();
013        private Map experienceList = new HashMap();
014        private Map metaSmeltingList = new HashMap();
015    
016        /**
017         * Used to call methods addSmelting and getSmeltingResult.
018         */
019        public static final FurnaceRecipes smelting()
020        {
021            return smeltingBase;
022        }
023    
024        private FurnaceRecipes()
025        {
026            this.addSmelting(Block.oreIron.blockID, new ItemStack(Item.ingotIron), 0.7F);
027            this.addSmelting(Block.oreGold.blockID, new ItemStack(Item.ingotGold), 1.0F);
028            this.addSmelting(Block.oreDiamond.blockID, new ItemStack(Item.diamond), 1.0F);
029            this.addSmelting(Block.sand.blockID, new ItemStack(Block.glass), 0.1F);
030            this.addSmelting(Item.porkRaw.shiftedIndex, new ItemStack(Item.porkCooked), 0.3F);
031            this.addSmelting(Item.beefRaw.shiftedIndex, new ItemStack(Item.beefCooked), 0.3F);
032            this.addSmelting(Item.chickenRaw.shiftedIndex, new ItemStack(Item.chickenCooked), 0.3F);
033            this.addSmelting(Item.fishRaw.shiftedIndex, new ItemStack(Item.fishCooked), 0.3F);
034            this.addSmelting(Block.cobblestone.blockID, new ItemStack(Block.stone), 0.1F);
035            this.addSmelting(Item.clay.shiftedIndex, new ItemStack(Item.brick), 0.2F);
036            this.addSmelting(Block.cactus.blockID, new ItemStack(Item.dyePowder, 1, 2), 0.2F);
037            this.addSmelting(Block.wood.blockID, new ItemStack(Item.coal, 1, 1), 0.1F);
038            this.addSmelting(Block.oreEmerald.blockID, new ItemStack(Item.emerald), 1.0F);
039            this.addSmelting(Block.oreCoal.blockID, new ItemStack(Item.coal), 0.1F);
040            this.addSmelting(Block.oreRedstone.blockID, new ItemStack(Item.redstone), 0.7F);
041            this.addSmelting(Block.oreLapis.blockID, new ItemStack(Item.dyePowder, 1, 4), 0.2F);
042        }
043    
044        /**
045         * Adds a smelting recipe.
046         */
047        public void addSmelting(int par1, ItemStack par2ItemStack, float par3)
048        {
049            this.smeltingList.put(Integer.valueOf(par1), par2ItemStack);
050            this.experienceList.put(Integer.valueOf(par2ItemStack.itemID), Float.valueOf(par3));
051        }
052    
053        /**
054         * Returns the smelting result of an item.
055         * Deprecated in favor of a metadata sensitive version
056         */
057        @Deprecated
058        public ItemStack getSmeltingResult(int par1)
059        {
060            return (ItemStack)this.smeltingList.get(Integer.valueOf(par1));
061        }
062    
063        public Map getSmeltingList()
064        {
065            return this.smeltingList;
066        }
067    
068        public float getExperience(int par1)
069        {
070            return this.experienceList.containsKey(Integer.valueOf(par1)) ? ((Float)this.experienceList.get(Integer.valueOf(par1))).floatValue() : 0.0F;
071        }
072    
073        /**
074         * Add a metadata-sensitive furnace recipe
075         * @param itemID The Item ID
076         * @param metadata The Item Metadata
077         * @param itemstack The ItemStack for the result
078         */
079        public void addSmelting(int itemID, int metadata, ItemStack itemstack)
080        {
081            metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack);
082        }
083        
084        /**
085         * Used to get the resulting ItemStack form a source ItemStack
086         * @param item The Source ItemStack
087         * @return The result ItemStack
088         */
089        public ItemStack getSmeltingResult(ItemStack item) 
090        {
091            if (item == null)
092            {
093                return null;
094            }
095            ItemStack ret = (ItemStack)metaSmeltingList.get(Arrays.asList(item.itemID, item.getItemDamage()));
096            if (ret != null) 
097            {
098                return ret;
099            }
100            return (ItemStack)smeltingList.get(Integer.valueOf(item.itemID));
101        }
102    }