diff --git a/Spigot-Server-Patches/Fix-Recipe-Books.patch b/Spigot-Server-Patches/Fix-Recipe-Books.patch
index 43386b1443..bd6d809ea9 100644
--- a/Spigot-Server-Patches/Fix-Recipe-Books.patch
+++ b/Spigot-Server-Patches/Fix-Recipe-Books.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Fix Recipe Books
 
 
 diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
-index 682211cdd..0f7e82d27 100644
+index 682211cdd..5b9021939 100644
 --- a/src/main/java/net/minecraft/server/PlayerConnection.java
 +++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 @@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
@@ -52,19 +52,29 @@ index 682211cdd..0f7e82d27 100644
                      packetplayinautorecipe_a = (PacketPlayInAutoRecipe.a) iterator.next();
                      itemstack = this.player.inventory.getItem(packetplayinautorecipe_a.c);
 -                    if (this.a(packetplayinautorecipe_a.a, itemstack)) {
-+                    if (this.a(packetplayinautorecipe_a.a, itemstack) && itemstack.getCount() >= packetplayinautorecipe_a.a.getCount()) { // Paper
++                    // Paper start
++                    ItemStack ref = packetplayinautorecipe_a.a;
++                    ItemStack to = this.player.activeContainer.getSlot(packetplayinautorecipe_a.b).getItem();
++                    if (this.a(ref, itemstack) && (ref.getCount() + to.getCount() <= ref.getMaxStackSize())) {
++                        // Paper end
                          i = packetplayinautorecipe_a.a.getCount();
                          if (itemstack.getCount() == i) {
                              this.player.inventory.splitWithoutUpdate(packetplayinautorecipe_a.c);
 @@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
+                             itemstack.subtract(i);
+                         }
  
-                         this.player.activeContainer.b(packetplayinautorecipe_a.b, packetplayinautorecipe_a.a);
-                     }
-+                    // Paper start
-+                    else {
+-                        this.player.activeContainer.b(packetplayinautorecipe_a.b, packetplayinautorecipe_a.a);
++                        // Paper start
++                        if (to.isEmpty()) {
++                            this.player.activeContainer.b(packetplayinautorecipe_a.b, packetplayinautorecipe_a.a);
++                        } else {
++                            to.add(i);
++                        }
++                    } else {
 +                        this.player.getBukkitEntity().updateInventory();
 +                        return;
-+                    }
+                     }
 +                    // Paper end
                  }
              }