From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Sat, 25 Jan 2020 17:04:35 -0800 Subject: [PATCH] Optimise getChunkAt calls for loaded chunks bypass the need to get a player chunk, then get the either, then unwrap it... diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java index 5749698b0c9647295e0be6f7d532d39c18432539..758b874424b1fed90893132e5455a683b789ebf2 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -194,6 +194,12 @@ public class ServerChunkCache extends ChunkSource { return this.getChunk(x, z, leastStatus, create); }, this.mainThreadProcessor).join(); } else { + // Paper start - Perf: Optimise getChunkAt calls for loaded chunks + LevelChunk ifLoaded = this.getChunkAtIfLoadedMainThread(x, z); + if (ifLoaded != null) { + return ifLoaded; + } + // Paper end - Perf: Optimise getChunkAt calls for loaded chunks ProfilerFiller gameprofilerfiller = Profiler.get(); gameprofilerfiller.incrementCounter("getChunk"); @@ -233,33 +239,7 @@ public class ServerChunkCache extends ChunkSource { if (Thread.currentThread() != this.mainThread) { return null; } else { - Profiler.get().incrementCounter("getChunkNow"); - long k = ChunkPos.asLong(chunkX, chunkZ); - - ChunkAccess ichunkaccess; - - for (int l = 0; l < 4; ++l) { - if (k == this.lastChunkPos[l] && this.lastChunkStatus[l] == ChunkStatus.FULL) { - ichunkaccess = this.lastChunk[l]; - return ichunkaccess instanceof LevelChunk ? (LevelChunk) ichunkaccess : null; - } - } - - ChunkHolder playerchunk = this.getVisibleChunkIfPresent(k); - - if (playerchunk == null) { - return null; - } else { - ichunkaccess = playerchunk.getChunkIfPresent(ChunkStatus.FULL); - if (ichunkaccess != null) { - this.storeInCache(k, ichunkaccess, ChunkStatus.FULL); - if (ichunkaccess instanceof LevelChunk) { - return (LevelChunk) ichunkaccess; - } - } - - return null; - } + return this.getChunkAtIfLoadedMainThread(chunkX, chunkZ); // Paper - Perf: Optimise getChunkAt calls for loaded chunks } }