papermc/Spigot-Server-Patches/0280-Implement-EntityKnockbackByEntityEvent.patch

47 lines
1.9 KiB
Diff
Raw Normal View History

From 5cf01d5f61e156c14d59c12c89759e46edee5e3f Mon Sep 17 00:00:00 2001
From: Brokkonaut <hannos17@gmx.de>
Date: Mon, 18 Jun 2018 15:46:23 +0200
Subject: [PATCH] Implement EntityKnockbackByEntityEvent
This event is called when an entity receives knockback by another entity.
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index f4a7db369f..faa90e9ee5 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -1248,6 +1248,12 @@ public abstract class EntityLiving extends Entity {
this.impulse = true;
float f1 = MathHelper.sqrt(d0 * d0 + d1 * d1);
+ // Paper start - preserve old velocity
+ double oldMotX = this.motX;
+ double oldMotY = this.motY;
+ double oldMotZ = this.motZ;
+ // Paper end
+
this.motX /= 2.0D;
this.motZ /= 2.0D;
this.motX -= d0 / (double) f1 * (double) f;
@@ -1260,6 +1266,18 @@ public abstract class EntityLiving extends Entity {
}
}
+ // Paper start - call EntityKnockbackByEntityEvent
+ org.bukkit.util.Vector delta = new org.bukkit.util.Vector(this.motX - oldMotX, this.motY - oldMotY, this.motZ - oldMotZ);
+ // Restore old velocity to be able to access it in the event
+ this.motX = oldMotX;
+ this.motY = oldMotY;
+ this.motZ = oldMotZ;
+ if (entity == null || new com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent((LivingEntity) getBukkitEntity(), entity.getBukkitEntity(), f, delta).callEvent()) {
+ this.motX += delta.getX();
+ this.motY += delta.getY();
+ this.motZ += delta.getZ();
+ }
+ // Paper end
}
}
--
2.18.0