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 bc81649b09c39188697b8851abedafca0dde9d99..d41c0e4474d057c7b13427bfd896c50f24232615 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -252,6 +252,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"); @@ -295,39 +301,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); - - for (int l = 0; l < 4; ++l) { - if (k == this.lastChunkPos[l] && this.lastChunkStatus[l] == ChunkStatus.FULL) { - ChunkAccess ichunkaccess = this.lastChunk[l]; - - return ichunkaccess instanceof LevelChunk ? (LevelChunk) ichunkaccess : null; - } - } - - ChunkHolder playerchunk = this.getVisibleChunkIfPresent(k); - - if (playerchunk == null) { - return null; - } else { - ChunkResult chunkresult = (ChunkResult) playerchunk.getFutureIfPresent(ChunkStatus.FULL).getNow(null); // CraftBukkit - decompile error - - if (chunkresult == null) { - return null; - } else { - ChunkAccess ichunkaccess1 = (ChunkAccess) chunkresult.orElse(null); // CraftBukkit - decompile error - - if (ichunkaccess1 != null) { - this.storeInCache(k, ichunkaccess1, ChunkStatus.FULL); - if (ichunkaccess1 instanceof LevelChunk) { - return (LevelChunk) ichunkaccess1; - } - } - - return null; - } - } + return this.getChunkAtIfLoadedMainThread(chunkX, chunkZ); // Paper - Perf: Optimise getChunkAt calls for loaded chunks } }