geforkt von Mirrors/Paper
66cb880754
The patch does not implement Vanilla forceUpgrade behavior. Specifically, poi/entity conversion and regionfile recreation. The Vanilla force upgrader is also no longer broken by CB, so the bug fixes from this patch are not relevant anymore.
63 Zeilen
2.9 KiB
Diff
63 Zeilen
2.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Flo0 <flo.roma@web.de>
|
|
Date: Mon, 8 Apr 2024 16:43:16 +0200
|
|
Subject: [PATCH] API for checking sent chunks
|
|
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java
|
|
index ee58c67cb2bd78159cce19ec75f13dc6168a0e7a..149cfb0587299f72fcfddf395fb71b70438986c1 100644
|
|
--- a/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java
|
|
+++ b/src/main/java/io/papermc/paper/chunk/system/RegionizedPlayerChunkLoader.java
|
|
@@ -1048,6 +1048,11 @@ public class RegionizedPlayerChunkLoader {
|
|
|
|
// now all tickets should be removed, which is all of our external state
|
|
}
|
|
+
|
|
+ // For external checks
|
|
+ public it.unimi.dsi.fastutil.longs.LongOpenHashSet getSentChunksRaw() {
|
|
+ return this.sentChunks;
|
|
+ }
|
|
}
|
|
|
|
// TODO rebase into util patch
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 2d373be107a610522db9b3ce8ae446b848d92580..84ed5dc8c82e28aa93fa0440d90ddb44dc5f3d40 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -3446,6 +3446,35 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
}
|
|
// Paper end
|
|
|
|
+ // Paper start - Add chunk view API
|
|
+ @Override
|
|
+ public Set<java.lang.Long> getSentChunkKeys() {
|
|
+ org.spigotmc.AsyncCatcher.catchOp("accessing sent chunks");
|
|
+ return it.unimi.dsi.fastutil.longs.LongSets.unmodifiable(
|
|
+ this.getHandle().chunkLoader.getSentChunksRaw().clone()
|
|
+ );
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Set<org.bukkit.Chunk> getSentChunks() {
|
|
+ org.spigotmc.AsyncCatcher.catchOp("accessing sent chunks");
|
|
+ final it.unimi.dsi.fastutil.longs.LongOpenHashSet rawChunkKeys = this.getHandle().chunkLoader.getSentChunksRaw();
|
|
+ final it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<org.bukkit.Chunk> chunks = new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(rawChunkKeys.size());
|
|
+ final org.bukkit.World world = this.getWorld();
|
|
+
|
|
+ final it.unimi.dsi.fastutil.longs.LongIterator iter = this.getHandle().chunkLoader.getSentChunksRaw().longIterator();
|
|
+ while (iter.hasNext()) chunks.add(world.getChunkAt(iter.nextLong(), false));
|
|
+
|
|
+ return it.unimi.dsi.fastutil.objects.ObjectSets.unmodifiable(chunks);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isChunkSent(final long chunkKey) {
|
|
+ org.spigotmc.AsyncCatcher.catchOp("accessing sent chunks");
|
|
+ return this.getHandle().chunkLoader.getSentChunksRaw().contains(chunkKey);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public Player.Spigot spigot()
|
|
{
|
|
return this.spigot;
|