 +        }
 +    }
  }
+diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/TileEntityFurnace.java ../src_work/minecraft/net/minecraft/src/TileEntityFurnace.java
+--- ../src_base/minecraft/net/minecraft/src/TileEntityFurnace.java	2011-09-19 16:32:52.000000000 -0400
++++ ../src_work/minecraft/net/minecraft/src/TileEntityFurnace.java	2011-09-20 20:51:30.000000000 -0400
+@@ -196,7 +196,7 @@
+         {
+             return false;
+         }
+-        ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(furnaceItemStacks[0].getItem().shiftedIndex);
++        ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(furnaceItemStacks[0]);
+         if(itemstack == null)
+         {
+             return false;
+@@ -222,7 +222,7 @@
+         {
+             return;
+         }
+-        ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(furnaceItemStacks[0].getItem().shiftedIndex);
++        ItemStack itemstack = FurnaceRecipes.smelting().getSmeltingResult(furnaceItemStacks[0]);
+         if(furnaceItemStacks[2] == null)
+         {
+             furnaceItemStacks[2] = itemstack.copy();
 diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/TileEntity.java ../src_work/minecraft/net/minecraft/src/TileEntity.java
 --- ../src_base/minecraft/net/minecraft/src/TileEntity.java	2011-09-19 16:32:52.000000000 -0400
 +++ ../src_work/minecraft/net/minecraft/src/TileEntity.java	2011-09-19 16:32:54.000000000 -0400

                         }
                         if(f1 > 0.0F)
                         {
diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/ItemBucket.java ../src_work/minecraft_server/net/minecraft/src/ItemBucket.java
--- ../src_base/minecraft_server/net/minecraft/src/ItemBucket.java	2011-09-19 16:32:53.000000000 -0400
+++ ../src_work/minecraft_server/net/minecraft/src/ItemBucket.java	2011-09-19 16:32:54.000000000 -0400

                         }
                         if(f1 > 0.0F)
                         {
diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/FurnaceRecipes.java ../src_work/minecraft/net/minecraft/src/FurnaceRecipes.java
--- ../src_base/minecraft/net/minecraft/src/FurnaceRecipes.java	2011-09-19 16:32:52.000000000 -0400
+++ ../src_work/minecraft/net/minecraft/src/FurnaceRecipes.java	2011-09-20 20:52:59.000000000 -0400
@@ -6,6 +6,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Arrays;
 
 // Referenced classes of package net.minecraft.src:
 //            Block, ItemStack, Item
@@ -40,11 +41,32 @@
         smeltingList.put(Integer.valueOf(i), itemstack);
     }
 
+    /* FORGE: Add a metadata-sensitive furnace recipe.
+     */
+    public void addSmelting(int i, int meta, ItemStack itemstack)
+    {
+        metaSmeltingList.put(Arrays.asList(i,meta), itemstack);
+    }
+
+    /* FORGE: Not used anymore.
+     */
     public ItemStack getSmeltingResult(int i)
     {
         return (ItemStack)smeltingList.get(Integer.valueOf(i));
     }
 
+    /* FORGE: Added to allow metadata-sensitive smelting.
+     */
+    public ItemStack getSmeltingResult(ItemStack src) {
+	    ItemStack tr;
+
+	    if(src==null) return null;
+	    tr=(ItemStack)metaSmeltingList.get(
+		Arrays.asList(src.itemID,src.getItemDamage()));
+	    if(tr!=null) return tr;
+	    return (ItemStack)smeltingList.get(Integer.valueOf(src.itemID));
+    }
+
     public Map getSmeltingList()
     {
         return smeltingList;
@@ -52,5 +74,6 @@
 
     private static final FurnaceRecipes smeltingBase = new FurnaceRecipes();
     private Map smeltingList;
+    private Map metaSmeltingList;
 
 }
diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/ItemBucket.java ../src_work/minecraft/net/minecraft/src/ItemBucket.java
--- ../src_base/minecraft/net/minecraft/src/ItemBucket.java	2011-09-19 16:32:52.000000000 -0400
+++ ../src_work/minecraft/net/minecraft/src/ItemBucket.java	2011-09-19 16:32:54.000000000 -0400
