From d5bf06fc14a67c67a4b226f8e4725e29277c71ee Mon Sep 17 00:00:00 2001 From: Brokkonaut 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 ef1a1e5790..9f0bc5a8e2 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -1251,6 +1251,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; @@ -1263,6 +1269,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