mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 04:17:44 +01:00
8ed2992da9
Portion of diff was dropped in the mappings update commit. Also remove the option to remove invalid statistics. The server will automatically do this now as of... 1.13?, our option wasn't even doing anything.
83 lines
4.0 KiB
Diff
83 lines
4.0 KiB
Diff
From a1c129eac9366b285b7b4a5bed20576929f97195 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Mon, 30 Apr 2018 13:15:55 -0400
|
|
Subject: [PATCH] EndermanEscapeEvent
|
|
|
|
Fires an event anytime an enderman intends to teleport away from the player
|
|
|
|
You may cancel this, enabling ranged attacks to damage the enderman for example.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java
|
|
index db618ae68..5d5c21bba 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityEnderman.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityEnderman.java
|
|
@@ -1,6 +1,7 @@
|
|
package net.minecraft.server;
|
|
|
|
import java.util.Optional;
|
|
+import com.destroystokyo.paper.event.entity.EndermanEscapeEvent; // Paper
|
|
import java.util.Random;
|
|
import java.util.UUID;
|
|
import java.util.function.Function;
|
|
@@ -56,6 +57,12 @@ public class EntityEnderman extends EntityMonster {
|
|
setGoalTarget(entityliving, org.bukkit.event.entity.EntityTargetEvent.TargetReason.UNKNOWN, true);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ private boolean tryEscape(EndermanEscapeEvent.Reason reason) {
|
|
+ return new EndermanEscapeEvent((org.bukkit.craftbukkit.entity.CraftEnderman) this.getBukkitEntity(), reason).callEvent();
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public boolean setGoalTarget(EntityLiving entityliving, org.bukkit.event.entity.EntityTargetEvent.TargetReason reason, boolean fireEvent) {
|
|
if (!super.setGoalTarget(entityliving, reason, fireEvent)) {
|
|
@@ -168,7 +175,7 @@ public class EntityEnderman extends EntityMonster {
|
|
if (this.world.L() && this.ticksLived >= this.bE + 600) {
|
|
float f = this.az();
|
|
|
|
- if (f > 0.5F && this.world.e(new BlockPosition(this)) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F) {
|
|
+ if (f > 0.5F && this.world.e(new BlockPosition(this)) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && tryEscape(EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper
|
|
this.setGoalTarget((EntityLiving) null);
|
|
this.dz();
|
|
}
|
|
@@ -247,7 +254,7 @@ public class EntityEnderman extends EntityMonster {
|
|
public boolean damageEntity(DamageSource damagesource, float f) {
|
|
if (this.isInvulnerable(damagesource)) {
|
|
return false;
|
|
- } else if (damagesource instanceof EntityDamageSourceIndirect) {
|
|
+ } else if (damagesource instanceof EntityDamageSourceIndirect && tryEscape(EndermanEscapeEvent.Reason.INDIRECT)) { // Paper
|
|
for (int i = 0; i < 64; ++i) {
|
|
if (this.dz()) {
|
|
return true;
|
|
@@ -258,7 +265,7 @@ public class EntityEnderman extends EntityMonster {
|
|
} else {
|
|
boolean flag = super.damageEntity(damagesource, f);
|
|
|
|
- if (damagesource.ignoresArmor() && this.random.nextInt(10) != 0) {
|
|
+ if (damagesource.ignoresArmor() && this.random.nextInt(10) != 0 && tryEscape(damagesource == DamageSource.DROWN ? EndermanEscapeEvent.Reason.DROWN : EndermanEscapeEvent.Reason.CRITICAL_HIT)) { // Paper
|
|
this.dz();
|
|
}
|
|
|
|
@@ -347,7 +354,7 @@ public class EntityEnderman extends EntityMonster {
|
|
|
|
static class PathfinderGoalPlayerWhoLookedAtTarget extends PathfinderGoalNearestAttackableTarget<EntityHuman> {
|
|
|
|
- private final EntityEnderman i;
|
|
+ private final EntityEnderman i; public EntityEnderman getEnderman() { return i; } // Paper - OBFHELPER
|
|
private EntityHuman j;
|
|
private int k;
|
|
private int l;
|
|
@@ -399,7 +406,7 @@ public class EntityEnderman extends EntityMonster {
|
|
} else {
|
|
if (this.d != null) {
|
|
if (this.i.f((EntityHuman) this.d)) {
|
|
- if (((EntityHuman) this.d).h(this.i) < 16.0D) {
|
|
+ if (((EntityHuman) this.d).h(this.i) < 16.0D && this.getEnderman().tryEscape(EndermanEscapeEvent.Reason.STARE)) { // Paper
|
|
this.i.dz();
|
|
}
|
|
|
|
--
|
|
2.20.0
|
|
|