mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-19 15:09:25 +00:00
45 lines
2.3 KiB
Diff
45 lines
2.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Thu, 5 Jun 2025 08:16:25 -0700
|
|
Subject: [PATCH] Paper: Optimise CraftWorld#getLoadedChunks
|
|
|
|
Original license: GPLv3
|
|
Original project: https://github.com/PaperMC/Paper
|
|
|
|
https://github.com/PaperMC/Paper/commit/24cd24c8cc0df4bea0784e6919c9ba8f1852d46e
|
|
|
|
We can use the existing full chunk map so that we do not need
|
|
to iterate over all ChunkHolders. Additionally, do not use streams
|
|
to do the iteration either.
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index bf87e5dcda7deb8f9c36a3f6b64285a97e48477f..c10390c1bdc7b8ee59dbb5ddc145315654405cbc 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -421,8 +421,23 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public Chunk[] getLoadedChunks() {
|
|
- List<ChunkHolder> chunks = ca.spottedleaf.moonrise.common.PlatformHooks.get().getVisibleChunkHolders(this.world); // Paper
|
|
- return chunks.stream().map(ChunkHolder::getFullChunkNow).filter(Objects::nonNull).map(CraftChunk::new).toArray(Chunk[]::new);
|
|
+ // Paper start - Optimise CraftWorld#getLoadedChunks
|
|
+ net.minecraft.server.level.ServerChunkCache serverChunkCache = this.getHandle().chunkSource;
|
|
+ ca.spottedleaf.moonrise.common.list.ReferenceList<Chunk> chunks = new ca.spottedleaf.moonrise.common.list.ReferenceList<>(new Chunk[serverChunkCache.fullChunks.size()]);
|
|
+
|
|
+ for (java.util.PrimitiveIterator.OfLong iterator = serverChunkCache.fullChunks.keyIterator(); iterator.hasNext();) {
|
|
+ long chunk = iterator.nextLong();
|
|
+ chunks.add(new CraftChunk(this.world, ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(chunk), ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(chunk)));
|
|
+ }
|
|
+
|
|
+ Chunk[] raw = chunks.getRawDataUnchecked();
|
|
+ int size = chunks.size();
|
|
+ if (raw.length == size) {
|
|
+ // always true when on main
|
|
+ return raw;
|
|
+ }
|
|
+ return java.util.Arrays.copyOf(raw, size);
|
|
+ // Paper end - Optimise CraftWorld#getLoadedChunks
|
|
}
|
|
|
|
@Override
|