Paper/nms-patches/CraftingManager.patch

51 lines
1.8 KiB
Diff

--- a/net/minecraft/server/CraftingManager.java
+++ b/net/minecraft/server/CraftingManager.java
@@ -20,7 +20,7 @@
private static final Logger c = LogManager.getLogger();
public static final int a = "recipes/".length();
public static final int b = ".json".length();
- public Map<MinecraftKey, IRecipe> recipes = Maps.newHashMap();
+ public it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap<MinecraftKey, IRecipe> recipes = new it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap<>(); // CraftBukkit
private boolean e;
public CraftingManager() {}
@@ -84,7 +84,7 @@
if (this.recipes.containsKey(irecipe.getKey())) {
throw new IllegalStateException("Duplicate recipe ignored with ID " + irecipe.getKey());
} else {
- this.recipes.put(irecipe.getKey(), irecipe);
+ this.recipes.putAndMoveToFirst(irecipe.getKey(), irecipe); // CraftBukkit - SPIGOT-4638: last recipe gets priority
}
}
@@ -95,12 +95,14 @@
do {
if (!iterator.hasNext()) {
+ iinventory.setCurrentRecipe(null); // CraftBukkit - Clear recipe when no recipe is found
return ItemStack.a;
}
irecipe = (IRecipe) iterator.next();
} while (!irecipe.a(iinventory, world));
+ iinventory.setCurrentRecipe(irecipe); // CraftBukkit
return irecipe.craftItem(iinventory);
}
@@ -112,12 +114,14 @@
do {
if (!iterator.hasNext()) {
+ iinventory.setCurrentRecipe(null); // CraftBukkit - Clear recipe when no recipe is found
return null;
}
irecipe = (IRecipe) iterator.next();
} while (!irecipe.a(iinventory, world));
+ iinventory.setCurrentRecipe(irecipe); // CraftBukkit
return irecipe;
}