diff --git a/Spigot-Server-Patches/fix-PlayerItemHeldEvent-firing-twice.patch b/Spigot-Server-Patches/fix-PlayerItemHeldEvent-firing-twice.patch
new file mode 100644
index 0000000000..1cff7cb8ef
--- /dev/null
+++ b/Spigot-Server-Patches/fix-PlayerItemHeldEvent-firing-twice.patch
@@ -0,0 +1,30 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: chickeneer <emcchickeneer@gmail.com>
+Date: Thu, 22 Apr 2021 19:02:07 -0700
+Subject: [PATCH] fix PlayerItemHeldEvent firing twice
+
+
+diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayInHeldItemSlot.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayInHeldItemSlot.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayInHeldItemSlot.java
++++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayInHeldItemSlot.java
+@@ -0,0 +0,0 @@ public class PacketPlayInHeldItemSlot implements Packet<PacketListenerPlayIn> {
+         packetlistenerplayin.a(this);
+     }
+ 
++    public int getItemInHandIndex() { return b(); } // Paper - OBFHELPER
+     public int b() {
+         return this.itemInHandIndex;
+     }
+diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
++++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
+@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn {
+         PlayerConnectionUtils.ensureMainThread(packetplayinhelditemslot, this, this.player.getWorldServer());
+         if (this.player.isFrozen()) return; // CraftBukkit
+         if (packetplayinhelditemslot.b() >= 0 && packetplayinhelditemslot.b() < PlayerInventory.getHotbarSize()) {
++            if (packetplayinhelditemslot.getItemInHandIndex() == this.player.inventory.itemInHandIndex) { return; } // Paper - don't fire itemheldevent when there wasn't a slot change
+             PlayerItemHeldEvent event = new PlayerItemHeldEvent(this.getPlayer(), this.player.inventory.itemInHandIndex, packetplayinhelditemslot.b());
+             this.server.getPluginManager().callEvent(event);
+             if (event.isCancelled()) {