geforkt von Mirrors/Paper
4104545b11
"It was from a different time before books were as jank as they are now. As time has gone on they've only proven to be worse and worse."
67 Zeilen
2.9 KiB
Diff
67 Zeilen
2.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
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 26f99965e63d36ce4b8cd0482ae21b0c37994caa..c849ded5448112289a3c37f05dc49fadbf619f81 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
@@ -451,6 +451,12 @@ public class ServerChunkCache extends ChunkSource {
|
|
return this.getChunk(x, z, leastStatus, create);
|
|
}, this.mainThreadProcessor).join();
|
|
} else {
|
|
+ // Paper start - optimise for loaded chunks
|
|
+ LevelChunk ifLoaded = this.getChunkAtIfLoadedMainThread(x, z);
|
|
+ if (ifLoaded != null) {
|
|
+ return ifLoaded;
|
|
+ }
|
|
+ // Paper end
|
|
ProfilerFiller gameprofilerfiller = this.level.getProfiler();
|
|
|
|
gameprofilerfiller.incrementCounter("getChunk");
|
|
@@ -502,39 +508,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 {
|
|
- Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure> either = (Either) playerchunk.getFutureIfPresent(ChunkStatus.FULL).getNow(null); // CraftBukkit - decompile error
|
|
-
|
|
- if (either == null) {
|
|
- return null;
|
|
- } else {
|
|
- ChunkAccess ichunkaccess1 = (ChunkAccess) either.left().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 - optimise for loaded chunks
|
|
}
|
|
}
|
|
|