[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.

By: t00thpick1 <t00thpick1dirko@gmail.com>
This commit is contained in:
CraftBukkit/Spigot 2014-01-05 00:41:06 -05:00
parent e276044e36
commit a4b581ad13

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