--- a/net/minecraft/world/item/crafting/RecipeItemStack.java
+++ b/net/minecraft/world/item/crafting/RecipeItemStack.java
@@ -35,6 +35,7 @@
     private final RecipeItemStack.Provider[] values;
     public ItemStack[] itemStacks;
     private IntList stackingIds;
+    public boolean exact; // CraftBukkit
 
     public RecipeItemStack(Stream<? extends RecipeItemStack.Provider> stream) {
         this.values = (RecipeItemStack.Provider[]) stream.toArray((i) -> {
@@ -72,6 +73,15 @@
                 for (int j = 0; j < i; ++j) {
                     ItemStack itemstack1 = aitemstack[j];
 
+                    // CraftBukkit start
+                    if (exact) {
+                        if (itemstack1.getItem() == itemstack.getItem() && ItemStack.equals(itemstack, itemstack1)) {
+                            return true;
+                        }
+
+                        continue;
+                    }
+                    // CraftBukkit end
                     if (itemstack1.a(itemstack.getItem())) {
                         return true;
                     }
@@ -103,7 +113,7 @@
 
     public void a(PacketDataSerializer packetdataserializer) {
         this.buildChoices();
-        packetdataserializer.a((Collection) Arrays.asList(this.itemStacks), PacketDataSerializer::a);
+        packetdataserializer.a(Arrays.asList(this.itemStacks), PacketDataSerializer::a); // CraftBukkit - decompile error
     }
 
     public JsonElement c() {
