geforkt von Mirrors/Paper
ea855e2b46
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 Developers!: You will need to clean up your work/Minecraft/1.13.2 folder for this Also, restore a patch that was dropped in the last upstream Bukkit Changes: 279eeab3 Fix command description not being set 96e2bb18 Remove debug print from SyntheticEventTest CraftBukkit Changes:d3ed1516
Fix dangerously threaded beacons217a293d
Don't relocate joptsimple to allow --help to work.1be05a21
Prepare for imminent Java 12 releasea49270b2
Mappings Update5259d80c
SPIGOT-4669: Fix PlayerTeleportEvent coordinates for relative teleports Spigot Changes: e6eb36f2 Rebuild patches
124 Zeilen
6.1 KiB
Diff
124 Zeilen
6.1 KiB
Diff
From e243b9109433eae11aa5d0ba4c3aecb1fccf3976 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Thu, 31 Mar 2016 19:17:58 -0400
|
|
Subject: [PATCH] Do not load chunks for Pathfinding
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkCache.java b/src/main/java/net/minecraft/server/ChunkCache.java
|
|
index 49533ac33..eef3ab73f 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkCache.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkCache.java
|
|
@@ -26,7 +26,7 @@ public class ChunkCache implements IIBlockAccess {
|
|
|
|
for (l = this.a; l <= j; ++l) {
|
|
for (i1 = this.b; i1 <= k; ++i1) {
|
|
- this.c[l - this.a][i1 - this.b] = world.getChunkAt(l, i1);
|
|
+ this.c[l - this.a][i1 - this.b] = world.getChunkIfLoaded(l, i1); // Paper
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java
|
|
index 604049b08..716d00afb 100644
|
|
--- a/src/main/java/net/minecraft/server/NavigationAbstract.java
|
|
+++ b/src/main/java/net/minecraft/server/NavigationAbstract.java
|
|
@@ -22,8 +22,9 @@ 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
|
|
|
|
+ private void setWorld() { if (getPathfinder() != null && getPathfinder().getPathfinder() != null) getPathfinder().getPathfinder().world = getEntity().world; } // Paper
|
|
public NavigationAbstract(EntityInsentient entityinsentient, World world) {
|
|
this.g = Vec3D.a;
|
|
this.h = Vec3D.a;
|
|
@@ -32,6 +33,7 @@ public abstract class NavigationAbstract {
|
|
this.b = world;
|
|
this.p = entityinsentient.getAttributeInstance(GenericAttributes.FOLLOW_RANGE);
|
|
this.r = this.a();
|
|
+ setWorld(); // Paper
|
|
}
|
|
|
|
public BlockPosition i() {
|
|
@@ -174,6 +176,7 @@ public abstract class NavigationAbstract {
|
|
}
|
|
|
|
public void d() {
|
|
+ setWorld(); // Paper
|
|
++this.e;
|
|
if (this.m) {
|
|
this.l();
|
|
diff --git a/src/main/java/net/minecraft/server/Pathfinder.java b/src/main/java/net/minecraft/server/Pathfinder.java
|
|
index 3085338f0..89d51d471 100644
|
|
--- a/src/main/java/net/minecraft/server/Pathfinder.java
|
|
+++ b/src/main/java/net/minecraft/server/Pathfinder.java
|
|
@@ -9,7 +9,7 @@ public class Pathfinder {
|
|
private final Path a = new Path();
|
|
private final Set<PathPoint> 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 36d7e1d96..d722c8513 100644
|
|
--- a/src/main/java/net/minecraft/server/PathfinderAbstract.java
|
|
+++ b/src/main/java/net/minecraft/server/PathfinderAbstract.java
|
|
@@ -4,6 +4,7 @@ public abstract class PathfinderAbstract {
|
|
|
|
protected IBlockAccess a;
|
|
protected EntityInsentient b;
|
|
+ public World world; // Paper
|
|
protected final IntHashMap<PathPoint> 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 eec891647..e45bdb581 100644
|
|
--- a/src/main/java/net/minecraft/server/PathfinderNormal.java
|
|
+++ b/src/main/java/net/minecraft/server/PathfinderNormal.java
|
|
@@ -327,7 +327,8 @@ public class PathfinderNormal extends PathfinderAbstract {
|
|
PathType pathtype = this.b(iblockaccess, i, j, k);
|
|
|
|
if (pathtype == PathType.OPEN && j >= 1) {
|
|
- Block block = iblockaccess.getType(new BlockPosition(i, j - 1, k)).getBlock();
|
|
+ Block block = world.getBlockIfLoaded(new BlockPosition(i, j - 1, k)); // Paper
|
|
+ if (block == null) return PathType.BLOCKED; // Paper
|
|
PathType pathtype1 = this.b(iblockaccess, i, j - 1, k);
|
|
|
|
pathtype = pathtype1 != PathType.WALKABLE && pathtype1 != PathType.OPEN && pathtype1 != PathType.WATER && pathtype1 != PathType.LAVA ? PathType.WALKABLE : PathType.OPEN;
|
|
@@ -353,9 +354,10 @@ 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_pooledblockposition.c(l + i, j, i1 + k)).getBlock();
|
|
+ Block block = world.getBlockIfLoaded(blockposition_pooledblockposition.c(l + i, j, i1 + k)); // Paper
|
|
|
|
- if (block == Blocks.CACTUS) {
|
|
+ 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;
|
|
@@ -387,7 +389,8 @@ public class PathfinderNormal extends PathfinderAbstract {
|
|
|
|
protected PathType b(IBlockAccess iblockaccess, int i, int j, int k) {
|
|
BlockPosition blockposition = new BlockPosition(i, j, 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();
|
|
|
|
--
|
|
2.21.0
|
|
|