diff --git a/paper-server/patches/sources/net/minecraft/world/entity/ai/goal/TemptGoal.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/ai/goal/TemptGoal.java.patch index 1a838aa9c160..1845f244e8ab 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/ai/goal/TemptGoal.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/ai/goal/TemptGoal.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/ai/goal/TemptGoal.java +++ b/net/minecraft/world/entity/ai/goal/TemptGoal.java -@@ -23,7 +_,7 @@ +@@ -23,12 +_,13 @@ private double pz; private double pRotX; private double pRotY; @@ -9,19 +9,34 @@ private int calmDown; private boolean isRunning; private final Predicate items; -@@ -56,6 +_,15 @@ + private final boolean canScare; + private final double stopDistance; ++ private int temptEventCooldown; // Paper + + public TemptGoal(PathfinderMob mob, double speedModifier, Predicate items, boolean canScare) { + this((Mob)mob, speedModifier, items, canScare, 2.5); +@@ -54,8 +_,23 @@ + this.calmDown--; + return false; } else { - this.player = getServerLevel(this.mob) +- this.player = getServerLevel(this.mob) ++ // this.player = getServerLevel(this.mob).getNearestPlayer(this.targetingConditions.range(this.mob.getAttributeValue(Attributes.TEMPT_RANGE)), this.mob); ++ // Paper start - Throttle EntityTargetLivingEntityEvent ++ LivingEntity candidate = getServerLevel(this.mob) .getNearestPlayer(this.targetingConditions.range(this.mob.getAttributeValue(Attributes.TEMPT_RANGE)), this.mob); -+ // CraftBukkit start -+ if (this.player != null) { -+ org.bukkit.event.entity.EntityTargetLivingEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTargetLivingEvent(this.mob, this.player, org.bukkit.event.entity.EntityTargetEvent.TargetReason.TEMPT); ++ ++ if (candidate != null && (candidate != this.player || --this.temptEventCooldown <= 0)) { ++ this.temptEventCooldown = 10; ++ ++ org.bukkit.event.entity.EntityTargetLivingEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTargetLivingEvent(this.mob, candidate, org.bukkit.event.entity.EntityTargetEvent.TargetReason.TEMPT); + if (event.isCancelled()) { + return false; + } -+ this.player = (event.getTarget() == null) ? null : ((org.bukkit.craftbukkit.entity.CraftLivingEntity) event.getTarget()).getHandle(); ++ candidate = (event.getTarget() == null) ? null : ((org.bukkit.craftbukkit.entity.CraftLivingEntity) event.getTarget()).getHandle(); + } -+ // CraftBukkit end ++ ++ this.player = candidate; ++ // Paper end - Throttle EntityTargetLivingEntityEvent return this.player != null; } }