diff options
author | Spottedleaf <[email protected]> | 2024-07-11 12:09:15 -0700 |
---|---|---|
committer | Spottedleaf <[email protected]> | 2024-07-11 12:09:15 -0700 |
commit | 90ae1dc573bc9f2f0a60bbdcf497aa096e966c9d (patch) | |
tree | de2f1e3619c5d7fb8cabb13bc261850a8c2c3298 /patches/server/1035-Only-call-EntityDamageEvents-before-actuallyHurt.patch | |
parent | 7bd22b1835af2611c5ad597aef6470b1ece9b547 (diff) | |
download | Paper-90ae1dc573bc9f2f0a60bbdcf497aa096e966c9d.tar.gz Paper-90ae1dc573bc9f2f0a60bbdcf497aa096e966c9d.zip |
Port collision optimisation patch from Moonrise
Drop random ticking optimisation for now
Diffstat (limited to 'patches/server/1035-Only-call-EntityDamageEvents-before-actuallyHurt.patch')
-rw-r--r-- | patches/server/1035-Only-call-EntityDamageEvents-before-actuallyHurt.patch | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/patches/server/1035-Only-call-EntityDamageEvents-before-actuallyHurt.patch b/patches/server/1035-Only-call-EntityDamageEvents-before-actuallyHurt.patch new file mode 100644 index 0000000000..f91219dbe1 --- /dev/null +++ b/patches/server/1035-Only-call-EntityDamageEvents-before-actuallyHurt.patch @@ -0,0 +1,73 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Bjarne Koll <[email protected]> +Date: Mon, 8 Jul 2024 22:01:08 +0200 +Subject: [PATCH] Only call EntityDamageEvents before actuallyHurt + +The recent upstream update moved around the event logic for +EntiyDamageEvent and its derivatives. +However, the event was called on every call to #hurt as it was moved out +of actuallyHurt. + +This patch moves the invocation directly before the #actuallyHurt calls, +respective invulnerable timings. + +diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java +index 945da6b82653f05625f054d64bbf605a4ec1cd05..909accac7538e1c0c0c51deb2ee0605697c059d0 100644 +--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java ++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +@@ -1459,12 +1459,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + } + + // CraftBukkit start +- EntityDamageEvent event = this.handleEntityDamage(source, amount); +- amount = 0; +- amount += (float) event.getDamage(DamageModifier.BASE); +- amount += (float) event.getDamage(DamageModifier.BLOCKING); +- amount += (float) event.getDamage(DamageModifier.FREEZING); +- amount += (float) event.getDamage(DamageModifier.HARD_HAT); ++ EntityDamageEvent event; // Paper - move this into the actual invuln check.... + // CraftBukkit end + + this.walkAnimation.setSpeed(1.5F); +@@ -1475,6 +1470,11 @@ public abstract class LivingEntity extends Entity implements Attackable { + return false; + } + ++ // Paper start - only call damage event when actuallyHurt will be called - move call logic down ++ event = this.handleEntityDamage(source, amount); ++ amount = computeAmountFromEntityDamageEvent(event); ++ // Paper end - only call damage event when actuallyHurt will be called - move call logic down ++ + // CraftBukkit start + if (!this.actuallyHurt(source, (float) event.getFinalDamage() - this.lastHurt, event)) { + return false; +@@ -1484,6 +1484,10 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.lastHurt = amount; + flag1 = false; + } else { ++ // Paper start - only call damage event when actuallyHurt will be called - move call logic down ++ event = this.handleEntityDamage(source, amount); ++ amount = computeAmountFromEntityDamageEvent(event); ++ // Paper end - only call damage event when actuallyHurt will be called - move call logic down + // CraftBukkit start + if (!this.actuallyHurt(source, (float) event.getFinalDamage(), event)) { + return false; +@@ -1615,6 +1619,18 @@ public abstract class LivingEntity extends Entity implements Attackable { + } + } + ++ // Paper start - only call damage event when actuallyHurt will be called - move out amount computation logic ++ private float computeAmountFromEntityDamageEvent(final EntityDamageEvent event) { ++ // Taken from hurt()'s craftbukkit diff. ++ float amount = 0; ++ amount += (float) event.getDamage(DamageModifier.BASE); ++ amount += (float) event.getDamage(DamageModifier.BLOCKING); ++ amount += (float) event.getDamage(DamageModifier.FREEZING); ++ amount += (float) event.getDamage(DamageModifier.HARD_HAT); ++ return amount; ++ } ++ // Paper end - only call damage event when actuallyHurt will be called - move out amount computation logic ++ + protected void blockUsingShield(LivingEntity attacker) { + attacker.blockedByShield(this); + } |