Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-17 12:00:07 +01:00
7c8937d0c6
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
CraftBukkit Changes:
17ff1e04
SPIGOT-4483: Missing EntityInteractEvent call for zombies on eggs
114 Zeilen
5.4 KiB
Diff
114 Zeilen
5.4 KiB
Diff
From 9007c1a310edb90546c5a3ff3c7bced3f4fd6f54 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/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
|
index 4e8eb137a..479a84a25 100644
|
|
--- a/src/main/java/net/minecraft/server/Chunk.java
|
|
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
|
@@ -481,6 +481,7 @@ public class Chunk implements IChunkAccess {
|
|
}
|
|
}
|
|
|
|
+ public Fluid getFluid(BlockPosition blockposition) { return b(blockposition); } // Paper - OBFHELPER
|
|
public Fluid b(BlockPosition blockposition) {
|
|
return this.b(blockposition.getX(), blockposition.getY(), blockposition.getZ());
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java b/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
|
|
index 9c72848f1..d007d0387 100644
|
|
--- a/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
|
|
+++ b/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java
|
|
@@ -12,11 +12,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() {
|
|
@@ -99,7 +101,9 @@ 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()};
|
|
@@ -109,7 +113,7 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget {
|
|
for (int j = 0; j < i; ++j) {
|
|
BlockPosition blockposition1 = ablockposition1[j];
|
|
|
|
- if (iblockaccess.getType(blockposition1).getBlock() == this.f) {
|
|
+ if (world.getBlockIfLoaded(blockposition1) == this.f) { // Paper
|
|
return blockposition1;
|
|
}
|
|
}
|
|
@@ -119,7 +123,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();
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/RandomPositionGenerator.java b/src/main/java/net/minecraft/server/RandomPositionGenerator.java
|
|
index 800e0046a..bfa6c2eef 100644
|
|
--- a/src/main/java/net/minecraft/server/RandomPositionGenerator.java
|
|
+++ b/src/main/java/net/minecraft/server/RandomPositionGenerator.java
|
|
@@ -78,6 +78,7 @@ public class RandomPositionGenerator {
|
|
}
|
|
|
|
BlockPosition blockposition2 = new BlockPosition((double)j1 + entitycreature.locX, (double)k1 + entitycreature.locY, (double)l1 + entitycreature.locZ);
|
|
+ if (!entitycreature.world.isLoaded(blockposition2)) continue; // Paper
|
|
if ((!flag1 || entitycreature.f(blockposition2)) && navigationabstract.a(blockposition2)) {
|
|
if (!flag) {
|
|
blockposition2 = a(blockposition2, entitycreature);
|
|
@@ -141,6 +142,7 @@ public class RandomPositionGenerator {
|
|
}
|
|
|
|
private static boolean b(BlockPosition blockposition, EntityCreature entitycreature) {
|
|
- return entitycreature.world.b(blockposition).a(TagsFluid.WATER);
|
|
+ Fluid fluid = entitycreature.world.getFluidIfLoaded(blockposition); // Paper
|
|
+ return fluid != null && fluid.a(TagsFluid.WATER); // Paper
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index a5c655155..016d50d3c 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -763,6 +763,18 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
}
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public Fluid getFluidIfLoaded(BlockPosition blockposition) {
|
|
+ if (blockposition.isInvalidYLocation()) { // Paper
|
|
+ return getFluid(blockposition);
|
|
+ } else {
|
|
+ Chunk chunk = this.getChunkIfLoaded(blockposition);
|
|
+
|
|
+ return chunk != null ? chunk.getFluid(blockposition) : null;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+ public Fluid getFluid(BlockPosition blockposition) { return b(blockposition); } // Paper - OBFHELPER
|
|
public Fluid b(BlockPosition blockposition) {
|
|
if (blockposition.isInvalidYLocation()) { // Paper
|
|
return FluidTypes.a.i();
|
|
--
|
|
2.19.1
|
|
|