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 035c33b1e1be4f41e5cbe09bf6c3abd617258cad..097a333487d646c773349cde3cd08026986fd038 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -181,6 +181,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 = this.level.getProfiler(); gameprofilerfiller.incrementCounter("getChunk"); @@ -224,33 +230,7 @@ public class ServerChunkCache extends ChunkSource { if (Thread.currentThread() != this.mainThread) { return null; } else { - this.level.getProfiler().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 } }