001 package net.minecraft.src;
002
003 import java.util.Arrays;
004 import java.util.HashMap;
005 import java.util.List;
006 import java.util.Map;
007
008 public class FurnaceRecipes
009 {
010 private static final FurnaceRecipes smeltingBase = new FurnaceRecipes();
011
012 /** The list of smelting results. */
013 private Map smeltingList = new HashMap();
014 private Map experienceList = new HashMap();
015 private HashMap<List<Integer>, ItemStack> metaSmeltingList = new HashMap<List<Integer>, ItemStack>();
016 private HashMap<List<Integer>, Float> metaExperience = new HashMap<List<Integer>, Float>();
017
018 /**
019 * Used to call methods addSmelting and getSmeltingResult.
020 */
021 public static final FurnaceRecipes smelting()
022 {
023 return smeltingBase;
024 }
025
026 private FurnaceRecipes()
027 {
028 this.addSmelting(Block.oreIron.blockID, new ItemStack(Item.ingotIron), 0.7F);
029 this.addSmelting(Block.oreGold.blockID, new ItemStack(Item.ingotGold), 1.0F);
030 this.addSmelting(Block.oreDiamond.blockID, new ItemStack(Item.diamond), 1.0F);
031 this.addSmelting(Block.sand.blockID, new ItemStack(Block.glass), 0.1F);
032 this.addSmelting(Item.porkRaw.shiftedIndex, new ItemStack(Item.porkCooked), 0.35F);
033 this.addSmelting(Item.beefRaw.shiftedIndex, new ItemStack(Item.beefCooked), 0.35F);
034 this.addSmelting(Item.chickenRaw.shiftedIndex, new ItemStack(Item.chickenCooked), 0.35F);
035 this.addSmelting(Item.fishRaw.shiftedIndex, new ItemStack(Item.fishCooked), 0.35F);
036 this.addSmelting(Block.cobblestone.blockID, new ItemStack(Block.stone), 0.1F);
037 this.addSmelting(Item.clay.shiftedIndex, new ItemStack(Item.brick), 0.3F);
038 this.addSmelting(Block.cactus.blockID, new ItemStack(Item.dyePowder, 1, 2), 0.2F);
039 this.addSmelting(Block.wood.blockID, new ItemStack(Item.coal, 1, 1), 0.15F);
040 this.addSmelting(Block.oreEmerald.blockID, new ItemStack(Item.emerald), 1.0F);
041 this.addSmelting(Item.potatoe.shiftedIndex, new ItemStack(Item.bakedPotato), 0.35F);
042 this.addSmelting(Block.oreCoal.blockID, new ItemStack(Item.coal), 0.1F);
043 this.addSmelting(Block.oreRedstone.blockID, new ItemStack(Item.redstone), 0.7F);
044 this.addSmelting(Block.oreLapis.blockID, new ItemStack(Item.dyePowder, 1, 4), 0.2F);
045 }
046
047 /**
048 * Adds a smelting recipe.
049 */
050 public void addSmelting(int par1, ItemStack par2ItemStack, float par3)
051 {
052 this.smeltingList.put(Integer.valueOf(par1), par2ItemStack);
053 this.experienceList.put(Integer.valueOf(par2ItemStack.itemID), Float.valueOf(par3));
054 }
055
056 /**
057 * Returns the smelting result of an item.
058 * Deprecated in favor of a metadata sensitive version
059 */
060 @Deprecated
061 public ItemStack getSmeltingResult(int par1)
062 {
063 return (ItemStack)this.smeltingList.get(Integer.valueOf(par1));
064 }
065
066 public Map getSmeltingList()
067 {
068 return this.smeltingList;
069 }
070
071 @Deprecated //In favor of ItemStack sensitive version
072 public float getExperience(int par1)
073 {
074 return this.experienceList.containsKey(Integer.valueOf(par1)) ? ((Float)this.experienceList.get(Integer.valueOf(par1))).floatValue() : 0.0F;
075 }
076
077 /**
078 * Add a metadata-sensitive furnace recipe
079 * @param itemID The Item ID
080 * @param metadata The Item Metadata
081 * @param itemstack The ItemStack for the result
082 */
083 @Deprecated //In favor of the exp version, will remove next major MC version.
084 public void addSmelting(int itemID, int metadata, ItemStack itemstack)
085 {
086 addSmelting(itemID, metadata, itemstack, 0.0f);
087 }
088
089 /**
090 * A metadata sensitive version of adding a furnace recipe.
091 */
092 public void addSmelting(int itemID, int metadata, ItemStack itemstack, float experience)
093 {
094 metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack);
095 metaExperience.put(Arrays.asList(itemID, metadata), experience);
096 }
097
098 /**
099 * Used to get the resulting ItemStack form a source ItemStack
100 * @param item The Source ItemStack
101 * @return The result ItemStack
102 */
103 public ItemStack getSmeltingResult(ItemStack item)
104 {
105 if (item == null)
106 {
107 return null;
108 }
109 ItemStack ret = (ItemStack)metaSmeltingList.get(Arrays.asList(item.itemID, item.getItemDamage()));
110 if (ret != null)
111 {
112 return ret;
113 }
114 return (ItemStack)smeltingList.get(Integer.valueOf(item.itemID));
115 }
116
117 /**
118 * Grabs the amount of base experience for this item to give when pulled from the furnace slot.
119 */
120 public float getExperience(ItemStack item)
121 {
122 if (item == null || item.getItem() == null)
123 {
124 return 0;
125 }
126 float ret = item.getItem().getSmeltingExperience(item);
127 if (ret < 0 && metaExperience.containsKey(Arrays.asList(item.itemID, item.getItemDamage())))
128 {
129 ret = metaExperience.get(Arrays.asList(item.itemID, item.getItemDamage()));
130 }
131 if (ret < 0 && experienceList.containsKey(item.itemID))
132 {
133 ret = ((Float)experienceList.get(item.itemID)).floatValue();
134 }
135 return (ret < 0 ? 0 : ret);
136 }
137 }