mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-08 11:24:11 +01:00
[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:
parent
e276044e36
commit
a4b581ad13
1 changed files with 14 additions and 9 deletions
|
@ -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));
|
||||
|
|
Loading…
Reference in a new issue