Fixs and Improvements for EndermanEscapeEvent (#12570)

This commit is contained in:
Pedro
2025-05-24 15:53:02 -04:00
committed by GitHub
parent 7774243d11
commit 220b57add4
2 changed files with 20 additions and 4 deletions

View File

@@ -27,7 +27,9 @@ public class EndermanEscapeEvent extends EntityEvent implements Cancellable {
} }
/** /**
* @return The reason the enderman is trying to escape * Gets the reason the enderman is trying to escape.
*
* @return The reason
*/ */
public Reason getReason() { public Reason getReason() {
return this.reason; return this.reason;
@@ -42,7 +44,8 @@ public class EndermanEscapeEvent extends EntityEvent implements Cancellable {
* Cancels the escape. * Cancels the escape.
* <p> * <p>
* If this escape normally had resulted in damage avoidance such as indirect, * If this escape normally had resulted in damage avoidance such as indirect,
* the enderman will now take damage. * the enderman will now take damage. However, this does not change the Enderman's
* innate immunities or damage behavior like arrows where the damage never happens.
*/ */
@Override @Override
public void setCancelled(final boolean cancel) { public void setCancelled(final boolean cancel) {
@@ -76,7 +79,7 @@ public class EndermanEscapeEvent extends EntityEvent implements Cancellable {
*/ */
STARE, STARE,
/** /**
* Specific case for {@link #CRITICAL_HIT} where the enderman is taking rain damage * Specific case for {@link #CRITICAL_HIT} where the enderman is taking damage by drowning (ex: rain)
*/ */
DROWN DROWN
} }

View File

@@ -56,7 +56,20 @@
this.setTarget(null); this.setTarget(null);
this.teleport(); this.teleport();
} }
@@ -369,11 +_,13 @@ @@ -359,21 +_,25 @@
AbstractThrownPotion abstractThrownPotion1 = damageSource.getDirectEntity() instanceof AbstractThrownPotion abstractThrownPotion
? abstractThrownPotion
: null;
- if (!damageSource.is(DamageTypeTags.IS_PROJECTILE) && abstractThrownPotion1 == null) {
+ if (!damageSource.is(DamageTypeTags.IS_PROJECTILE) && abstractThrownPotion1 == null) { // Paper - EndermanEscapeEvent - diff on change - below logic relies on this path covering non-projectile damage.
boolean flag = super.hurtServer(level, damageSource, amount);
if (!(damageSource.getEntity() instanceof LivingEntity) && this.random.nextInt(10) != 0) {
+ if (this.tryEscape(damageSource.is(net.minecraft.tags.DamageTypeTags.IS_DROWNING) ? com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.DROWN : com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.CRITICAL_HIT)) { // Paper - EndermanEscapeEvent
this.teleport();
+ } // Paper - EndermanEscapeEvent
}
return flag;
} else { } else {
boolean flag = abstractThrownPotion1 != null && this.hurtWithCleanWater(level, damageSource, abstractThrownPotion1, amount); boolean flag = abstractThrownPotion1 != null && this.hurtWithCleanWater(level, damageSource, abstractThrownPotion1, amount);