From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Fri, 2 Oct 2020 17:43:24 -0500
Subject: [PATCH] Add predicate to recipe's ExactChoice ingredient


diff --git a/src/main/java/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java
index 90208bc96085f05a3b657b9467b1670d00b03104..c59d5e4ef9641fd73463b177239226866272745b 100644
--- a/src/main/java/org/bukkit/inventory/RecipeChoice.java
+++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java
@@ -10,6 +10,7 @@ import java.util.function.Predicate;
 import org.bukkit.Material;
 import org.bukkit.Tag;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable; // Purpur
 
 /**
  * Represents a potential item match within a recipe. All choices within a
@@ -152,6 +153,7 @@ public interface RecipeChoice extends Predicate<ItemStack>, Cloneable {
     public static class ExactChoice implements RecipeChoice {
 
         private List<ItemStack> choices;
+        private Predicate<ItemStack> predicate; // Purpur
 
         public ExactChoice(@NotNull ItemStack stack) {
             this(Arrays.asList(stack));
@@ -196,6 +198,7 @@ public interface RecipeChoice extends Predicate<ItemStack>, Cloneable {
 
         @Override
         public boolean test(@NotNull ItemStack t) {
+            if (predicate != null) return predicate.test(t); // Purpur
             for (ItemStack match : choices) {
                 if (t.isSimilar(match)) {
                     return true;
@@ -205,6 +208,17 @@ public interface RecipeChoice extends Predicate<ItemStack>, Cloneable {
             return false;
         }
 
+        // Purpur start
+        @Nullable
+        public Predicate<ItemStack> getPredicate() {
+            return predicate;
+        }
+
+        public void setPredicate(@Nullable Predicate<ItemStack> predicate) {
+            this.predicate = predicate;
+        }
+        // Purpur end
+
         @Override
         public int hashCode() {
             int hash = 7;
