mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-28 19:22:50 +01:00
Prevent pathfinding and zombie AI from loading chunks
This commit is contained in:
parent
87d59fdab4
commit
c563327fa2
2 changed files with 134 additions and 0 deletions
|
@ -0,0 +1,79 @@
|
||||||
|
From 67fd8976c70a84758a635896026b931f58b32689 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/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java
|
||||||
|
index 64e0b08170..58aa6df0a1 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/PathfinderNormal.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/PathfinderNormal.java
|
||||||
|
@@ -7,6 +7,7 @@ import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
public class PathfinderNormal extends PathfinderAbstract {
|
||||||
|
protected float j;
|
||||||
|
+ private World world; // Paper
|
||||||
|
|
||||||
|
public PathfinderNormal() {
|
||||||
|
}
|
||||||
|
@@ -14,6 +15,7 @@ public class PathfinderNormal extends PathfinderAbstract {
|
||||||
|
public void a(IBlockAccess iblockaccess, EntityInsentient entityinsentient) {
|
||||||
|
super.a(iblockaccess, entityinsentient);
|
||||||
|
this.j = entityinsentient.a(PathType.WATER);
|
||||||
|
+ this.world = entityinsentient.world; // Paper
|
||||||
|
}
|
||||||
|
|
||||||
|
public void a() {
|
||||||
|
@@ -47,7 +49,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 +235,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 +306,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 +329,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 +347,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.18.0
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
From 1ca3b4fcfc301b5dbf685d5a5fcadb65fecc2e32 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aikar <aikar@aikar.co>
|
||||||
|
Date: Mon, 10 Sep 2018 23:56:36 -0400
|
||||||
|
Subject: [PATCH] Prevent Mob AI Rules from Loading Chunks
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java b/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
|
||||||
|
index b1661693cf..2cbb6c8f91 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
|
||||||
|
@@ -7,11 +7,13 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget {
|
||||||
|
private final Block f;
|
||||||
|
private final EntityInsentient g;
|
||||||
|
private int h;
|
||||||
|
+ private World world; // Paper
|
||||||
|
|
||||||
|
public PathfinderGoalRemoveBlock(Block block, EntityCreature entitycreature, double d0, int i) {
|
||||||
|
super(entitycreature, d0, 24, i);
|
||||||
|
this.f = block;
|
||||||
|
this.g = entitycreature;
|
||||||
|
+ this.world = entitycreature.world; // Paper
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean a() {
|
||||||
|
@@ -89,13 +91,15 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private BlockPosition a(BlockPosition blockposition, IBlockAccess iblockaccess) {
|
||||||
|
- if (iblockaccess.getType(blockposition).getBlock() == this.f) {
|
||||||
|
+ Block block = world.getBlockIfLoaded(blockposition); // Paper
|
||||||
|
+ if (block == null) return null; // Paper
|
||||||
|
+ if (block == this.f) { // Paper
|
||||||
|
return blockposition;
|
||||||
|
} else {
|
||||||
|
BlockPosition[] ablockposition = new BlockPosition[]{blockposition.down(), blockposition.west(), blockposition.east(), blockposition.north(), blockposition.south(), blockposition.down().down()};
|
||||||
|
|
||||||
|
for(BlockPosition blockposition1 : ablockposition) {
|
||||||
|
- if (iblockaccess.getType(blockposition1).getBlock() == this.f) {
|
||||||
|
+ if (world.getBlockIfLoaded(blockposition1) == this.f) { // Paper
|
||||||
|
return blockposition1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -105,7 +109,8 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean a(IWorldReader iworldreader, BlockPosition blockposition) {
|
||||||
|
- Block block = iworldreader.getType(blockposition).getBlock();
|
||||||
|
+ Block block = world.getBlockIfLoaded(blockposition); // Paper
|
||||||
|
+ if (block == null) return false; // Paper
|
||||||
|
return block == this.f && iworldreader.getType(blockposition.up()).isAir() && iworldreader.getType(blockposition.up(2)).isAir();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.18.0
|
||||||
|
|
Loading…
Reference in a new issue