3496f2d7e4
Developers!: You will need to clean up your work/Minecraft/1.13.2 folder for this 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 Bukkit Changes: b850a822 SPIGOT-4526: Add conversion time API for Zombie & subclasses CraftBukkit Changes: 38cf676e SPIGOT-4534: CreatureSpawnEvent not being called for CHUNK_GEN b446cb5d SPIGOT-4527: Fix sponges with waterlogged blocks 6ec8ea5c SPIGOT-4526: Add conversion time API for Zombie & subclasses c64fe508 Mappings Update a3c2ec03 Fix missing ServerListPingEvent call for legacy pings Spigot Changes: 1dc156ce Rebuild patches 140f654d Mappings Update
138 lines
7.6 KiB
Diff
138 lines
7.6 KiB
Diff
From 371d310b56332215506709abf6289ee0529dbb57 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 546c79cd8..25caf7ef9 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkCache.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkCache.java
|
|
@@ -21,7 +21,7 @@ public class ChunkCache implements IIBlockAccess {
|
|
|
|
for(int l = this.a; l <= j; ++l) {
|
|
for(int 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 53f1c25d2..26156d6cf 100644
|
|
--- a/src/main/java/net/minecraft/server/NavigationAbstract.java
|
|
+++ b/src/main/java/net/minecraft/server/NavigationAbstract.java
|
|
@@ -21,13 +21,15 @@ 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.a = entityinsentient;
|
|
this.b = world;
|
|
this.p = entityinsentient.getAttributeInstance(GenericAttributes.FOLLOW_RANGE);
|
|
this.r = this.a();
|
|
+ setWorld(); // Paper
|
|
}
|
|
|
|
public BlockPosition i() {
|
|
@@ -164,6 +166,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 a12fdceac..1881dea66 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<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 ba7fe359f..671628014 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<PathPoint> c = new IntHashMap<PathPoint>();
|
|
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 2e82c7c48..34b29652b 100644
|
|
--- a/src/main/java/net/minecraft/server/PathfinderNormal.java
|
|
+++ b/src/main/java/net/minecraft/server/PathfinderNormal.java
|
|
@@ -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) {
|
|
- HashSet hashset = Sets.newHashSet();
|
|
+ HashSet<BlockPosition> hashset = Sets.newHashSet(); // Paper - decompile fix
|
|
hashset.add(new BlockPosition(this.b.getBoundingBox().minX, (double)i, this.b.getBoundingBox().minZ));
|
|
hashset.add(new BlockPosition(this.b.getBoundingBox().minX, (double)i, this.b.getBoundingBox().maxZ));
|
|
hashset.add(new BlockPosition(this.b.getBoundingBox().maxX, (double)i, this.b.getBoundingBox().minZ));
|
|
@@ -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) {
|
|
- EnumSet enumset = EnumSet.noneOf(PathType.class);
|
|
+ EnumSet<PathType> enumset = EnumSet.noneOf(PathType.class); // Paper - decompile fix
|
|
PathType pathtype = PathType.BLOCKED;
|
|
double d0 = (double)entityinsentient.width / 2.0D;
|
|
BlockPosition blockposition = new BlockPosition(entityinsentient);
|
|
@@ -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) {
|
|
- 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) {
|
|
@@ -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) {
|
|
- Block block = iblockaccess.getType(blockposition$b.c(l + i, jx, i1 + k)).getBlock();
|
|
- if (block == Blocks.CACTUS) {
|
|
+ Block block = world.getBlockIfLoaded(blockposition$b.c(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;
|
|
@@ -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);
|
|
- 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()) {
|
|
--
|
|
2.20.0
|
|
|