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