aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0160-Add-ItemStack-Recipe-API-helper-methods.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0160-Add-ItemStack-Recipe-API-helper-methods.patch')
-rw-r--r--patches/api/0160-Add-ItemStack-Recipe-API-helper-methods.patch104
1 files changed, 104 insertions, 0 deletions
diff --git a/patches/api/0160-Add-ItemStack-Recipe-API-helper-methods.patch b/patches/api/0160-Add-ItemStack-Recipe-API-helper-methods.patch
new file mode 100644
index 0000000000..817b9a2a62
--- /dev/null
+++ b/patches/api/0160-Add-ItemStack-Recipe-API-helper-methods.patch
@@ -0,0 +1,104 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Tue, 28 Jan 2014 19:13:57 -0500
+Subject: [PATCH] Add ItemStack Recipe API helper methods
+
+Allows using ExactChoice Recipes with easier methods
+
+Redirects some of upstream's APIs to these new methods to avoid
+usage of magic values and the deprecated RecipeChoice#getItemStack
+
+diff --git a/src/main/java/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java
+index a98fc2ffdae1a2f8f3a312bed95268e105f7f791..91bfeffcdbe47208c7d0ddbe013cd0f11fddfa32 100644
+--- a/src/main/java/org/bukkit/inventory/RecipeChoice.java
++++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java
+@@ -157,8 +157,6 @@ public interface RecipeChoice extends Predicate<ItemStack>, Cloneable {
+ /**
+ * Represents a choice that will be valid only if one of the stacks is
+ * exactly matched (aside from stack size).
+- * <br>
+- * <b>Only valid for shaped recipes</b>
+ */
+ public static class ExactChoice implements RecipeChoice {
+
+diff --git a/src/main/java/org/bukkit/inventory/ShapedRecipe.java b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
+index 71e494177473c62449aafda1699b26a0c4c81a68..97d5d9c6347bc401e3f4ab7c0ba1391ad5b0449a 100644
+--- a/src/main/java/org/bukkit/inventory/ShapedRecipe.java
++++ b/src/main/java/org/bukkit/inventory/ShapedRecipe.java
+@@ -168,6 +168,13 @@ public class ShapedRecipe extends CraftingRecipe {
+ return this;
+ }
+
++ // Paper start
++ @NotNull
++ public ShapedRecipe setIngredient(char key, @NotNull ItemStack item) {
++ return setIngredient(key, new RecipeChoice.ExactChoice(item));
++ }
++ // Paper end
++
+ /**
+ * Get a copy of the ingredients map.
+ *
+diff --git a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
+index d6e38c7ccfe3b6e85eafb611da20b1a29fb74d97..b8ac602cd2718d615ec243ce648951a1a46c26ec 100644
+--- a/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
++++ b/src/main/java/org/bukkit/inventory/ShapelessRecipe.java
+@@ -131,6 +131,40 @@ public class ShapelessRecipe extends CraftingRecipe {
+ return this;
+ }
+
++ // Paper start
++ @NotNull
++ public ShapelessRecipe addIngredient(@NotNull ItemStack item) {
++ return addIngredient(item.getAmount(), item);
++ }
++
++ @NotNull
++ public ShapelessRecipe addIngredient(int count, @NotNull ItemStack item) {
++ Preconditions.checkArgument(ingredients.size() + count <= 9, "Shapeless recipes cannot have more than 9 ingredients");
++ while (count-- > 0) {
++ ingredients.add(new RecipeChoice.ExactChoice(item));
++ }
++ return this;
++ }
++
++ @NotNull
++ public ShapelessRecipe removeIngredient(@NotNull ItemStack item) {
++ return removeIngredient(1, item);
++ }
++
++ @NotNull
++ public ShapelessRecipe removeIngredient(int count, @NotNull ItemStack item) {
++ Iterator<RecipeChoice> iterator = ingredients.iterator();
++ while (count > 0 && iterator.hasNext()) {
++ RecipeChoice choice = iterator.next();
++ if (choice.test(item)) {
++ iterator.remove();
++ count--;
++ }
++ }
++ return this;
++ }
++ // Paper end
++
+ /**
+ * Removes an ingredient from the list.
+ *
+@@ -154,7 +188,7 @@ public class ShapelessRecipe extends CraftingRecipe {
+ */
+ @NotNull
+ public ShapelessRecipe removeIngredient(@NotNull Material ingredient) {
+- return removeIngredient(ingredient, 0);
++ return removeIngredient(new ItemStack(ingredient)); // Paper - avoid using deprecated methods (magic values; RecipeChoice#getItemStack)
+ }
+
+ /**
+@@ -181,7 +215,7 @@ public class ShapelessRecipe extends CraftingRecipe {
+ */
+ @NotNull
+ public ShapelessRecipe removeIngredient(int count, @NotNull Material ingredient) {
+- return removeIngredient(count, ingredient, 0);
++ return removeIngredient(count, new ItemStack(ingredient)); // Paper - avoid using deprecated methods (magic values; RecipeChoice#getItemStack)
+ }
+
+ /**