From 0000000000000000000000000000000000000000 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/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java index 64e0b08170..58aa6df0a1 100644 --- a/src/main/java/net/minecraft/server/PathfinderNormal.java +++ b/src/main/java/net/minecraft/server/PathfinderNormal.java @@ -0,0 +0,0 @@ import javax.annotation.Nullable; public class PathfinderNormal extends PathfinderAbstract { protected float j; + private World world; // Paper public PathfinderNormal() { } @@ -0,0 +0,0 @@ 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() { @@ -0,0 +0,0 @@ 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) { - HashSet hashset = Sets.newHashSet(); + HashSet hashset = Sets.newHashSet(); // Paper - decompile fix 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)); @@ -0,0 +0,0 @@ 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) { - EnumSet enumset = EnumSet.noneOf(PathType.class); + EnumSet enumset = EnumSet.noneOf(PathType.class); // Paper - decompile fix PathType pathtype = PathType.BLOCKED; double d0 = (double)entityinsentient.width / 2.0D; BlockPosition blockposition = new BlockPosition(entityinsentient); @@ -0,0 +0,0 @@ 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) { - Block block = iblockaccess.getType(new BlockPosition(i, jx - 1, k)).getBlock(); + Block block = world.getBlockIfLoaded(new BlockPosition(i, jx - 1, k)); // Paper + if (block == null) return PathType.BLOCKED; // Paper 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) { @@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract { for(int l = -1; l <= 1; ++l) { for(int i1 = -1; i1 <= 1; ++i1) { if (l != 0 || i1 != 0) { - Block block = iblockaccess.getType(blockposition$b.f(l + i, jx, i1 + k)).getBlock(); - if (block == Blocks.CACTUS) { + Block block = world.getBlockIfLoaded(blockposition$b.f(l + i, jx, i1 + k)); // Paper + if (block == null) pathtype = PathType.BLOCKED; // Paper + else if (block == Blocks.CACTUS) { // Paper pathtype = PathType.DANGER_CACTUS; } else if (block == Blocks.FIRE) { pathtype = PathType.DANGER_FIRE; @@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract { protected PathType b(IBlockAccess iblockaccess, int i, int jx, int k) { BlockPosition blockposition = new BlockPosition(i, jx, k); - IBlockData iblockdata = iblockaccess.getType(blockposition); + IBlockData iblockdata = world.getTypeIfLoaded(blockposition); // Paper + if (iblockdata == null) return PathType.BLOCKED; // Paper Block block = iblockdata.getBlock(); Material material = iblockdata.getMaterial(); if (iblockdata.isAir()) { --