aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0210-EndermanEscapeEvent.patch
diff options
context:
space:
mode:
authorMariell Hoversholm <[email protected]>2020-09-27 16:52:40 +0200
committerDaniel Ennis <[email protected]>2020-09-27 11:04:51 -0400
commit654b792caf97273e2176d239860ade32c0d7e94e (patch)
tree54230d9acc097d4f234c069fee3deff2fb2d00de /Spigot-Server-Patches/0210-EndermanEscapeEvent.patch
parent5a988f2e45e9fc9450645bb65cfffb4d9ce6c886 (diff)
downloadPaper-654b792caf97273e2176d239860ade32c0d7e94e.tar.gz
Paper-654b792caf97273e2176d239860ade32c0d7e94e.zip
Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: a339310c #755: Fix NPE when calling getInventory() for virtual EnderChests 2577f9bf Increase outdated build delay 1dabfdc8 #754: Fix pre-1.16 serialized SkullMeta being broken on 1.16+, losing textures
Diffstat (limited to 'Spigot-Server-Patches/0210-EndermanEscapeEvent.patch')
-rw-r--r--Spigot-Server-Patches/0210-EndermanEscapeEvent.patch82
1 files changed, 82 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0210-EndermanEscapeEvent.patch b/Spigot-Server-Patches/0210-EndermanEscapeEvent.patch
new file mode 100644
index 0000000000..013fa77fa4
--- /dev/null
+++ b/Spigot-Server-Patches/0210-EndermanEscapeEvent.patch
@@ -0,0 +1,82 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+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 eea2534be648bec49749bd8f55e36658dccdba57..f20283585464d54c4c5da294cf19261c2d258c97 100644
+--- a/src/main/java/net/minecraft/server/EntityEnderman.java
++++ b/src/main/java/net/minecraft/server/EntityEnderman.java
+@@ -2,6 +2,7 @@ package net.minecraft.server;
+
+ import java.util.EnumSet;
+ import java.util.Optional;
++import com.destroystokyo.paper.event.entity.EndermanEscapeEvent; // Paper
+ import java.util.Random;
+ import java.util.UUID;
+ import java.util.function.Predicate;
+@@ -55,6 +56,12 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
+ 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)) {
+@@ -208,7 +215,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
+ if (this.world.isDay() && this.ticksLived >= this.bs + 600) {
+ float f = this.aQ();
+
+- if (f > 0.5F && this.world.e(this.getChunkCoordinates()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F) {
++ if (f > 0.5F && this.world.e(this.getChunkCoordinates()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper
+ this.setGoalTarget((EntityLiving) null);
+ this.eL();
+ }
+@@ -306,17 +313,19 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
+ if (this.isInvulnerable(damagesource)) {
+ return false;
+ } else if (damagesource instanceof EntityDamageSourceIndirect) {
++ if (this.tryEscape(EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start
+ for (int i = 0; i < 64; ++i) {
+ if (this.eL()) {
+ return true;
+ }
+ }
++ } // Paper end
+
+ return false;
+ } else {
+ boolean flag = super.damageEntity(damagesource, f);
+
+- if (!this.world.s_() && !(damagesource.getEntity() instanceof EntityLiving) && this.random.nextInt(10) != 0) {
++ if (!this.world.s_() && !(damagesource.getEntity() instanceof EntityLiving) && this.random.nextInt(10) != 0 && this.tryEscape(damagesource == DamageSource.DROWN ? EndermanEscapeEvent.Reason.DROWN : EndermanEscapeEvent.Reason.INDIRECT)) { // Paper - use to be critical hits as else, but mojang removed critical hits in 1.16.2 due to MC-185684
+ this.eL();
+ }
+
+@@ -461,7 +470,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
+
+ static class PathfinderGoalPlayerWhoLookedAtTarget extends PathfinderGoalNearestAttackableTarget<EntityHuman> {
+
+- private final EntityEnderman i;
++ private final EntityEnderman i; public final EntityEnderman getEnderman() { return this.i; } // Paper - OBFHELPER
+ private EntityHuman j;
+ private int k;
+ private int l;
+@@ -524,7 +533,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable {
+ } else {
+ if (this.c != null && !this.i.isPassenger()) {
+ if (this.i.g((EntityHuman) this.c)) {
+- if (this.c.h((Entity) this.i) < 16.0D) {
++ if (this.c.h((Entity) this.i) < 16.0D && this.getEnderman().tryEscape(EndermanEscapeEvent.Reason.STARE)) { // Paper
+ this.i.eL();
+ }
+