70ce6ce831
This makes it easier for downstream projects (forks) to replace the version fetching system with their own. It is as simple as implementing an interface and overriding the default implementation of org.bukkit.UnsafeValues#getVersionFetcher() It also makes it easier for us to organize things like the version history feature. Lastly I have updated the paper implementation to check against the site API rather than against jenkins.
64 Zeilen
2.5 KiB
Diff
64 Zeilen
2.5 KiB
Diff
From a435fc5184fe7389b693cffe4966ba92f758b737 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 2c6a42d92..63f953617 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -14,6 +14,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 net.minecraft.server.AxisAlignedBB;
|
|
import net.minecraft.server.BiomeBase;
|
|
@@ -2117,6 +2118,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
|
|
private final Spigot spigot = new Spigot()
|
|
{
|
|
--
|
|
2.21.0
|
|
|