From b29eeb500dce5067097231e9cc7088c4cf4b2130 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Mon, 26 Nov 2018 13:23:49 +0000 Subject: [PATCH] limit the range at which we'll consider an attackable target This patch aims to ensure that MCP World#getNearestAttackablePlayer will not trigger chunk loads due to PathfinderGoalNearestAttackableTarget performing a ray trace operation by pre-checking the maximum limit; Given that the implementation shows that the limit should only ever decrease when set, allowing us to skip further checks earlier on when looking for an attackable entity --- ...at-which-we-ll-consider-an-attackabl.patch | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Spigot-Server-Patches/limit-the-range-at-which-we-ll-consider-an-attackabl.patch diff --git a/Spigot-Server-Patches/limit-the-range-at-which-we-ll-consider-an-attackabl.patch b/Spigot-Server-Patches/limit-the-range-at-which-we-ll-consider-an-attackabl.patch new file mode 100644 index 0000000000..2b3f79431c --- /dev/null +++ b/Spigot-Server-Patches/limit-the-range-at-which-we-ll-consider-an-attackabl.patch @@ -0,0 +1,33 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Shane Freeder +Date: Tue, 13 Nov 2018 14:01:00 +0000 +Subject: [PATCH] limit the range at which we'll consider an attackable target + +This patch aims to ensure that MCP World#getNearestAttackablePlayer +will not trigger chunk loads due to PathfinderGoalNearestAttackableTarget +performing a ray trace operation by pre-checking the maximum limit; + +Given that the implementation shows that the limit should only ever +decrease when set, allowing us to skip further checks earlier on +when looking for an attackable entity + +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index cdbb247da..027871c00 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc + for (int i = 0; i < this.players.size(); ++i) { + EntityHuman entityhuman1 = (EntityHuman) this.players.get(i); + ++ // Paper start ++ // move distance check up, if set, check distance^2 is less than XZlimit^2, continue ++ // 4th method param is XZlimit (at least at the time of commit) ++ double d6 = entityhuman1.d(d0, entityhuman1.locY, d2); ++ if (d3 < 0.0D || d6 < d3 * d3) + if (!entityhuman1.abilities.isInvulnerable && entityhuman1.isAlive() && !entityhuman1.isSpectator() && (predicate == null || predicate.test(entityhuman1))) { +- double d6 = entityhuman1.d(d0, entityhuman1.locY, d2); ++ // Paper end + double d7 = d3; + + if (entityhuman1.isSneaking()) { +-- \ No newline at end of file