From bd4280b9ecc54258c17e135d5b91164f18ae4b97 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 11 Sep 2018 19:10:14 -0400 Subject: [PATCH] ensure world is set for pathfinders --- ...vent-pathfinding-from-loading-chunks.patch | 83 ++++++++++++++----- 1 file changed, 60 insertions(+), 23 deletions(-) diff --git a/Spigot-Server-Patches/0367-Prevent-pathfinding-from-loading-chunks.patch b/Spigot-Server-Patches/0367-Prevent-pathfinding-from-loading-chunks.patch index 130853473..f6eef958d 100644 --- a/Spigot-Server-Patches/0367-Prevent-pathfinding-from-loading-chunks.patch +++ b/Spigot-Server-Patches/0367-Prevent-pathfinding-from-loading-chunks.patch @@ -1,30 +1,67 @@ -From 67fd8976c70a84758a635896026b931f58b32689 Mon Sep 17 00:00:00 2001 +From efe00b392d2d7c0ce533572ff47bd7a27cbb2d57 Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 10 Sep 2018 23:52:28 -0400 Subject: [PATCH] Prevent pathfinding from loading chunks +diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java +index 4023253f42..b2480301ef 100644 +--- a/src/main/java/net/minecraft/server/NavigationAbstract.java ++++ b/src/main/java/net/minecraft/server/NavigationAbstract.java +@@ -21,13 +21,14 @@ public abstract class NavigationAbstract { + protected long n; + protected PathfinderAbstract o; + private BlockPosition q; +- private Pathfinder r; ++ private Pathfinder r; public Pathfinder getPathfinder() { return r; } // Paper - OBFHELPER + + public NavigationAbstract(EntityInsentient entityinsentient, World world) { + this.a = entityinsentient; + this.b = world; + this.p = entityinsentient.getAttributeInstance(GenericAttributes.FOLLOW_RANGE); + this.r = this.a(); ++ getPathfinder().getPathfinder().world = world; // Paper + } + + public BlockPosition i() { +diff --git a/src/main/java/net/minecraft/server/Pathfinder.java b/src/main/java/net/minecraft/server/Pathfinder.java +index 04c71ac0ef..6e583356ce 100644 +--- a/src/main/java/net/minecraft/server/Pathfinder.java ++++ b/src/main/java/net/minecraft/server/Pathfinder.java +@@ -8,7 +8,7 @@ public class Pathfinder { + private final Path a = new Path(); + private final Set b = Sets.newHashSet(); + private final PathPoint[] c = new PathPoint[32]; +- private PathfinderAbstract d; ++ private PathfinderAbstract d; public PathfinderAbstract getPathfinder() { return d; } // Paper - OBFHELPER + + public Pathfinder(PathfinderAbstract pathfinderabstract) { + this.d = pathfinderabstract; +diff --git a/src/main/java/net/minecraft/server/PathfinderAbstract.java b/src/main/java/net/minecraft/server/PathfinderAbstract.java +index ba7fe359fe..6716280146 100644 +--- a/src/main/java/net/minecraft/server/PathfinderAbstract.java ++++ b/src/main/java/net/minecraft/server/PathfinderAbstract.java +@@ -3,6 +3,7 @@ package net.minecraft.server; + public abstract class PathfinderAbstract { + protected IBlockAccess a; + protected EntityInsentient b; ++ public World world; // Paper + protected final IntHashMap c = new IntHashMap(); + protected int d; + protected int e; +@@ -16,6 +17,7 @@ public abstract class PathfinderAbstract { + + public void a(IBlockAccess iblockaccess, EntityInsentient entityinsentient) { + this.a = iblockaccess; ++ if (iblockaccess instanceof World) world = (World) iblockaccess; // Paper + this.b = entityinsentient; + this.c.c(); + this.d = MathHelper.d(entityinsentient.width + 1.0F); diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java -index 64e0b08170..58aa6df0a1 100644 +index 64e0b08170..93f3d2e363 100644 --- a/src/main/java/net/minecraft/server/PathfinderNormal.java +++ b/src/main/java/net/minecraft/server/PathfinderNormal.java -@@ -7,6 +7,7 @@ import javax.annotation.Nullable; - - public class PathfinderNormal extends PathfinderAbstract { - protected float j; -+ private World world; // Paper - - public PathfinderNormal() { - } -@@ -14,6 +15,7 @@ public class PathfinderNormal extends PathfinderAbstract { - public void a(IBlockAccess iblockaccess, EntityInsentient entityinsentient) { - super.a(iblockaccess, entityinsentient); - this.j = entityinsentient.a(PathType.WATER); -+ this.world = entityinsentient.world; // Paper - } - - public void a() { -@@ -47,7 +49,7 @@ public class PathfinderNormal extends PathfinderAbstract { +@@ -47,7 +47,7 @@ public class PathfinderNormal extends PathfinderAbstract { BlockPosition blockposition2 = new BlockPosition(this.b); PathType pathtype1 = this.a(this.b, blockposition2.getX(), i, blockposition2.getZ()); if (this.b.a(pathtype1) < 0.0F) { @@ -33,7 +70,7 @@ index 64e0b08170..58aa6df0a1 100644 hashset.add(new BlockPosition(this.b.getBoundingBox().a, (double)i, this.b.getBoundingBox().c)); hashset.add(new BlockPosition(this.b.getBoundingBox().a, (double)i, this.b.getBoundingBox().f)); hashset.add(new BlockPosition(this.b.getBoundingBox().d, (double)i, this.b.getBoundingBox().c)); -@@ -233,7 +235,7 @@ public class PathfinderNormal extends PathfinderAbstract { +@@ -233,7 +233,7 @@ public class PathfinderNormal extends PathfinderAbstract { } public PathType a(IBlockAccess iblockaccess, int i, int jx, int k, EntityInsentient entityinsentient, int l, int i1, int j1, boolean flag, boolean flag1) { @@ -42,7 +79,7 @@ index 64e0b08170..58aa6df0a1 100644 PathType pathtype = PathType.BLOCKED; double d0 = (double)entityinsentient.width / 2.0D; BlockPosition blockposition = new BlockPosition(entityinsentient); -@@ -304,7 +306,8 @@ public class PathfinderNormal extends PathfinderAbstract { +@@ -304,7 +304,8 @@ public class PathfinderNormal extends PathfinderAbstract { public PathType a(IBlockAccess iblockaccess, int i, int jx, int k) { PathType pathtype = this.b(iblockaccess, i, jx, k); if (pathtype == PathType.OPEN && jx >= 1) { @@ -52,7 +89,7 @@ index 64e0b08170..58aa6df0a1 100644 PathType pathtype1 = this.b(iblockaccess, i, jx - 1, k); pathtype = pathtype1 != PathType.WALKABLE && pathtype1 != PathType.OPEN && pathtype1 != PathType.WATER && pathtype1 != PathType.LAVA ? PathType.WALKABLE : PathType.OPEN; if (pathtype1 == PathType.DAMAGE_FIRE || block == Blocks.MAGMA_BLOCK) { -@@ -326,8 +329,9 @@ public class PathfinderNormal extends PathfinderAbstract { +@@ -326,8 +327,9 @@ public class PathfinderNormal extends PathfinderAbstract { for(int l = -1; l <= 1; ++l) { for(int i1 = -1; i1 <= 1; ++i1) { if (l != 0 || i1 != 0) { @@ -64,7 +101,7 @@ index 64e0b08170..58aa6df0a1 100644 pathtype = PathType.DANGER_CACTUS; } else if (block == Blocks.FIRE) { pathtype = PathType.DANGER_FIRE; -@@ -343,7 +347,8 @@ public class PathfinderNormal extends PathfinderAbstract { +@@ -343,7 +345,8 @@ public class PathfinderNormal extends PathfinderAbstract { protected PathType b(IBlockAccess iblockaccess, int i, int jx, int k) { BlockPosition blockposition = new BlockPosition(i, jx, k);