mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-03 16:04:38 +01:00
edabff8a35
Spigot incorrectly returns false in Wolf#actuallyHurt if the armor absorbed the damage causing the entity to not get damage invuln ticks. Resolve this by correctly reverting to the "always true" return value as the event is not cancelled.
64 lines
3.6 KiB
Diff
64 lines
3.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Sat, 27 Apr 2024 09:44:53 -0700
|
|
Subject: [PATCH] Revert to vanilla handling of LivingEntity#actuallyHurt
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
index d08eec460a67fbd0b2ed2e0dd6d557dc629f4dfe..555d1b05ef6278567de598488b9486db965b8587 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
@@ -1455,7 +1455,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
amount = 0.0F;
|
|
}
|
|
|
|
- float f1 = amount;
|
|
+ float f1 = amount; final float originalAmount = f1; // Paper - revert to vanilla #hurt - OBFHELPER
|
|
boolean flag = amount > 0.0F && this.isDamageSourceBlocked(source); // Copied from below
|
|
float f2 = 0.0F;
|
|
|
|
@@ -1513,6 +1513,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
if (!this.actuallyHurt(world, source, (float) event.getFinalDamage() - this.lastHurt, event)) {
|
|
return false;
|
|
}
|
|
+ if (this instanceof ServerPlayer && event.getDamage() == 0 && originalAmount == 0) return false; // Paper - revert to vanilla damage - players are not affected by damage that is 0 - skip damage if the vanilla damage is 0 and was not modified by plugins in the event.
|
|
// CraftBukkit end
|
|
this.lastHurt = amount;
|
|
flag1 = false;
|
|
@@ -1521,6 +1522,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
if (!this.actuallyHurt(world, source, (float) event.getFinalDamage(), event)) {
|
|
return false;
|
|
}
|
|
+ if (this instanceof ServerPlayer && event.getDamage() == 0 && originalAmount == 0) return false; // Paper - revert to vanilla damage - players are not affected by damage that is 0 - skip damage if the vanilla damage is 0 and was not modified by plugins in the event.
|
|
this.lastHurt = amount;
|
|
this.invulnerableTime = this.invulnerableDuration; // CraftBukkit - restore use of maxNoDamageTicks
|
|
// this.actuallyHurt(worldserver, damagesource, f);
|
|
@@ -2487,12 +2489,12 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
|
|
return true;
|
|
} else {
|
|
- return originalDamage > 0;
|
|
+ return true; // Paper - return false ONLY if event was cancelled
|
|
}
|
|
// CraftBukkit end
|
|
}
|
|
}
|
|
- return false; // CraftBukkit
|
|
+ return true; // CraftBukkit // Paper - return false ONLY if event was cancelled
|
|
}
|
|
|
|
public CombatTracker getCombatTracker() {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
|
|
index fc19bd326f00d1e8bd08ef6cc430c555337a6e3d..fb84ee1225cd762ef306d1fc3e1baed42c034a3c 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
|
|
@@ -388,7 +388,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder<Hol
|
|
}
|
|
|
|
}
|
|
- return false; // CraftBukkit
|
|
+ return true; // CraftBukkit // Paper - return false ONLY if event was cancelled
|
|
}
|
|
|
|
private boolean canArmorAbsorb(DamageSource source) {
|