[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.
This commit is contained in:
t00thpick1 2014-01-05 00:41:06 -05:00 committed by feildmaster
parent b8143c63c2
commit fef9f9692f
2 changed files with 15 additions and 10 deletions

View file

@ -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 {

View file

@ -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));