diff --git a/Spigot-Server-Patches/0418-Fix-Custom-Shapeless-Custom-Crafting-Recipes.patch b/Spigot-Server-Patches/0418-Fix-Custom-Shapeless-Custom-Crafting-Recipes.patch index 6ce8ec26af..f0d91dbcf3 100644 --- a/Spigot-Server-Patches/0418-Fix-Custom-Shapeless-Custom-Crafting-Recipes.patch +++ b/Spigot-Server-Patches/0418-Fix-Custom-Shapeless-Custom-Crafting-Recipes.patch @@ -1,4 +1,4 @@ -From 270c7bb8936f603c5f8700598807bb20482ed4d8 Mon Sep 17 00:00:00 2001 +From 9c0b5a16f11a586c971b39cc33157c1360184145 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 18 Jan 2019 00:08:15 -0500 Subject: [PATCH] Fix Custom Shapeless Custom Crafting Recipes @@ -10,18 +10,18 @@ This made the Bukkit RecipeChoice API not work for Shapeless. This reimplements vanilla logic using the same test logic as Shaped diff --git a/src/main/java/net/minecraft/server/ShapelessRecipes.java b/src/main/java/net/minecraft/server/ShapelessRecipes.java -index 819b4ac2da..1dc9a1c93c 100644 +index 819b4ac2da..ea4083a45a 100644 --- a/src/main/java/net/minecraft/server/ShapelessRecipes.java +++ b/src/main/java/net/minecraft/server/ShapelessRecipes.java -@@ -59,21 +59,32 @@ public class ShapelessRecipes implements IRecipe { - if (!(iinventory instanceof InventoryCrafting)) { - return false; - } else { -- AutoRecipeStackManager autorecipestackmanager = new AutoRecipeStackManager(); -- int i = 0; -- -+ // Paper start - use RecipeItemStack.test +@@ -62,18 +62,47 @@ public class ShapelessRecipes implements IRecipe { + AutoRecipeStackManager autorecipestackmanager = new AutoRecipeStackManager(); + int i = 0; + ++ // Paper start + java.util.List providedItems = new java.util.ArrayList<>(); ++ co.aikar.util.Counter matchedProvided = new co.aikar.util.Counter<>(); ++ co.aikar.util.Counter matchedIngredients = new co.aikar.util.Counter<>(); ++ // Paper end for (int j = 0; j < iinventory.n(); ++j) { for (int k = 0; k < iinventory.U_(); ++k) { ItemStack itemstack = iinventory.getItem(k + j * iinventory.U_()); @@ -29,13 +29,25 @@ index 819b4ac2da..1dc9a1c93c 100644 if (!itemstack.isEmpty()) { - ++i; - autorecipestackmanager.b(new ItemStack(itemstack.getItem())); -+ providedItems.add(itemstack.cloneItemStack()); ++ // Paper start ++ itemstack = itemstack.cloneItemStack(); ++ providedItems.add(itemstack); ++ for (RecipeItemStack ingredient : ingredients) { ++ if (ingredient.test(itemstack)) { ++ matchedProvided.increment(itemstack); ++ matchedIngredients.increment(ingredient); ++ } ++ } ++ // Paper end } } } - - return i == this.ingredients.size() && autorecipestackmanager.a(this, (IntList) null); ++ // Paper start + java.util.List ingredients = new java.util.ArrayList<>(this.ingredients); ++ providedItems.sort(java.util.Comparator.comparingInt((ItemStack c) -> (int) matchedProvided.getCount(c)).reversed()); ++ ingredients.sort(java.util.Comparator.comparingInt((RecipeItemStack c) -> (int) matchedIngredients.getCount(c))); + + PROVIDED: + for (ItemStack provided : providedItems) {