--- 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 recipes = Maps.newHashMap(); + public it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap 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; }