geforkt von Mirrors/Paper
cfa5b37fa8
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: 03b725233 SPIGOT-6823: Fix loading custom world in combination with superflat 359d0533a #970: Correct typo in README.md 110492932 Fix per-world worldborder command
62 Zeilen
3.1 KiB
Diff
62 Zeilen
3.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake <jake.m.potrebic@gmail.com>
|
|
Date: Tue, 30 Nov 2021 12:01:56 -0800
|
|
Subject: [PATCH] Fix removing recipes
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index 88166a778b30e7d3ff6a63e1162232b68a11f17f..02e25451737841001363f4697fd05b1e2c6240cd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -1531,6 +1531,7 @@ public final class CraftServer implements Server {
|
|
ResourceLocation mcKey = CraftNamespacedKey.toMinecraft(recipeKey);
|
|
for (Object2ObjectLinkedOpenHashMap<ResourceLocation, net.minecraft.world.item.crafting.Recipe<?>> recipes : this.getServer().getRecipeManager().recipes.values()) {
|
|
if (recipes.remove(mcKey) != null) {
|
|
+ this.getServer().getRecipeManager().byName.remove(mcKey); // Paper
|
|
return true;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java b/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java
|
|
index 24f336c89b548c5ba2a95372db0d7c83b5c4ec47..91895c639c33a1cafd2a35bab7b5fd83e558468d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java
|
|
@@ -11,6 +11,7 @@ import org.bukkit.inventory.Recipe;
|
|
public class RecipeIterator implements Iterator<Recipe> {
|
|
private final Iterator<Map.Entry<RecipeType<?>, Object2ObjectLinkedOpenHashMap<ResourceLocation, net.minecraft.world.item.crafting.Recipe<?>>>> recipes;
|
|
private Iterator<net.minecraft.world.item.crafting.Recipe<?>> current;
|
|
+ private Recipe currentRecipe; // Paper - fix removing recipes
|
|
|
|
public RecipeIterator() {
|
|
this.recipes = MinecraftServer.getServer().getRecipeManager().recipes.entrySet().iterator();
|
|
@@ -34,10 +35,16 @@ public class RecipeIterator implements Iterator<Recipe> {
|
|
public Recipe next() {
|
|
if (this.current == null || !this.current.hasNext()) {
|
|
this.current = this.recipes.next().getValue().values().iterator();
|
|
- return this.next();
|
|
+ // Paper start - fix removing recipes
|
|
+ this.currentRecipe = this.next();
|
|
+ return this.currentRecipe;
|
|
+ // Paper end
|
|
}
|
|
|
|
- return this.current.next().toBukkitRecipe();
|
|
+ // Paper start - fix removing recipes
|
|
+ this.currentRecipe = this.current.next().toBukkitRecipe();
|
|
+ return this.currentRecipe;
|
|
+ // Paper end
|
|
}
|
|
|
|
@Override
|
|
@@ -46,6 +53,11 @@ public class RecipeIterator implements Iterator<Recipe> {
|
|
throw new IllegalStateException("next() not yet called");
|
|
}
|
|
|
|
+ // Paper start - fix removing recipes
|
|
+ if (this.currentRecipe instanceof org.bukkit.Keyed keyed) {
|
|
+ MinecraftServer.getServer().getRecipeManager().byName.remove(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(keyed.getKey()));
|
|
+ }
|
|
+ // Paper end
|
|
this.current.remove();
|
|
}
|
|
}
|