mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-26 02:47:44 +01:00
7e8ae207bd
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: e99c9444 Add Plugin Chunk Ticket API 6a235f06 Fix incorrect nullability annotations for PlayerJoinEvent's join message CraftBukkit Changes:5f889388
Tweak build expiration to 7 days572c02b0
MC-155077, SPIGOT-5113: EntityTracker desync7ad3a1f4
SPIGOT-5146: BlockDataMeta does not work60860983
SPIGOT-5155: Setting EntityExplodeEvent yield to 0 still causes blocks to drop087a2cf4
Print number of force loaded chunks per plugin in crash reports07b5b06d
Add Plugin Chunk Ticket API7ffb2a27
SPIGOT-5149: resetRecipes does nothinga2275f19
SPIGOT-5141: World.generateTree() causes ClassCastException with huge mushrooms31d4a777
SPIGOT-5142: Ignore invalid firework effects Spigot Changes: 5e4e7f32 BUILDTOOLS-471: Rebuild patches 6e944739 SPIGOT-5159: Raider activation range overridden by Monster range
64 lines
2.5 KiB
Diff
64 lines
2.5 KiB
Diff
From b96f6c349b21a28bfa6e27696bcde0cbef8cfc32 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 d792f55fc..b1ce7e095 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;
|
|
@@ -2241,6 +2242,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.22.0
|
|
|