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(Item.field_82794_bL.shiftedIndex, new ItemStack(Item.field_82795_bM), 0.2F);
040            this.addSmelting(Block.oreCoal.blockID, new ItemStack(Item.coal), 0.1F);
041            this.addSmelting(Block.oreRedstone.blockID, new ItemStack(Item.redstone), 0.7F);
042            this.addSmelting(Block.oreLapis.blockID, new ItemStack(Item.dyePowder, 1, 4), 0.2F);
043        }
044    
045        /**
046         * Adds a smelting recipe.
047         */
048        public void addSmelting(int par1, ItemStack par2ItemStack, float par3)
049        {
050            this.smeltingList.put(Integer.valueOf(par1), par2ItemStack);
051            this.experienceList.put(Integer.valueOf(par2ItemStack.itemID), Float.valueOf(par3));
052        }
053    
054        /**
055         * Returns the smelting result of an item.
056         * Deprecated in favor of a metadata sensitive version
057         */
058        @Deprecated
059        public ItemStack getSmeltingResult(int par1)
060        {
061            return (ItemStack)this.smeltingList.get(Integer.valueOf(par1));
062        }
063    
064        public Map getSmeltingList()
065        {
066            return this.smeltingList;
067        }
068    
069        public float getExperience(int par1)
070        {
071            return this.experienceList.containsKey(Integer.valueOf(par1)) ? ((Float)this.experienceList.get(Integer.valueOf(par1))).floatValue() : 0.0F;
072        }
073    
074        /**
075         * Add a metadata-sensitive furnace recipe
076         * @param itemID The Item ID
077         * @param metadata The Item Metadata
078         * @param itemstack The ItemStack for the result
079         */
080        public void addSmelting(int itemID, int metadata, ItemStack itemstack)
081        {
082            metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack);
083        }
084        
085        /**
086         * Used to get the resulting ItemStack form a source ItemStack
087         * @param item The Source ItemStack
088         * @return The result ItemStack
089         */
090        public ItemStack getSmeltingResult(ItemStack item) 
091        {
092            if (item == null)
093            {
094                return null;
095            }
096            ItemStack ret = (ItemStack)metaSmeltingList.get(Arrays.asList(item.itemID, item.getItemDamage()));
097            if (ret != null) 
098            {
099                return ret;
100            }
101            return (ItemStack)smeltingList.get(Integer.valueOf(item.itemID));
102        }
103    }