Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions patches/api/0114-Add-EntityKnockbackByEntityEvent.patch
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ Subject: [PATCH] Add EntityKnockbackByEntityEvent

diff --git a/src/main/java/com/destroystokyo/paper/event/entity/EntityKnockbackByEntityEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/EntityKnockbackByEntityEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..9efecabab813f575bb447a356e5e7e952d110f30
index 0000000000000000000000000000000000000000..cff7f42e84798be2789c7ebb8f2b60b9dd40a711
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/event/entity/EntityKnockbackByEntityEvent.java
@@ -0,0 +1,82 @@
@@ -0,0 +1,106 @@
+package com.destroystokyo.paper.event.entity;
+
+import org.bukkit.entity.Entity;
Expand All @@ -19,6 +19,7 @@ index 0000000000000000000000000000000000000000..9efecabab813f575bb447a356e5e7e95
+import org.bukkit.event.entity.EntityEvent;
+import org.bukkit.util.Vector;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Fired when an Entity is knocked back by the hit of another Entity. The acceleration
Expand All @@ -29,13 +30,19 @@ index 0000000000000000000000000000000000000000..9efecabab813f575bb447a356e5e7e95
+ private static final HandlerList handlers = new HandlerList();
+
+ @NotNull private final Entity hitBy;
+ @Nullable private final Entity directHitBy;
+ private final float knockbackStrength;
+ @NotNull private final Vector acceleration;
+ private boolean cancelled = false;
+
+ @Deprecated
+ public EntityKnockbackByEntityEvent(@NotNull LivingEntity entity, @NotNull Entity hitBy, float knockbackStrength, @NotNull Vector acceleration) {
+ this(entity, hitBy, null, knockbackStrength, acceleration);
+ }
+ public EntityKnockbackByEntityEvent(@NotNull LivingEntity entity, @NotNull Entity hitBy, @Nullable Entity directHitBy, float knockbackStrength, @NotNull Vector acceleration) {
+ super(entity);
+ this.hitBy = hitBy;
+ this.directHitBy = directHitBy;
+ this.knockbackStrength = knockbackStrength;
+ this.acceleration = acceleration;
+ }
Expand Down Expand Up @@ -77,14 +84,31 @@ index 0000000000000000000000000000000000000000..9efecabab813f575bb447a356e5e7e95
+ }
+
+ /**
+ * @return the Entity which hit
+ * Gets the Entity which hit. Note that this method returns
+ * the source entity (if available) for a projectile like
+ * the thrower of a snowball rather than the snowball itself.
+ *
+ * @return the entity that hit
+ * @see #getDirectHitBy()
+ */
+ @NotNull
+ public Entity getHitBy() {
+ return hitBy;
+ }
+
+ /**
+ * Get the entity directly responsible for the knockback. Where
+ * {@link #getHitBy()} would return the player for a thrown snowball,
+ * this would return the actual snowball entity.
+ *
+ * @return the direct entity (or null if this event used its legacy constructor)
+ * @see #getHitBy()
+ */
+ public @Nullable Entity getDirectHitBy() {
+ return this.directHitBy;
+ }
+
+ /**
+ * @return the acceleration that will be applied
+ */
+ @NotNull
Expand Down
17 changes: 10 additions & 7 deletions patches/server/0213-Implement-EntityKnockbackByEntityEvent.patch
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ Subject: [PATCH] Implement EntityKnockbackByEntityEvent
This event is called when an entity receives knockback by another entity.

diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index c347c4e6f957118198adb1de7633d369bd012b82..9b6fcaaafa84853804f6183d02bd90b4f988d418 100644
index c347c4e6f957118198adb1de7633d369bd012b82..9ccf12ed26e3962da15f925665c92d5171d3077f 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1430,7 +1430,7 @@ public abstract class LivingEntity extends Entity {
}

this.hurtDir = (float) (Mth.atan2(d1, d0) * 57.2957763671875D - (double) this.getYRot());
- this.knockback(0.4000000059604645D, d0, d1);
+ this.knockback(0.4000000059604645D, d0, d1, entity1);
+ this.knockback(0.4000000059604645D, d0, d1, entity1, source.getDirectEntity()); // Paper
} else {
this.hurtDir = (float) ((int) (Math.random() * 2.0D) * 180);
}
Expand All @@ -23,23 +23,26 @@ index c347c4e6f957118198adb1de7633d369bd012b82..9b6fcaaafa84853804f6183d02bd90b4

protected void blockedByShield(LivingEntity target) {
- target.knockback(0.5D, target.getX() - this.getX(), target.getZ() - this.getZ());
+ target.knockback(0.5D, target.getX() - this.getX(), target.getZ() - this.getZ(), this);
+ target.knockback(0.5D, target.getX() - this.getX(), target.getZ() - this.getZ(), this); // Paper
}

private boolean checkTotemDeathProtection(DamageSource source) {
@@ -1731,6 +1731,11 @@ public abstract class LivingEntity extends Entity {
@@ -1731,6 +1731,14 @@ public abstract class LivingEntity extends Entity {
}

public void knockback(double strength, double x, double z) {
+ // Paper start - add knockbacking entity parameter
+ this.knockback(strength, x, z, null);
+ }
+ public void knockback(double strength, double x, double z, Entity knockingBackEntity) {
+ public void knockback(double strength, double x, double z, @Nullable Entity knockingBackEntity) {
+ this.knockback(strength, x, z, knockingBackEntity, knockingBackEntity);
+ }
+ public void knockback(double strength, double x, double z, @Nullable Entity knockingBackEntity, @Nullable Entity directKnockingBackEntity) {
+ // Paper end - add knockbacking entity parameter
strength *= 1.0D - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE);
if (strength > 0.0D) {
this.hasImpulse = true;
@@ -1738,6 +1743,15 @@ public abstract class LivingEntity extends Entity {
@@ -1738,6 +1746,15 @@ public abstract class LivingEntity extends Entity {
Vec3 vec3d1 = (new Vec3(x, 0.0D, z)).normalize().scale(strength);

this.setDeltaMovement(vec3d.x / 2.0D - vec3d1.x, this.onGround ? Math.min(0.4D, vec3d.y / 2.0D + strength) : vec3d.y, vec3d.z / 2.0D - vec3d1.z);
Expand All @@ -48,7 +51,7 @@ index c347c4e6f957118198adb1de7633d369bd012b82..9b6fcaaafa84853804f6183d02bd90b4
+ org.bukkit.util.Vector delta = new org.bukkit.util.Vector(currentMovement.x - vec3d.x, currentMovement.y - vec3d.y, currentMovement.z - vec3d.z);
+ // Restore old velocity to be able to access it in the event
+ this.setDeltaMovement(vec3d);
+ if (knockingBackEntity == null || new com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent((org.bukkit.entity.LivingEntity) getBukkitEntity(), knockingBackEntity.getBukkitEntity(), (float) strength, delta).callEvent()) {
+ if (knockingBackEntity == null || directKnockingBackEntity == null || new com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent((org.bukkit.entity.LivingEntity) getBukkitEntity(), knockingBackEntity.getBukkitEntity(), directKnockingBackEntity.getBukkitEntity(), (float) strength, delta).callEvent()) {
+ this.setDeltaMovement(vec3d.x + delta.getX(), vec3d.y + delta.getY(), vec3d.z + delta.getZ());
+ }
+ // Paper end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ index 0cf818fceddd76e7704fdc6625456787856b2815..ccdee183f02ab55723e16f41efce55dc
switch (enumDirection) {
case DOWN:
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 9b6fcaaafa84853804f6183d02bd90b4f988d418..c5d6e5c5c35fa3ab444f271c929ee88c30832dc9 100644
index 5c6c9c664aa3c4c59084d20fd70916fed4836005..ae0f793e33de3a5aa55968658a5f1c28d0028cbd 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3689,6 +3689,23 @@ public abstract class LivingEntity extends Entity {
@@ -3692,6 +3692,23 @@ public abstract class LivingEntity extends Entity {
}

// Paper start
Expand Down
4 changes: 2 additions & 2 deletions patches/server/0273-Add-LivingEntity-getTargetEntity.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Add LivingEntity#getTargetEntity


diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index a1850da0d11edfbaac5e799694ce12141aa5a92e..7886d276e4919cb57372bd0475aaf83992cde360 100644
index b2d5b72c9b7d2114b339164d0568968bd3cbe86d..61a3d51e19cdcb21f73e3d7c850fed2b480e999f 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -113,6 +113,7 @@ import net.minecraft.world.level.storage.loot.LootTable;
Expand All @@ -16,7 +16,7 @@ index a1850da0d11edfbaac5e799694ce12141aa5a92e..7886d276e4919cb57372bd0475aaf839
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.scores.PlayerTeam;
@@ -3744,6 +3745,38 @@ public abstract class LivingEntity extends Entity {
@@ -3747,6 +3748,38 @@ public abstract class LivingEntity extends Entity {
return level.clip(raytrace);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,10 @@ index d53d968d92e7491c3802d6f9215710610ef11ce5..8018c9dae36335c2fb654269684445b6
if (this.valid) {
Bukkit.getPluginManager().callEvent(event);
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 7886d276e4919cb57372bd0475aaf83992cde360..0031a3a4850e38039c37550d6f67e433b9143cfd 100644
index 61a3d51e19cdcb21f73e3d7c850fed2b480e999f..3036ae3b011f9043ee153c0d096c0c649ede22d1 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3343,9 +3343,15 @@ public abstract class LivingEntity extends Entity {
@@ -3346,9 +3346,15 @@ public abstract class LivingEntity extends Entity {

@Override
public void stopRiding() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent consuming the wrong itemstack


diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 0031a3a4850e38039c37550d6f67e433b9143cfd..fa07a6f7ec215652861a62a0cb942522e0f4f655 100644
index 3036ae3b011f9043ee153c0d096c0c649ede22d1..6fd479c3d1dca834c4a484ff637a6e20200cc248 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3565,9 +3565,14 @@ public abstract class LivingEntity extends Entity {
@@ -3568,9 +3568,14 @@ public abstract class LivingEntity extends Entity {
}

public void startUsingItem(InteractionHand hand) {
Expand All @@ -24,15 +24,15 @@ index 0031a3a4850e38039c37550d6f67e433b9143cfd..fa07a6f7ec215652861a62a0cb942522
this.useItem = itemstack;
this.useItemRemaining = itemstack.getUseDuration();
if (!this.level.isClientSide) {
@@ -3646,6 +3651,7 @@ public abstract class LivingEntity extends Entity {
@@ -3649,6 +3654,7 @@ public abstract class LivingEntity extends Entity {
this.releaseUsingItem();
} else {
if (!this.useItem.isEmpty() && this.isUsingItem()) {
+ this.startUsingItem(this.getUsedItemHand(), true); // Paper
this.triggerItemUseEffects(this.useItem, 16);
// CraftBukkit start - fire PlayerItemConsumeEvent
ItemStack itemstack;
@@ -3680,8 +3686,8 @@ public abstract class LivingEntity extends Entity {
@@ -3683,8 +3689,8 @@ public abstract class LivingEntity extends Entity {
}

this.stopUsingItem();
Expand Down
12 changes: 6 additions & 6 deletions patches/server/0353-Lag-compensate-eating.patch
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ When the server is lagging, players will wait longer when eating.
Change to also use a time check instead if it passes.

diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index fa07a6f7ec215652861a62a0cb942522e0f4f655..4bdc5e2926ec78de0948b8469c72015c8fecb520 100644
index 6fd479c3d1dca834c4a484ff637a6e20200cc248..cc8312d87dd1c8aa93063d0e736ea7ebc414b870 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3508,6 +3508,11 @@ public abstract class LivingEntity extends Entity {
@@ -3511,6 +3511,11 @@ public abstract class LivingEntity extends Entity {
return ((Byte) this.entityData.get(LivingEntity.DATA_LIVING_ENTITY_FLAGS) & 2) > 0 ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND;
}

Expand All @@ -22,7 +22,7 @@ index fa07a6f7ec215652861a62a0cb942522e0f4f655..4bdc5e2926ec78de0948b8469c72015c
private void updatingUsingItem() {
if (this.isUsingItem()) {
if (ItemStack.isSameIgnoreDurability(this.getItemInHand(this.getUsedItemHand()), this.useItem)) {
@@ -3525,8 +3530,12 @@ public abstract class LivingEntity extends Entity {
@@ -3528,8 +3533,12 @@ public abstract class LivingEntity extends Entity {
if (this.shouldTriggerItemUseEffects()) {
this.triggerItemUseEffects(stack, 5);
}
Expand All @@ -37,7 +37,7 @@ index fa07a6f7ec215652861a62a0cb942522e0f4f655..4bdc5e2926ec78de0948b8469c72015c
this.completeUsingItem();
}

@@ -3574,7 +3583,10 @@ public abstract class LivingEntity extends Entity {
@@ -3577,7 +3586,10 @@ public abstract class LivingEntity extends Entity {

if (!itemstack.isEmpty() && !this.isUsingItem() || forceUpdate) { // Paper use override flag
this.useItem = itemstack;
Expand All @@ -49,7 +49,7 @@ index fa07a6f7ec215652861a62a0cb942522e0f4f655..4bdc5e2926ec78de0948b8469c72015c
if (!this.level.isClientSide) {
this.setLivingEntityFlag(1, true);
this.setLivingEntityFlag(2, hand == InteractionHand.OFF_HAND);
@@ -3598,7 +3610,10 @@ public abstract class LivingEntity extends Entity {
@@ -3601,7 +3613,10 @@ public abstract class LivingEntity extends Entity {
}
} else if (!this.isUsingItem() && !this.useItem.isEmpty()) {
this.useItem = ItemStack.EMPTY;
Expand All @@ -61,7 +61,7 @@ index fa07a6f7ec215652861a62a0cb942522e0f4f655..4bdc5e2926ec78de0948b8469c72015c
}
}

@@ -3726,7 +3741,10 @@ public abstract class LivingEntity extends Entity {
@@ -3729,7 +3744,10 @@ public abstract class LivingEntity extends Entity {
}

this.useItem = ItemStack.EMPTY;
Expand Down
4 changes: 2 additions & 2 deletions patches/server/0371-Entity-Jump-API.patch
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Entity Jump API


diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 4bdc5e2926ec78de0948b8469c72015c8fecb520..ae2ee484ab8b70226dd25386336c109a201a6450 100644
index cc8312d87dd1c8aa93063d0e736ea7ebc414b870..5dae06fed664ee26727d00cc545e17f4c48d5101 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3171,8 +3171,10 @@ public abstract class LivingEntity extends Entity {
@@ -3174,8 +3174,10 @@ public abstract class LivingEntity extends Entity {
} else if (this.isInLava() && (!this.onGround || d7 > d8)) {
this.jumpInLiquid(FluidTags.LAVA);
} else if ((this.onGround || flag && d7 <= d8) && this.noJumpDelay == 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ Will not run if max entity craming is disabled and
the max collisions per entity is less than or equal to 0

diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index ae2ee484ab8b70226dd25386336c109a201a6450..4963f3b2e8d2889ef79a8c4fbc84548a0010b49d 100644
index 5dae06fed664ee26727d00cc545e17f4c48d5101..65309174a2ab24354718e9848901b3a35598cb3f 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3268,10 +3268,16 @@ public abstract class LivingEntity extends Entity {
@@ -3271,10 +3271,16 @@ public abstract class LivingEntity extends Entity {
protected void serverAiStep() {}

protected void pushEntities() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Add PlayerAttackEntityCooldownResetEvent


diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 4963f3b2e8d2889ef79a8c4fbc84548a0010b49d..ab02e0babf6289d64b44dc18f3f6f0bdd4b83c32 100644
index 65309174a2ab24354718e9848901b3a35598cb3f..164d9c6d956b1e5dad5ca9831c2bb2e225d70ec7 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -2046,7 +2046,16 @@ public abstract class LivingEntity extends Entity {
@@ -2049,7 +2049,16 @@ public abstract class LivingEntity extends Entity {

EntityDamageEvent event = CraftEventFactory.handleLivingEntityDamageEvent(this, damagesource, originalDamage, hardHatModifier, blockingModifier, armorModifier, resistanceModifier, magicModifier, absorptionModifier, hardHat, blocking, armor, resistance, magic, absorption);
if (damagesource.getEntity() instanceof net.minecraft.world.entity.player.Player) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Don't check chunk for portal on world gen entity add


diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 198a0cfb222f40e792a9723eb25c514889ffe01f..345190be83c7c9a7f65d64a6905da872fc020abb 100644
index 30a9959a6ce27364249a9998c6dc80e5fdd8cde6..9d71977440628eb5c87a704c956867533b0bc41d 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3374,7 +3374,7 @@ public abstract class LivingEntity extends Entity {
@@ -3377,7 +3377,7 @@ public abstract class LivingEntity extends Entity {
Entity entity = this.getVehicle();

super.stopRiding(suppressCancellation); // Paper - suppress
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ index 22f36cd3df49160f1b6668befdd05c2268edaa49..e39965c2e50bc8ee424ea07819346e06
} else if (entity.level.isClientSide && (!(entity1 instanceof Player) || !((Player) entity1).isLocalPlayer())) {
return false;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 345190be83c7c9a7f65d64a6905da872fc020abb..cd7850fbfbd1997b42b93df15666b2f3f9948384 100644
index 9d71977440628eb5c87a704c956867533b0bc41d..e928db63f24689f9fd2313dc0b2a0976fc451882 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3288,7 +3288,7 @@ public abstract class LivingEntity extends Entity {
@@ -3291,7 +3291,7 @@ public abstract class LivingEntity extends Entity {
return;
}
// Paper end - don't run getEntities if we're not going to use its result
Expand All @@ -73,7 +73,7 @@ index 345190be83c7c9a7f65d64a6905da872fc020abb..cd7850fbfbd1997b42b93df15666b2f3

if (!list.isEmpty()) {
// Paper - move up
@@ -3459,9 +3459,16 @@ public abstract class LivingEntity extends Entity {
@@ -3462,9 +3462,16 @@ public abstract class LivingEntity extends Entity {
return !this.isRemoved() && this.collides; // CraftBukkit
}

Expand Down
Loading