Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-15 20:40:07 +01:00
e2418a9945
Accidently merged 1 pathfinding patch into a light patch instead of the other pathfinding page. Fixed that. Hand editting patch master race
139 Zeilen
7.6 KiB
Diff
139 Zeilen
7.6 KiB
Diff
From d8f79a7c0c289ac8d6ca3fd0e9c9be164ea452c5 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 ff740bc1a7..78adbf9062 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 a8b070ed32..7a4bc0fcc3 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 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
|
|
|