geforkt von Mirrors/Paper
b62dfa0bf9
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: 39ce5d3a SPIGOT-4399: ItemMeta.equals broken with AttributeModifiers CraftBukkit Changes:1cf8b5dc
SPIGOT-4400: Populators running on existing chunks116cb9a1
SPIGOT-4399: Add attribute modifier equality test5ee1c18a
SPIGOT-4398: Set ASM7_EXPERIMENTAL flag
126 Zeilen
7.0 KiB
Diff
126 Zeilen
7.0 KiB
Diff
From d4c08451b25b657274e3ad1b3a492338e6242f08 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
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..113fd9a50f 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() {
|
|
@@ -166,6 +168,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 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<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 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<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 64e0b08170..93f3d2e363 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().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 +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.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;
|
|
@@ -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.19.0
|
|
|