89d51d5f29
Because this exploit has been widely known for years and has not been fixed by Mojang, we decided that it was worth allowing people to toggle it on/off due to how easy it is to make it configurable. It should be noted that this decision does not promise all future exploits will be configurable.
32 Zeilen
1.6 KiB
Diff
32 Zeilen
1.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Sun, 20 Sep 2020 16:10:49 -0700
|
|
Subject: [PATCH] Make sure inlined getChunkAt has inlined logic for loaded
|
|
chunks
|
|
|
|
Tux did some profiling some time ago and showed that the
|
|
previous getChunkAt method which had inlined logic for loaded
|
|
chunks did get inlined, but the standard CPS.getChunkAt
|
|
method was not inlined.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
|
index 48e60e5ce01942fa5d30e043012e888989046cee..275c02d480cdf25ba0e735f4a43015ec0af238b3 100644
|
|
--- a/src/main/java/net/minecraft/world/level/Level.java
|
|
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
|
@@ -358,6 +358,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
|
|
|
@Override
|
|
public final LevelChunk getChunk(int chunkX, int chunkZ) { // Paper - final to help inline
|
|
+ // Paper start - Perf: make sure loaded chunks get the inlined variant of this function
|
|
+ net.minecraft.server.level.ServerChunkCache cps = ((ServerLevel)this).getChunkSource();
|
|
+ if (cps.mainThread == Thread.currentThread()) {
|
|
+ LevelChunk ifLoaded = cps.getChunkAtIfLoadedMainThread(chunkX, chunkZ);
|
|
+ if (ifLoaded != null) {
|
|
+ return ifLoaded;
|
|
+ }
|
|
+ }
|
|
+ // Paper end - Perf: make sure loaded chunks get the inlined variant of this function
|
|
return (LevelChunk) this.getChunk(chunkX, chunkZ, ChunkStatus.FULL, true); // Paper - avoid a method jump
|
|
}
|
|
|