From 1ecc59d4d915938f6ed8e59e87a43ede50715410 Mon Sep 17 00:00:00 2001 From: t00thpick1 Date: Fri, 20 Dec 2013 18:44:13 -0500 Subject: [Bleeding] Handle custom furnace recipes separately. Fixes BUKKIT-1657, BUKKIT-3846 Due to vanilla blanket comparing data values, and the unspecified order of hashmap iterators, we need to run through custom recipes first, and therefore separately, to ensure that they are actually used. By not adding the custom results to the experience table, we do not override the experience gains from vanilla smelting recipes. --- .../java/net/minecraft/server/RecipesFurnace.java | 21 +++++++++++++++++++-- .../java/org/bukkit/craftbukkit/CraftServer.java | 2 ++ .../craftbukkit/inventory/CraftFurnaceRecipe.java | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/net/minecraft/server/RecipesFurnace.java b/src/main/java/net/minecraft/server/RecipesFurnace.java index 85d76095..44a621db 100644 --- a/src/main/java/net/minecraft/server/RecipesFurnace.java +++ b/src/main/java/net/minecraft/server/RecipesFurnace.java @@ -10,6 +10,7 @@ public class RecipesFurnace { private static final RecipesFurnace a = new RecipesFurnace(); public Map recipes = new HashMap(); // CraftBukkit - private -> public private Map c = new HashMap(); + public Map customRecipes = new HashMap(); // CraftBukkit public static RecipesFurnace getInstance() { return a; @@ -62,14 +63,30 @@ public class RecipesFurnace { this.c.put(itemstack1, Float.valueOf(f)); } + // CraftBukkit start + public void registerRecipe(ItemStack itemstack, ItemStack itemstack1) { + this.customRecipes.put(itemstack, itemstack1); + } + // CraftBukkit end + public ItemStack getResult(ItemStack itemstack) { - Iterator iterator = this.recipes.entrySet().iterator(); + // CraftBukkit start + boolean vanilla = false; + Iterator iterator = this.customRecipes.entrySet().iterator(); + // CraftBukkit end Entry entry; do { if (!iterator.hasNext()) { - return null; + // CraftBukkit start + if (!vanilla) { + iterator = this.recipes.entrySet().iterator(); + vanilla = true; + } else { + return null; + } + // CraftBukkit end } entry = (Entry) iterator.next(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 362b507b..26537103 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -961,11 +961,13 @@ public final class CraftServer implements Server { public void clearRecipes() { CraftingManager.getInstance().recipes.clear(); RecipesFurnace.getInstance().recipes.clear(); + RecipesFurnace.getInstance().customRecipes.clear(); } public void resetRecipes() { CraftingManager.getInstance().recipes = new CraftingManager().recipes; RecipesFurnace.getInstance().recipes = new RecipesFurnace().recipes; + RecipesFurnace.getInstance().customRecipes.clear(); } public Map getCommandAliases() { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java index 49b2cbaf..69f17db8 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java @@ -22,6 +22,6 @@ public class CraftFurnaceRecipe extends FurnaceRecipe implements CraftRecipe { public void addToCraftingManager() { ItemStack result = this.getResult(); ItemStack input = this.getInput(); - RecipesFurnace.getInstance().a(CraftMagicNumbers.getItem(input.getTypeId()), CraftItemStack.asNMSCopy(result), 0.1f); + RecipesFurnace.getInstance().registerRecipe(CraftItemStack.asNMSCopy(input), CraftItemStack.asNMSCopy(result)); } } -- cgit v1.2.3