mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
d10ea572de
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 39ce5d3a SPIGOT-4399: ItemMeta.equals broken with AttributeModifiers CraftBukkit Changes:1cf8b5dc
SPIGOT-4400: Populators running on existing chunks116cb9a1
SPIGOT-4399: Add attribute modifier equality test5ee1c18a
SPIGOT-4398: Set ASM7_EXPERIMENTAL flag
88 lines
No EOL
3.3 KiB
Diff
88 lines
No EOL
3.3 KiB
Diff
From 0000000000000000000000000000000000000000 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/ChunkMap.java b/src/main/java/net/minecraft/server/ChunkMap.java
|
|
index 4b8b77710b..df967ff07d 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkMap.java
|
|
@@ -0,0 +0,0 @@ public class ChunkMap extends Long2ObjectOpenHashMap<Chunk> {
|
|
|
|
public Chunk a(long i, Chunk chunk) {
|
|
chunk.world.timings.syncChunkLoadPostTimer.startTiming(); // Paper
|
|
+ lastChunkByPos = chunk; // Paper
|
|
Chunk chunk1 = (Chunk) super.put(i, chunk);
|
|
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i);
|
|
|
|
@@ -0,0 +0,0 @@ public class ChunkMap extends Long2ObjectOpenHashMap<Chunk> {
|
|
}
|
|
}
|
|
|
|
+ // Paper start
|
|
+ if (lastChunkByPos != null && i == lastChunkByPos.chunkKey) {
|
|
+ lastChunkByPos = null;
|
|
+ }
|
|
return chunk;
|
|
}
|
|
+ private Chunk lastChunkByPos = null;
|
|
+
|
|
+ @Override
|
|
+ public Chunk get(long l) {
|
|
+ if (lastChunkByPos != null && l == lastChunkByPos.chunkKey) {
|
|
+ return lastChunkByPos;
|
|
+ }
|
|
+ return lastChunkByPos = super.get(l);
|
|
+ }
|
|
+ // Paper end
|
|
|
|
public Chunk a(Object object) {
|
|
return this.a(((Long) object).longValue());
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
index d16fc452e3..2d10f4aa37 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
Chunk chunk;
|
|
|
|
synchronized (this.chunkLoader) {
|
|
- if (this.lastChunk != null && this.lastChunk.getPos().x == i && this.lastChunk.getPos().z == j) {
|
|
+ // Paper start - remove vanilla lastChunk, we do it more accurately
|
|
+ /* if (this.lastChunk != null && this.lastChunk.locX == i && this.lastChunk.locZ == j) {
|
|
return this.lastChunk;
|
|
- }
|
|
+ }*/ // Paper end
|
|
|
|
long k = ChunkCoordIntPair.a(i, j);
|
|
|
|
chunk = (Chunk) this.chunks.get(k);
|
|
if (chunk != null) {
|
|
- this.lastChunk = chunk;
|
|
+ //this.lastChunk = chunk; // Paper remove vanilla lastChunk
|
|
return chunk;
|
|
}
|
|
|
|
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
}
|
|
|
|
this.chunks.put(k, chunk);
|
|
- this.lastChunk = chunk;
|
|
+ //this.lastChunk = chunk; // Paper
|
|
}
|
|
|
|
this.asyncTaskHandler.postToMainThread(chunk::addEntities);
|
|
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
this.saveChunk(chunk, true); // Spigot
|
|
}
|
|
this.chunks.remove(chunk.chunkKey);
|
|
- this.lastChunk = null;
|
|
+ // this.lastChunk = null; // Paper
|
|
}
|
|
return true;
|
|
}
|
|
--
|