Files
Purpur/patches/server/0259-Dont-eat-blocks-in-non-ticking-chunks.patch
BillyGalbreath a21f907ced Updated Upstream (Paper & Pufferfish)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paperr@41263d9 [ci skip] Update paperweight to 1.3.4
PaperMC/Paperr@3109dd8 Updated Upstream (Bukkit/CraftBukkit) (#7428)
PaperMC/Paperr@17eb884 Use a CHM for StructureTemplate.Pallete cache
PaperMC/Paperr@f79c0da Updated Upstream (Bukkit/CraftBukkit)
PaperMC/Paperr@2121aed Rebuild patches

Pufferfish Changes:
pufferfish-gg/Pufferfishr@9aa81a5 Update Upstream (Paper)
pufferfish-gg/Pufferfishr@809bd9f Update Upstream (Paper)
pufferfish-gg/Pufferfishr@f053fd3 Update Upstream (Paper)
pufferfish-gg/Pufferfishr@5bf8730 Update Upstream (Paper)
pufferfish-gg/Pufferfishr@c4a780f Update Upstream (Paper)
pufferfish-gg/Pufferfishr@99a590b Fix lightning
pufferfish-gg/Pufferfishr@3e75ff0 Updated Upstream (Paper)
pufferfish-gg/Pufferfishr@110966e Updated Upstream (Paper)
pufferfish-gg/Pufferfishr@b6b58c4 Update Upstream (Paper misc-perf branch)
2022-02-01 07:49:14 -06:00

37 lines
2.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@Gmail.com>
Date: Sat, 15 Jan 2022 06:23:04 -0600
Subject: [PATCH] Dont eat blocks in non ticking chunks
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 5ce3feae48e97eaa64798a401e399adc3c8f57f8..ef34a8a6cf82202f79a918b6f117ecbd6249f044 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1741,7 +1741,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
return this.anyPlayerCloseEnoughForSpawning(this.getUpdatingChunkIfPresent(chunkcoordintpair.toLong()), chunkcoordintpair, reducedRange);
}
- final boolean anyPlayerCloseEnoughForSpawning(ChunkHolder playerchunk, ChunkPos chunkcoordintpair, boolean reducedRange) {
+ public final boolean anyPlayerCloseEnoughForSpawning(ChunkHolder playerchunk, ChunkPos chunkcoordintpair, boolean reducedRange) { // Purpur - package -> public
// this function is so hot that removing the map lookup call can have an order of magnitude impact on its performance
// tested and confirmed via System.nanoTime()
com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> playersInRange = reducedRange ? playerchunk.playersInMobSpawnRange : playerchunk.playersInChunkTickRange;
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
index 8a4080a77bd5b73ac812e3ae67c6f21dcd270215..16e66ae7cf761fabb74a035e2fd8c28615365dc2 100644
--- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
@@ -32,6 +32,12 @@ public class EatBlockGoal extends Goal {
@Override
public boolean canUse() {
+ // Purpur start
+ net.minecraft.world.level.chunk.LevelChunk chunk = this.mob.level.getChunkIfLoaded(this.mob.blockPosition);
+ if (chunk == null || chunk.playerChunk == null || !((net.minecraft.server.level.ServerLevel) this.mob.level).getChunkSource().chunkMap.anyPlayerCloseEnoughForSpawning(chunk.playerChunk, this.mob.chunkPosition(), false)) {
+ return false;
+ }
+ // Purpur end
if (this.mob.getRandom().nextInt(this.mob.isBaby() ? 50 : 1000) != 0) {
return false;
} else {