Skip to content

Commit

Permalink
Fire entity knockback event for ownerless tnt
Browse files Browse the repository at this point in the history
  • Loading branch information
Machine-Maker committed Mar 5, 2023
1 parent 5cc78f2 commit 7c904f8
Show file tree
Hide file tree
Showing 26 changed files with 95 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ index 66b727c533d3a2b7b5938ab9b9b7b4a76bb62966..378027b72852e5d465c8f621168605ee

protected void markHurt() {
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 4ebdf94833062cde6882f09f1d6878062f2c579e..19cd680bd77196b99767b274599e9eb5ead80192 100644
index 4ebdf94833062cde6882f09f1d6878062f2c579e..b700aa93d614ba4485c8efb4b6c416c1ffa6c0c6 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1457,7 +1457,7 @@ public abstract class LivingEntity extends Entity {
Expand All @@ -54,9 +54,11 @@ index 4ebdf94833062cde6882f09f1d6878062f2c579e..19cd680bd77196b99767b274599e9eb5
}

private boolean checkTotemDeathProtection(DamageSource source) {
@@ -1761,6 +1761,11 @@ public abstract class LivingEntity extends Entity {
@@ -1760,7 +1760,13 @@ public abstract class LivingEntity extends Entity {
return loottableinfo_builder;
}

+ @io.papermc.paper.annotation.DoNotUse // Paper
public void knockback(double strength, double x, double z) {
+ // Paper start - add knockbacking entity parameter
+ this.knockback(strength, x, z, null);
Expand All @@ -66,7 +68,7 @@ index 4ebdf94833062cde6882f09f1d6878062f2c579e..19cd680bd77196b99767b274599e9eb5
strength *= 1.0D - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE);
if (strength > 0.0D) {
this.hasImpulse = true;
@@ -1768,6 +1773,15 @@ public abstract class LivingEntity extends Entity {
@@ -1768,6 +1774,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 Down Expand Up @@ -198,3 +200,30 @@ index d4b8364fd860ee2cc632d8c752435b9b311c7ece..915c15faa510f4bdd3a96d8ba83280f0
}
}

diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index c4f1b98de5b7db95ca886c0f8b7b893428e1b460..b4b887537a42395a2fd6a2737c6a12af3256b104 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -260,12 +260,20 @@ public class Explosion {
d14 = entity instanceof Player && level.paperConfig().environment.disableExplosionKnockback ? 0 : ProtectionEnchantment.getExplosionKnockbackAfterDampener((LivingEntity) entity, d13); // Paper - Disable explosion knockback
}

- entity.setDeltaMovement(entity.getDeltaMovement().add(d8 * d14, d9 * d14, d10 * d14));
+ // Paper start - call EntityKnockbackByEntityEvent when the cause was an entity but the damage source doesn't contain an entity
+ org.bukkit.util.Vector delta = new org.bukkit.util.Vector(d8 * d14, d9 * d14, d10 * d14);
+ if (this.source != null && this.damageSource.getEntity() == null && entity instanceof LivingEntity livingEntity) {
+ if (!new com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent(livingEntity.getBukkitLivingEntity(), this.source.getBukkitEntity(), (float) d14, delta).callEvent()) {
+ return;
+ }
+ }
+ entity.setDeltaMovement(entity.getDeltaMovement().add(delta.getX(), delta.getY(), delta.getZ()));
+ // Paper end
if (entity instanceof Player) {
Player entityhuman = (Player) entity;

if (!entityhuman.isSpectator() && (!entityhuman.isCreative() || !entityhuman.getAbilities().flying) && !level.paperConfig().environment.disableExplosionKnockback) { // Paper - Disable explosion knockback
- this.hitPlayers.put(entityhuman, new Vec3(d8 * d13, d9 * d13, d10 * d13));
+ this.hitPlayers.put(entityhuman, org.bukkit.craftbukkit.util.CraftVector.toNMS(delta)); // Paper
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Add ray tracing methods to LivingEntity


diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 19cd680bd77196b99767b274599e9eb5ead80192..49ae203d493b1d43ee5c3623f5317499ffe55523 100644
index b700aa93d614ba4485c8efb4b6c416c1ffa6c0c6..77fcc10d66d21330370c2a18e4fd0e5128d38e89 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3772,6 +3772,20 @@ public abstract class LivingEntity extends Entity {
@@ -3773,6 +3773,20 @@ public abstract class LivingEntity extends Entity {
}

// Paper start
Expand Down
4 changes: 2 additions & 2 deletions patches/server/0268-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 24a07ef9f5cbed34d1aefccda9fe655b7dfef7ec..3cb7bca86c6b0696db7ad156d09e29e9da8cc7e7 100644
index dce554f8f3727b57cc8260da750aea61c92a4955..6e168ee4f72a35d3dba78c12b61432c57ae9901d 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -117,6 +117,7 @@ import net.minecraft.world.level.storage.loot.LootTable;
Expand All @@ -16,7 +16,7 @@ index 24a07ef9f5cbed34d1aefccda9fe655b7dfef7ec..3cb7bca86c6b0696db7ad156d09e29e9
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.scores.PlayerTeam;
@@ -3832,6 +3833,38 @@ public abstract class LivingEntity extends Entity {
@@ -3833,6 +3834,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 @@ -20,7 +20,7 @@ this is going to be the best soultion all around.
Improvements/suggestions welcome!

diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 3f9f7faeaa33a4f5d55812d6964496c0b9c8abb4..a84e4d7760efd36846ef8619bfabc12629bed940 100644
index f2d9a475c9e7eb5a9bccdc74f1e361c440285749..4f851879aaea3b604e45c2f608edd3c2972bd038 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1366,11 +1366,13 @@ public class ServerPlayer extends Player {
Expand Down Expand Up @@ -93,10 +93,10 @@ index 5116be3075c1249254524bf6a5b6bc28c61400e6..6d7632ca9b8b63be637c89b374b8769a
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 3cb7bca86c6b0696db7ad156d09e29e9da8cc7e7..cb53fc775df387e8bbb099517793daea5ea15e4b 100644
index 6e168ee4f72a35d3dba78c12b61432c57ae9901d..183c616785d0bb861e289ec0c45de5fdbc8f3f05 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3432,9 +3432,15 @@ public abstract class LivingEntity extends Entity {
@@ -3433,9 +3433,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 cb53fc775df387e8bbb099517793daea5ea15e4b..ba4e0bac019b68da166b277028015999139d2981 100644
index 183c616785d0bb861e289ec0c45de5fdbc8f3f05..842752ab637ac2026b6050bd6bf9924a188b6cca 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3649,9 +3649,14 @@ public abstract class LivingEntity extends Entity {
@@ -3650,9 +3650,14 @@ public abstract class LivingEntity extends Entity {
}

public void startUsingItem(InteractionHand hand) {
Expand All @@ -24,15 +24,15 @@ index cb53fc775df387e8bbb099517793daea5ea15e4b..ba4e0bac019b68da166b277028015999
this.useItem = itemstack;
this.useItemRemaining = itemstack.getUseDuration();
if (!this.level.isClientSide) {
@@ -3731,6 +3736,7 @@ public abstract class LivingEntity extends Entity {
@@ -3732,6 +3737,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;
@@ -3766,8 +3772,8 @@ public abstract class LivingEntity extends Entity {
@@ -3767,8 +3773,8 @@ public abstract class LivingEntity extends Entity {
}

this.stopUsingItem();
Expand Down
12 changes: 6 additions & 6 deletions patches/server/0339-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 ba4e0bac019b68da166b277028015999139d2981..b448a7b6318311ce3542e49a2f1670ccac77c215 100644
index 842752ab637ac2026b6050bd6bf9924a188b6cca..30e350cfd913a35029ae39188e8c5c837f4f33dd 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3592,6 +3592,11 @@ public abstract class LivingEntity extends Entity {
@@ -3593,6 +3593,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 ba4e0bac019b68da166b277028015999139d2981..b448a7b6318311ce3542e49a2f1670cc
private void updatingUsingItem() {
if (this.isUsingItem()) {
if (ItemStack.isSame(this.getItemInHand(this.getUsedItemHand()), this.useItem)) {
@@ -3609,8 +3614,12 @@ public abstract class LivingEntity extends Entity {
@@ -3610,8 +3615,12 @@ public abstract class LivingEntity extends Entity {
if (this.shouldTriggerItemUseEffects()) {
this.triggerItemUseEffects(stack, 5);
}
Expand All @@ -37,7 +37,7 @@ index ba4e0bac019b68da166b277028015999139d2981..b448a7b6318311ce3542e49a2f1670cc
this.completeUsingItem();
}

@@ -3658,7 +3667,10 @@ public abstract class LivingEntity extends Entity {
@@ -3659,7 +3668,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 ba4e0bac019b68da166b277028015999139d2981..b448a7b6318311ce3542e49a2f1670cc
if (!this.level.isClientSide) {
this.setLivingEntityFlag(1, true);
this.setLivingEntityFlag(2, hand == InteractionHand.OFF_HAND);
@@ -3683,7 +3695,10 @@ public abstract class LivingEntity extends Entity {
@@ -3684,7 +3696,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 ba4e0bac019b68da166b277028015999139d2981..b448a7b6318311ce3542e49a2f1670cc
}
}

@@ -3817,7 +3832,10 @@ public abstract class LivingEntity extends Entity {
@@ -3818,7 +3833,10 @@ public abstract class LivingEntity extends Entity {
}

this.useItem = ItemStack.EMPTY;
Expand Down
4 changes: 2 additions & 2 deletions patches/server/0355-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 b448a7b6318311ce3542e49a2f1670ccac77c215..9621438358c85cf66c756f0d53bcd89f4f0ec933 100644
index 30e350cfd913a35029ae39188e8c5c837f4f33dd..1d61611e56380b7c1b6f35df81b866c5594599ea 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3264,8 +3264,10 @@ public abstract class LivingEntity extends Entity {
@@ -3265,8 +3265,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 @@ -12,10 +12,10 @@ The entity's current team collision rule causes them to NEVER collide.
Co-authored-by: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>

diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 9621438358c85cf66c756f0d53bcd89f4f0ec933..ba11b19658cc1112de7c784637d053b68177b269 100644
index 1d61611e56380b7c1b6f35df81b866c5594599ea..7ac190abbe81ac512656fecadcc6c616bb5106e8 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3364,10 +3364,24 @@ public abstract class LivingEntity extends Entity {
@@ -3365,10 +3365,24 @@ public abstract class LivingEntity extends Entity {
if (this.level.isClientSide()) {
this.level.getEntities(EntityTypeTest.forClass(net.minecraft.world.entity.player.Player.class), this.getBoundingBox(), EntitySelector.pushableBy(this)).forEach(this::doPush);
} else {
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 ba11b19658cc1112de7c784637d053b68177b269..8371e37705c871f3b4bef0ffcf0a0bbb50a1c783 100644
index 7ac190abbe81ac512656fecadcc6c616bb5106e8..09c795fcb431980c228f37cb9238567401f69165 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -2128,7 +2128,16 @@ public abstract class LivingEntity extends Entity {
@@ -2129,7 +2129,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 @@ -13,7 +13,7 @@ A config is provided if you rather let players use these exploits, and let
them destroy the worlds End Portals and get on top of the nether easy.

diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index cc8dcb77f2b6d447c0e8d769a3d233dc2eb64efa..0a2f5e929d34c933755e9bc4b205e1b2ad0ce3bc 100644
index 97fa4b1557f664871016d7acc7729d58a86b6963..5eeccb6f16f749deec3c59bb7a00624f0794f47f 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -168,6 +168,7 @@ public class Explosion {
Expand All @@ -24,7 +24,7 @@ index cc8dcb77f2b6d447c0e8d769a3d233dc2eb64efa..0a2f5e929d34c933755e9bc4b205e1b2
FluidState fluid = iblockdata.getFluidState(); // Paper

if (!this.level.isInWorldBounds(blockposition)) {
@@ -347,7 +348,7 @@ public class Explosion {
@@ -355,7 +356,7 @@ public class Explosion {
BlockState iblockdata = this.level.getBlockState(blockposition);
Block block = iblockdata.getBlock();

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 b26b598678ea474b3abc67acebdbed9b278e89bc..2ce769b00798f35095f50380083c7cbf4de462ef 100644
index 010f176e18c959fee13e0113b02d9c835291971e..c761188cf9480963ea9abfcc5d806f473e396639 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3471,7 +3471,7 @@ public abstract class LivingEntity extends Entity {
@@ -3472,7 +3472,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 @@ -45,10 +45,10 @@ index 302676ef78ed5b3b7fc1b04851447ca72eed10c0..a00c3d96f2fc7131d1f4afa7af4e41ac
} 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 2ce769b00798f35095f50380083c7cbf4de462ef..beaf3b3bf4a4373d563b5b75238f79299a304db5 100644
index c761188cf9480963ea9abfcc5d806f473e396639..88129b18e20749ec41ef59e00c729f3c709e7345 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3392,7 +3392,7 @@ public abstract class LivingEntity extends Entity {
@@ -3393,7 +3393,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 @@ -57,7 +57,7 @@ index 2ce769b00798f35095f50380083c7cbf4de462ef..beaf3b3bf4a4373d563b5b75238f7929

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

Expand Down Expand Up @@ -117,7 +117,7 @@ index eb777842e158e10e81cae505bebc6601f8dae7ef..3a06f48e9aed59d429ef4142785b3938
}

diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
index 7ff1e7e4d493770bfdbc0ad5e8f10387cefc42d2..b136cdc13d94bc34c998a1986e0c93525356ac5c 100644
index d7bb93cd6467fe5d1cb1a9b95fa0bc3b31ba9cd2..713a47b38d6054e0b0c50dcdc23ecd3b0077f040 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
@@ -342,7 +342,7 @@ public class ArmorStand extends LivingEntity {
Expand Down
Loading

0 comments on commit 7c904f8

Please sign in to comment.