mirror of
https://github.com/SparklyPower/SparklyPaper.git
synced 2025-12-24 01:19:30 +00:00
69 lines
4.7 KiB
Diff
69 lines
4.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MrPowerGamerBR <git@mrpowergamerbr.com>
|
|
Date: Wed, 22 Nov 2023 11:07:07 -0300
|
|
Subject: [PATCH] Cache coordinate key used for nearby players when ticking
|
|
chunks
|
|
|
|
The "getChunkKey(...)" call is a bit expensive, using 0.24% of CPU time with 19k chunks loaded
|
|
|
|
So instead of paying the price on each tick, we pay the price when the chunk is loaded
|
|
|
|
Which, if you think about it, is actually better, since we tick chunks more than we load chunks
|
|
|
|
UNAPPLIED REASON: Requires "Optimise-chunk-tick-iteration" patch
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/util/player/NearbyPlayers.java b/src/main/java/io/papermc/paper/util/player/NearbyPlayers.java
|
|
index f164256d59b761264876ca0c85f812d101bfd5de..10465a33d90a1e43b9dbd7764c895dd39ef11b1a 100644
|
|
--- a/src/main/java/io/papermc/paper/util/player/NearbyPlayers.java
|
|
+++ b/src/main/java/io/papermc/paper/util/player/NearbyPlayers.java
|
|
@@ -106,6 +106,14 @@ public final class NearbyPlayers {
|
|
return chunk == null ? null : chunk.players[type.ordinal()];
|
|
}
|
|
|
|
+ // SparklyPaper start - cache coordinate key used for nearby players
|
|
+ public ReferenceList<ServerPlayer> getPlayers(final long nearbyPlayersCoordinateKey, final NearbyMapType type) {
|
|
+ final TrackedChunk chunk = this.byChunk.get(nearbyPlayersCoordinateKey);
|
|
+
|
|
+ return chunk == null ? null : chunk.players[type.ordinal()];
|
|
+ }
|
|
+ // SparklyPaper end
|
|
+
|
|
public ReferenceList<ServerPlayer> getPlayersByChunk(final int chunkX, final int chunkZ, final NearbyMapType type) {
|
|
final TrackedChunk chunk = this.byChunk.get(CoordinateUtils.getChunkKey(chunkX, chunkZ));
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
index b99f50604bafecbc68835974c9ed0caa91911a40..07fa0b2c43f395a5d9a8f90d5b517e2eb39ce4ba 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
@@ -607,7 +607,7 @@ public class ServerChunkCache extends ChunkSource {
|
|
|
|
// Paper start - optimise chunk tick iteration
|
|
com.destroystokyo.paper.util.maplist.ReferenceList<ServerPlayer> playersNearby
|
|
- = nearbyPlayers.getPlayers(chunkcoordintpair, io.papermc.paper.util.player.NearbyPlayers.NearbyMapType.SPAWN_RANGE);
|
|
+ = nearbyPlayers.getPlayers(chunk1.nearbyPlayersCoordinateKey, io.papermc.paper.util.player.NearbyPlayers.NearbyMapType.SPAWN_RANGE); // nearbyPlayers.getPlayers(chunkcoordintpair, io.papermc.paper.util.player.NearbyPlayers.NearbyMapType.SPAWN_RANGE); // SparklyPaper - cache coordinate key used for nearby players
|
|
if (playersNearby == null) {
|
|
continue;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
|
|
index 1aac95b03a9e2e37c24f2a30bcb259c1424e1c78..1ac1af72a71bbf402f0d1633a4b8c9a408917d73 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
|
|
@@ -65,7 +65,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom
|
|
protected final ShortList[] postProcessing;
|
|
protected volatile boolean unsaved;
|
|
private volatile boolean isLightCorrect;
|
|
- protected final ChunkPos chunkPos; public final long coordinateKey; public final int locX; public final int locZ; // Paper - cache coordinate key
|
|
+ protected final ChunkPos chunkPos; public final long coordinateKey; public final long nearbyPlayersCoordinateKey; public final int locX; public final int locZ; // Paper - cache coordinate key // SparklyPaper - cache coordinate key used for nearby players
|
|
private long inhabitedTime;
|
|
/** @deprecated */
|
|
@Nullable
|
|
@@ -139,7 +139,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom
|
|
}
|
|
// Paper end - rewrite light engine
|
|
this.locX = pos.x; this.locZ = pos.z; // Paper - reduce need for field lookups
|
|
- this.chunkPos = pos; this.coordinateKey = ChunkPos.asLong(locX, locZ); // Paper - cache long key
|
|
+ this.chunkPos = pos; this.coordinateKey = ChunkPos.asLong(locX, locZ); this.nearbyPlayersCoordinateKey = io.papermc.paper.util.CoordinateUtils.getChunkKey(locX, locZ); // Paper - cache long key // SparklyPaper - cache coordinate key used for nearby players
|
|
this.upgradeData = upgradeData;
|
|
this.levelHeightAccessor = heightLimitView;
|
|
this.sections = new LevelChunkSection[heightLimitView.getSectionsCount()];
|