diff --git a/Spigot-Server-Patches/fixup-Implement-EntityKnockbackByEntityEvent.patch b/Spigot-Server-Patches/fixup-Implement-EntityKnockbackByEntityEvent.patch
new file mode 100644
index 0000000000..3420c57883
--- /dev/null
+++ b/Spigot-Server-Patches/fixup-Implement-EntityKnockbackByEntityEvent.patch
@@ -0,0 +1,93 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Spottedleaf <Spottedleaf@users.noreply.github.com>
+Date: Fri, 26 Jun 2020 14:28:49 -0700
+Subject: [PATCH] fixup! Implement EntityKnockbackByEntityEvent
+
+
+diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/server/EntityHuman.java
++++ b/src/main/java/net/minecraft/server/EntityHuman.java
+@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
+                     if (flag5) {
+                         if (i > 0) {
+                             if (entity instanceof EntityLiving) {
+-                                ((EntityLiving) entity).knockingBackEntity = this; // Paper
+-                                ((EntityLiving) entity).a((float) i * 0.5F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)));
+-                                ((EntityLiving) entity).knockingBackEntity = null; // Paper
++                                ((EntityLiving) entity).doKnockback((float) i * 0.5F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)), this); // Paper
+                             } else {
+                                 entity.h((double) (-MathHelper.sin(this.yaw * 0.017453292F) * (float) i * 0.5F), 0.1D, (double) (MathHelper.cos(this.yaw * 0.017453292F) * (float) i * 0.5F));
+                             }
+@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
+                                 if (entityliving != this && entityliving != entity && !this.r(entityliving) && (!(entityliving instanceof EntityArmorStand) || !((EntityArmorStand) entityliving).isMarker()) && this.h((Entity) entityliving) < 9.0D) {
+                                     // CraftBukkit start - Only apply knockback if the damage hits
+                                     if (entityliving.damageEntity(DamageSource.playerAttack(this).sweep(), f4)) {
+-                                        ((EntityLiving) entity).knockingBackEntity = this; // Paper
+-                                    entityliving.a(0.4F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)));
+-                                        ((EntityLiving) entity).knockingBackEntity = null; // Paper
++                                    entityliving.doKnockback(0.4F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)), this);
+                                     }
+                                     // CraftBukkit end
+                                 }
+diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/server/EntityInsentient.java
++++ b/src/main/java/net/minecraft/server/EntityInsentient.java
+@@ -0,0 +0,0 @@ public abstract class EntityInsentient extends EntityLiving {
+ 
+         if (flag) {
+             if (f1 > 0.0F && entity instanceof EntityLiving) {
+-                ((EntityLiving) entity).knockingBackEntity = this; // Paper
+-                ((EntityLiving) entity).a(f1 * 0.5F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)));
+-                ((EntityLiving) entity).knockingBackEntity = null; // Paper
++                ((EntityLiving) entity).doKnockback(f1 * 0.5F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)), this);
+                 this.setMot(this.getMot().d(0.6D, 1.0D, 0.6D));
+             }
+ 
+diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/server/EntityLiving.java
++++ b/src/main/java/net/minecraft/server/EntityLiving.java
+@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
+                     }
+ 
+                     this.aw = (float) (MathHelper.d(d1, d0) * 57.2957763671875D - (double) this.yaw);
+-                    this.knockingBackEntity = entity1 instanceof EntityLiving ? ((EntityLiving) entity1) : null; // Paper
+-                    this.a(0.4F, d0, d1);
+-                    this.knockingBackEntity = null; // Paper
++                    this.doKnockback(0.4F, d0, d1, entity1); // Paper
+                 } else {
+                     this.aw = (float) ((int) (Math.random() * 2.0D) * 180);
+                 }
+@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
+     }
+ 
+     protected void f(EntityLiving entityliving) {
+-        ((EntityLiving) entityliving).knockingBackEntity = this; // Paper
+-        entityliving.a(0.5F, entityliving.locX() - this.locX(), entityliving.locZ() - this.locZ());
+-        ((EntityLiving) entityliving).knockingBackEntity = null; // Paper
++        entityliving.doKnockback(0.5F, entityliving.locX() - this.locX(), entityliving.locZ() - this.locZ(), this);
+     }
+ 
+     private boolean f(DamageSource damagesource) {
+@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
+     }
+ 
+     public void a(float f, double d0, double d1) {
++        // Paper start - add knockbacking entity parameter
++        this.doKnockback(f, d0, d1, null);
++    }
++    public void doKnockback(float f, double d0, double d1, Entity knockingBackEntity) {
++        // Paper end - add knockbacking entity parameter
+         f = (float) ((double) f * (1.0D - this.b(GenericAttributes.KNOCKBACK_RESISTANCE)));
+         if (f > 0.0F) {
+             this.impulse = true;
+@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
+             // Paper end
+         }
+     }
+-    EntityLiving knockingBackEntity; // Paper
+ 
+     @Nullable
+     protected SoundEffect getSoundHurt(DamageSource damagesource) {