mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-13 15:38:12 +02:00
459987d69f
improved the water code so that immunity wont trigger if the entity has the water pathfinder system active, so this improves support for all entities that know how to behave in water. Merged 2 EAR patches together, and removed an MCUtil method that doesnt have a purpose anymore
140 lines
7.8 KiB
Diff
140 lines
7.8 KiB
Diff
From 19bc80177637e62f6abf6e8422fb97663e2bd524 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 light checks
|
|
|
|
Should only happen for blocks on the edge that uses neighbors light level
|
|
(certain blocks). In that case, there will be 3-4 other neighbors to get a light level from.
|
|
|
|
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()) {
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 207f53a9c3..b8fcfb6092 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -663,6 +663,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
if (blockposition.getY() >= 256) {
|
|
blockposition = new BlockPosition(blockposition.getX(), 255, blockposition.getZ());
|
|
}
|
|
+ if (!this.isLoaded(blockposition)) return 0; // Paper
|
|
|
|
return this.getChunkAtWorldCoords(blockposition).a(blockposition, i);
|
|
}
|
|
--
|
|
2.19.0
|
|
|