diff --git a/patches/common/net/minecraft/src/FurnaceRecipes.java.patch b/patches/common/net/minecraft/src/FurnaceRecipes.java.patch index 3a50fc21e..3eeba12b3 100644 --- a/patches/common/net/minecraft/src/FurnaceRecipes.java.patch +++ b/patches/common/net/minecraft/src/FurnaceRecipes.java.patch @@ -1,21 +1,24 @@ --- ../src_base/common/net/minecraft/src/FurnaceRecipes.java +++ ../src_work/common/net/minecraft/src/FurnaceRecipes.java -@@ -1,5 +1,6 @@ +@@ -1,6 +1,8 @@ package net.minecraft.src; +import java.util.Arrays; import java.util.HashMap; ++import java.util.List; import java.util.Map; -@@ -10,6 +11,7 @@ + public class FurnaceRecipes +@@ -10,6 +12,8 @@ /** The list of smelting results. */ private Map smeltingList = new HashMap(); private Map experienceList = new HashMap(); -+ private Map metaSmeltingList = new HashMap(); ++ private HashMap, ItemStack> metaSmeltingList = new HashMap, ItemStack>(); ++ private HashMap, Float> metaExperience = new HashMap, Float>(); /** * Used to call methods addSmelting and getSmeltingResult. -@@ -51,7 +53,9 @@ +@@ -51,7 +55,9 @@ /** * Returns the smelting result of an item. @@ -25,7 +28,12 @@ public ItemStack getSmeltingResult(int par1) { return (ItemStack)this.smeltingList.get(Integer.valueOf(par1)); -@@ -66,4 +70,34 @@ +@@ -62,8 +68,70 @@ + return this.smeltingList; + } + ++ @Deprecated //In favor of ItemStack sensitive version + public float getExperience(int par1) { return this.experienceList.containsKey(Integer.valueOf(par1)) ? ((Float)this.experienceList.get(Integer.valueOf(par1))).floatValue() : 0.0F; } @@ -36,11 +44,21 @@ + * @param metadata The Item Metadata + * @param itemstack The ItemStack for the result + */ ++ @Deprecated //In favor of the exp version, will remove next major MC version. + public void addSmelting(int itemID, int metadata, ItemStack itemstack) + { -+ metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack); ++ addSmelting(itemID, metadata, itemstack, 0.0f); + } -+ ++ ++ /** ++ * A metadata sensitive version of adding a furnace recipe. ++ */ ++ public void addSmelting(int itemID, int metadata, ItemStack itemstack, float experience) ++ { ++ metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack); ++ metaExperience.put(Arrays.asList(itemID, metadata), experience); ++ } ++ + /** + * Used to get the resulting ItemStack form a source ItemStack + * @param item The Source ItemStack @@ -58,5 +76,26 @@ + return ret; + } + return (ItemStack)smeltingList.get(Integer.valueOf(item.itemID)); ++ } ++ ++ /** ++ * Grabs the amount of base experience for this item to give when pulled from the furnace slot. ++ */ ++ public float getExperience(ItemStack item) ++ { ++ if (item == null || item.getItem() == null) ++ { ++ return 0; ++ } ++ float ret = item.getItem().getSmeltingExperience(item); ++ if (ret < 0 && metaExperience.containsKey(Arrays.asList(item.itemID, item.getItemDamage()))) ++ { ++ ret = metaExperience.get(Arrays.asList(item.itemID, item.getItemDamage())); ++ } ++ if (ret < 0 && experienceList.containsKey(item.itemID)) ++ { ++ ret = ((Float)experienceList.get(item.itemID)).floatValue(); ++ } ++ return (ret < 0 ? 0 : ret); + } } diff --git a/patches/common/net/minecraft/src/Item.java.patch b/patches/common/net/minecraft/src/Item.java.patch index a15df424a..df7fb7f9d 100644 --- a/patches/common/net/minecraft/src/Item.java.patch +++ b/patches/common/net/minecraft/src/Item.java.patch @@ -37,7 +37,7 @@ Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); return par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3); } -@@ -674,4 +686,252 @@ +@@ -674,4 +686,265 @@ { StatList.initStats(); } @@ -288,5 +288,18 @@ + public CreativeTabs[] getCreativeTabs() + { + return new CreativeTabs[]{ getCreativeTab() }; ++ } ++ ++ /** ++ * Determines the base experience for a player when they remove this item from a furnace slot. ++ * This number must be between 0 and 1 for it to be valid. ++ * This number will be multiplied by the stack size to get the total experience. ++ * ++ * @param item The item stack the player is picking up. ++ * @return The amount to award for each item. ++ */ ++ public float getSmeltingExperience(ItemStack item) ++ { ++ return -1; //-1 will default to the old lookups. + } } diff --git a/patches/common/net/minecraft/src/SlotFurnace.java.patch b/patches/common/net/minecraft/src/SlotFurnace.java.patch new file mode 100644 index 000000000..831199617 --- /dev/null +++ b/patches/common/net/minecraft/src/SlotFurnace.java.patch @@ -0,0 +1,11 @@ +--- ../src_base/common/net/minecraft/src/SlotFurnace.java ++++ ../src_work/common/net/minecraft/src/SlotFurnace.java +@@ -62,7 +62,7 @@ + if (!this.thePlayer.worldObj.isRemote) + { + int var2 = this.field_75228_b; +- float var3 = FurnaceRecipes.smelting().getExperience(par1ItemStack.itemID); ++ float var3 = FurnaceRecipes.smelting().getExperience(par1ItemStack); + int var4; + + if (var3 == 0.0F)