Skip to content

Commit

Permalink
Added metadata sensitve experience to furnace recipies and added Item…
Browse files Browse the repository at this point in the history
… callback to determine experience gain.
  • Loading branch information
LexManos committed Oct 28, 2012
1 parent 9aca085 commit 7055090
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 7 deletions.
51 changes: 45 additions & 6 deletions patches/common/net/minecraft/src/FurnaceRecipes.java.patch
Original file line number Diff line number Diff line change
@@ -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<List<Integer>, ItemStack> metaSmeltingList = new HashMap<List<Integer>, ItemStack>();
+ private HashMap<List<Integer>, Float> metaExperience = new HashMap<List<Integer>, Float>();

/**
* Used to call methods addSmelting and getSmeltingResult.
@@ -51,7 +53,9 @@
@@ -51,7 +55,9 @@

/**
* Returns the smelting result of an item.
Expand All @@ -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;
}
Expand All @@ -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)
+ {
+ 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
Expand All @@ -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);
+ }
}
15 changes: 14 additions & 1 deletion patches/common/net/minecraft/src/Item.java.patch
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down Expand Up @@ -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.
+ }
}
11 changes: 11 additions & 0 deletions patches/common/net/minecraft/src/SlotFurnace.java.patch
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 7055090

Please sign in to comment.