CraftBukkit removed their implementation that caused this issue, switching to Mojang's implementation which doesn't appear to share it. I already removed the important bit in the last upstream merge, this is just unused and unnecessary now. So we remove it.
47 lines
1.8 KiB
Diff
47 lines
1.8 KiB
Diff
From 580a3c1e39db0c716b97f47e00d39ebd145d9d1c Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Thu, 27 Aug 2015 01:15:02 -0400
|
|
Subject: [PATCH] Optimize Chunk Access
|
|
|
|
getting a loaded chunk is one of the most hottest pieces of code in the game.
|
|
getChunkAt is called for the same chunk multiple times in a row, often from getType();
|
|
|
|
Optimize this look up by using a Last Access cache.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
index 0ad57afba..b49f4e292 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
@@ -27,7 +27,27 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
public final Set<Long> unloadQueue = Sets.newHashSet();
|
|
public final ChunkGenerator chunkGenerator;
|
|
private final IChunkLoader chunkLoader;
|
|
- public final Long2ObjectMap<Chunk> chunks = new Long2ObjectOpenHashMap(8192);
|
|
+ // Paper start
|
|
+ protected Chunk lastChunkByPos = null;
|
|
+ public Long2ObjectOpenHashMap<Chunk> chunks = new Long2ObjectOpenHashMap<Chunk>(8192) {
|
|
+
|
|
+ @Override
|
|
+ public Chunk get(long key) {
|
|
+ if (lastChunkByPos != null && key == lastChunkByPos.chunkKey) {
|
|
+ return lastChunkByPos;
|
|
+ }
|
|
+ return lastChunkByPos = super.get(key);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Chunk remove(long key) {
|
|
+ if (lastChunkByPos != null && key == lastChunkByPos.chunkKey) {
|
|
+ lastChunkByPos = null;
|
|
+ }
|
|
+ return super.remove(key);
|
|
+ }
|
|
+ }; // CraftBukkit
|
|
+ // Paper end
|
|
public final WorldServer world;
|
|
|
|
public ChunkProviderServer(WorldServer worldserver, IChunkLoader ichunkloader, ChunkGenerator chunkgenerator) {
|
|
--
|
|
2.12.2.windows.2
|
|
|