From 4d1ecb442687657d35e45485a8f9ec4e6269cdab Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 27 Feb 2019 21:06:04 -0500 Subject: [PATCH] Fix Custom Shapeless Custom Crafting Recipes Mojang implemented Shapeless different than Shaped This made the Bukkit RecipeChoice API not work for Shapeless. This reimplements vanilla logic using the same test logic as Shaped --- ...om-Shapeless-Custom-Crafting-Recipes.patch | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Spigot-Server-Patches/Fix-Custom-Shapeless-Custom-Crafting-Recipes.patch diff --git a/Spigot-Server-Patches/Fix-Custom-Shapeless-Custom-Crafting-Recipes.patch b/Spigot-Server-Patches/Fix-Custom-Shapeless-Custom-Crafting-Recipes.patch new file mode 100644 index 0000000000..1e64b64fab --- /dev/null +++ b/Spigot-Server-Patches/Fix-Custom-Shapeless-Custom-Crafting-Recipes.patch @@ -0,0 +1,56 @@ +From 0000000000000000000000000000000000000000 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 + +Mojang implemented Shapeless different than Shaped + +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 +--- a/src/main/java/net/minecraft/server/ShapelessRecipes.java ++++ b/src/main/java/net/minecraft/server/ShapelessRecipes.java +@@ -0,0 +0,0 @@ public class ShapelessRecipes implements IRecipe { + if (!(iinventory instanceof InventoryCrafting)) { + return false; + } else { +- AutoRecipeStackManager autorecipestackmanager = new AutoRecipeStackManager(); +- int i = 0; +- ++ // Paper start - use RecipeItemStack.test ++ java.util.List providedItems = new java.util.ArrayList<>(); + for (int j = 0; j < iinventory.n(); ++j) { + for (int k = 0; k < iinventory.U_(); ++k) { + ItemStack itemstack = iinventory.getItem(k + j * iinventory.U_()); + + if (!itemstack.isEmpty()) { +- ++i; +- autorecipestackmanager.b(new ItemStack(itemstack.getItem())); ++ providedItems.add(itemstack.cloneItemStack()); + } + } + } +- +- return i == this.ingredients.size() && autorecipestackmanager.a(this, (IntList) null); ++ java.util.List ingredients = new java.util.ArrayList<>(this.ingredients); ++ ++ PROVIDED: ++ for (ItemStack provided : providedItems) { ++ for (Iterator itIngredient = ingredients.iterator(); itIngredient.hasNext(); ) { ++ RecipeItemStack ingredient = itIngredient.next(); ++ if (ingredient.test(provided)) { ++ itIngredient.remove(); ++ continue PROVIDED; ++ } ++ } ++ return false; ++ } ++ return ingredients.isEmpty(); ++ // Paper end + } + } + +-- \ No newline at end of file