summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authort00thpick1 <t00thpick1dirko@gmail.com>2014-01-05 00:41:06 -0500
committerfeildmaster <admin@feildmaster.com>2014-01-18 15:52:22 -0600
commitfef9f9692f5f5e494910e81af7ffd677c3e3e0f9 (patch)
treeceb2c4139424bff51fdd1048aaa9e00b5911649f
parentb8143c63c20b6d578a77edc84a5049323e3bf567 (diff)
downloadcraftbukkit-fef9f9692f5f5e494910e81af7ffd677c3e3e0f9.tar
craftbukkit-fef9f9692f5f5e494910e81af7ffd677c3e3e0f9.tar.gz
craftbukkit-fef9f9692f5f5e494910e81af7ffd677c3e3e0f9.tar.lz
craftbukkit-fef9f9692f5f5e494910e81af7ffd677c3e3e0f9.tar.xz
craftbukkit-fef9f9692f5f5e494910e81af7ffd677c3e3e0f9.zip
[Bleeding] Check that vanilla recipes actually exist. Fixes BUKKIT-5277
When falling back to vanilla recipes in the iteration of recipes, a check is necessary to ensure that vanilla recipes are present. RecipeIterator has been modified to account for the multi-map setup.
-rw-r--r--src/main/java/net/minecraft/server/RecipesFurnace.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java23
2 files changed, 15 insertions, 10 deletions
diff --git a/src/main/java/net/minecraft/server/RecipesFurnace.java b/src/main/java/net/minecraft/server/RecipesFurnace.java
index 44a621db..bf6ddb4d 100644
--- a/src/main/java/net/minecraft/server/RecipesFurnace.java
+++ b/src/main/java/net/minecraft/server/RecipesFurnace.java
@@ -80,7 +80,7 @@ public class RecipesFurnace {
do {
if (!iterator.hasNext()) {
// CraftBukkit start
- if (!vanilla) {
+ if (!vanilla && recipes.size() != 0) {
iterator = this.recipes.entrySet().iterator();
vanilla = true;
} else {
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java b/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java
index 568b2d08..53b53b79 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java
@@ -10,20 +10,18 @@ import net.minecraft.server.RecipesFurnace;
public class RecipeIterator implements Iterator<Recipe> {
private final Iterator<IRecipe> recipes;
- private final Iterator<net.minecraft.server.ItemStack> smelting;
+ private final Iterator<net.minecraft.server.ItemStack> smeltingCustom;
+ private final Iterator<net.minecraft.server.ItemStack> smeltingVanilla;
private Iterator<?> removeFrom = null;
public RecipeIterator() {
this.recipes = CraftingManager.getInstance().getRecipes().iterator();
- this.smelting = RecipesFurnace.getInstance().getRecipes().keySet().iterator();
+ this.smeltingCustom = RecipesFurnace.getInstance().customRecipes.keySet().iterator();
+ this.smeltingVanilla = RecipesFurnace.getInstance().recipes.keySet().iterator();
}
public boolean hasNext() {
- if (recipes.hasNext()) {
- return true;
- } else {
- return smelting.hasNext();
- }
+ return recipes.hasNext() || smeltingCustom.hasNext() || smeltingVanilla.hasNext();
}
public Recipe next() {
@@ -31,8 +29,15 @@ public class RecipeIterator implements Iterator<Recipe> {
removeFrom = recipes;
return recipes.next().toBukkitRecipe();
} else {
- removeFrom = smelting;
- net.minecraft.server.ItemStack item = smelting.next();
+ net.minecraft.server.ItemStack item;
+ if (smeltingCustom.hasNext()) {
+ removeFrom = smeltingCustom;
+ item = smeltingCustom.next();
+ } else {
+ removeFrom = smeltingVanilla;
+ item = smeltingVanilla.next();
+ }
+
CraftItemStack stack = CraftItemStack.asCraftMirror(RecipesFurnace.getInstance().getResult(item));
return new CraftFurnaceRecipe(stack, CraftItemStack.asCraftMirror(item));