Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 19:40:07 +01:00
243d2313b9
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 323d6ca3 #535: Add EntityCategory API to LivingEntity 7d3323d8 #526: Add Block#applyBoneMeal() CraftBukkit Changes:bf451617
SPIGOT-6109: Improve loot handlingbfea4559
SPIGOT-6111: NPE in CraftHumanEntity#openWorkbench & CraftHumanEntity#openEnchantingee7116b4
Add note to CONTRIBUTING.md to suggest keeping commit messages / titles the sameeae15943
#721: Add EntityCategory API to LivingEntity8c611560
#702: Add Block#applyBoneMeal()8408de02
#716: Fix barrel open API playing sound twice74b6982b
#711: Add Full RGB support to the console
94 Zeilen
6.1 KiB
Diff
94 Zeilen
6.1 KiB
Diff
From 0000000000000000000000000000000000000000 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/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
|
index 85d2f4bab52cef2822fb0431c9cf7b7becbd5ee7..0f7e162b342ac589dc357508a1dcd1ab02d1fe3e 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
|
@@ -1080,7 +1080,7 @@ public abstract class EntityHuman extends EntityLiving {
|
|
if (flag5) {
|
|
if (i > 0) {
|
|
if (entity instanceof EntityLiving) {
|
|
- ((EntityLiving) entity).a((float) i * 0.5F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)));
|
|
+ ((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.i((double) (-MathHelper.sin(this.yaw * 0.017453292F) * (float) i * 0.5F), 0.1D, (double) (MathHelper.cos(this.yaw * 0.017453292F) * (float) i * 0.5F));
|
|
}
|
|
@@ -1104,7 +1104,7 @@ 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.a(0.4F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)));
|
|
+ entityliving.doKnockback(0.4F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)), this); // Paper
|
|
}
|
|
// CraftBukkit end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
index 5e3ab1e430c81ebfa9214020ffb1b3c61344ec55..95f1a9d7d5f381a0e345a7973c402136cddabb36 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
@@ -1500,7 +1500,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
|
|
if (flag) {
|
|
if (f1 > 0.0F && entity instanceof EntityLiving) {
|
|
- ((EntityLiving) entity).a(f1 * 0.5F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)));
|
|
+ ((EntityLiving) entity).doKnockback(f1 * 0.5F, (double) MathHelper.sin(this.yaw * 0.017453292F), (double) (-MathHelper.cos(this.yaw * 0.017453292F)), this); // Paper
|
|
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 a425ca17bfe5b6b4d1048e09d3723b0208dc8430..fb1b1014c0538b84491c315e4f868b9854b4b640 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
@@ -1239,7 +1239,7 @@ public abstract class EntityLiving extends Entity {
|
|
}
|
|
|
|
this.ap = (float) (MathHelper.d(d1, d0) * 57.2957763671875D - (double) this.yaw);
|
|
- this.a(0.4F, d0, d1);
|
|
+ this.doKnockback(0.4F, d0, d1, entity1); // Paper
|
|
} else {
|
|
this.ap = (float) ((int) (Math.random() * 2.0D) * 180);
|
|
}
|
|
@@ -1287,7 +1287,7 @@ public abstract class EntityLiving extends Entity {
|
|
}
|
|
|
|
protected void e(EntityLiving entityliving) {
|
|
- entityliving.a(0.5F, entityliving.locX() - this.locX(), entityliving.locZ() - this.locZ());
|
|
+ entityliving.doKnockback(0.5F, entityliving.locX() - this.locX(), entityliving.locZ() - this.locZ(), this); // Paper
|
|
}
|
|
|
|
private boolean f(DamageSource damagesource) {
|
|
@@ -1523,6 +1523,11 @@ 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;
|
|
@@ -1530,6 +1535,16 @@ public abstract class EntityLiving extends Entity {
|
|
Vec3D vec3d1 = (new Vec3D(d0, 0.0D, d1)).d().a((double) f);
|
|
|
|
this.setMot(vec3d.x / 2.0D - vec3d1.x, this.onGround ? Math.min(0.4D, vec3d.y / 2.0D + (double) f) : vec3d.y, vec3d.z / 2.0D - vec3d1.z);
|
|
+
|
|
+ // Paper start - call EntityKnockbackByEntityEvent
|
|
+ Vec3D currentMot = this.getMot();
|
|
+ org.bukkit.util.Vector delta = new org.bukkit.util.Vector(currentMot.x - vec3d.x, currentMot.y - vec3d.y, currentMot.z - vec3d.z);
|
|
+ // Restore old velocity to be able to access it in the event
|
|
+ this.setMot(vec3d);
|
|
+ if (knockingBackEntity == null || new com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent((LivingEntity) getBukkitEntity(), knockingBackEntity.getBukkitEntity(), f, delta).callEvent()) {
|
|
+ this.setMot(vec3d.x + delta.getX(), vec3d.y + delta.getY(), vec3d.z + delta.getZ());
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
}
|
|
|