aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0151-Add-ItemStackRecipeChoice-Draft-API.patch
blob: 4cfddc6f593714de8ebb5eda1f140722a690472d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Thu, 13 Sep 2018 21:39:26 -0400
Subject: [PATCH] Add ItemStackRecipeChoice Draft API

This is based on Spigots Draft API. This is subject to change

Allows creating recipes that must match isSimilar to full item stack.

diff --git a/src/main/java/com/destroystokyo/paper/inventory/ItemStackRecipeChoice.java b/src/main/java/com/destroystokyo/paper/inventory/ItemStackRecipeChoice.java
new file mode 100644
index 0000000000000000000000000000000000000000..18c96aeef00dc11e5083001adfba4204f0de4e2b
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/inventory/ItemStackRecipeChoice.java
@@ -0,0 +1,52 @@
+package com.destroystokyo.paper.inventory;
+
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.RecipeChoice;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.jetbrains.annotations.ApiStatus;
+
+/**
+ * Allows crafting Items that require full matching itemstacks to complete the recipe for custom items
+ * @deprecated Draft API
+ */
+@Deprecated(forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.21")
+public class ItemStackRecipeChoice implements RecipeChoice {
+
+    protected final List<ItemStack> choices = new ArrayList<>();
+
+    public ItemStackRecipeChoice(ItemStack choices) {
+        this.choices.add(choices);
+    }
+
+    public ItemStackRecipeChoice(List<ItemStack> choices) {
+        this.choices.addAll(choices);
+    }
+
+    @Override
+    public ItemStack getItemStack() {
+        return choices.isEmpty() ? null : choices.get(0);
+    }
+
+    @Override
+    public RecipeChoice clone() {
+        try {
+            ItemStackRecipeChoice clone = (ItemStackRecipeChoice) super.clone();
+            clone.choices.addAll(this.choices);
+            return clone;
+        } catch (CloneNotSupportedException ex) {
+            throw new AssertionError(ex);
+        }
+    }
+
+    @Override
+    public boolean test(ItemStack itemStack) {
+        for (ItemStack stack : choices) {
+            if (stack.isSimilar(itemStack)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}