mirror of
https://github.com/PaperMC/Paper.git
synced 2025-03-19 13:38:44 +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> {
|
public class RecipeIterator implements Iterator<Recipe> {
|
||||||
private final Iterator<IRecipe> recipes;
|
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;
|
private Iterator<?> removeFrom = null;
|
||||||
|
|
||||||
public RecipeIterator() {
|
public RecipeIterator() {
|
||||||
this.recipes = CraftingManager.getInstance().getRecipes().iterator();
|
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() {
|
public boolean hasNext() {
|
||||||
if (recipes.hasNext()) {
|
return recipes.hasNext() || smeltingCustom.hasNext() || smeltingVanilla.hasNext();
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return smelting.hasNext();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Recipe next() {
|
public Recipe next() {
|
||||||
|
@ -31,8 +29,15 @@ public class RecipeIterator implements Iterator<Recipe> {
|
||||||
removeFrom = recipes;
|
removeFrom = recipes;
|
||||||
return recipes.next().toBukkitRecipe();
|
return recipes.next().toBukkitRecipe();
|
||||||
} else {
|
} else {
|
||||||
removeFrom = smelting;
|
net.minecraft.server.ItemStack item;
|
||||||
net.minecraft.server.ItemStack item = smelting.next();
|
if (smeltingCustom.hasNext()) {
|
||||||
|
removeFrom = smeltingCustom;
|
||||||
|
item = smeltingCustom.next();
|
||||||
|
} else {
|
||||||
|
removeFrom = smeltingVanilla;
|
||||||
|
item = smeltingVanilla.next();
|
||||||
|
}
|
||||||
|
|
||||||
CraftItemStack stack = CraftItemStack.asCraftMirror(RecipesFurnace.getInstance().getResult(item));
|
CraftItemStack stack = CraftItemStack.asCraftMirror(RecipesFurnace.getInstance().getResult(item));
|
||||||
|
|
||||||
return new CraftFurnaceRecipe(stack, CraftItemStack.asCraftMirror(item));
|
return new CraftFurnaceRecipe(stack, CraftItemStack.asCraftMirror(item));
|
||||||
|
|
Loading…
Add table
Reference in a new issue