eee1a019f9
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 CraftBukkit Changes: 2012f1e0 SPIGOT-5269: Item attribute modifiers don't persist their order 7a806a3a SPIGOT-5270: Call BlockSpreadEvent when bamboo saplings grow Spigot Changes: 798ea6ab Add async catcher to World#save
63 lines
2.5 KiB
Diff
63 lines
2.5 KiB
Diff
From 34e683e36fe14ee82ad3a444ffadd17470462f5f Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Mon, 6 May 2019 12:29:24 -0700
|
|
Subject: [PATCH] Async Chunk placeholder
|
|
|
|
Until we figure out Mojang's ticket system.
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index 91b65fde0..afdb6956b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -18,6 +18,7 @@ import java.util.Objects;
|
|
import java.util.Random;
|
|
import java.util.Set;
|
|
import java.util.UUID;
|
|
+import java.util.concurrent.CompletableFuture;
|
|
import java.util.function.Predicate;
|
|
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
|
|
import it.unimi.dsi.fastutil.objects.ObjectSortedSet;
|
|
@@ -2257,6 +2258,40 @@ public class CraftWorld implements World {
|
|
return (nearest == null) ? null : new Location(this, nearest.getX(), nearest.getY(), nearest.getZ());
|
|
}
|
|
|
|
+ // Paper start
|
|
+ private Chunk getChunkAtGen(int x, int z, boolean gen) {
|
|
+ // copied from loadChunk()
|
|
+ // this function is identical except we do not add a plugin ticket
|
|
+ IChunkAccess chunk = world.getChunkProvider().getChunkAt(x, z, gen || isChunkGenerated(x, z) ? ChunkStatus.FULL : ChunkStatus.EMPTY, true);
|
|
+
|
|
+ // If generate = false, but the chunk already exists, we will get this back.
|
|
+ if (chunk instanceof ProtoChunkExtension) {
|
|
+ // We then cycle through again to get the full chunk immediately, rather than after the ticket addition
|
|
+ chunk = world.getChunkProvider().getChunkAt(x, z, ChunkStatus.FULL, true);
|
|
+ }
|
|
+
|
|
+ if (chunk instanceof net.minecraft.server.Chunk) {
|
|
+ return ((net.minecraft.server.Chunk)chunk).bukkitChunk;
|
|
+ }
|
|
+
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public CompletableFuture<Chunk> getChunkAtAsync(int x, int z, boolean gen) {
|
|
+ // TODO placeholder
|
|
+ if (Bukkit.isPrimaryThread()) {
|
|
+ return CompletableFuture.completedFuture(getChunkAtGen(x, z, gen));
|
|
+ } else {
|
|
+ CompletableFuture<Chunk> ret = new CompletableFuture<>();
|
|
+ net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> {
|
|
+ ret.complete(getChunkAtGen(x, z, gen));
|
|
+ });
|
|
+ return ret;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
// Spigot start
|
|
@Override
|
|
public int getViewDistance() {
|
|
--
|
|
2.22.0
|
|
|