mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-06 18:50:51 +01:00
825b92807a
--- work/CraftBukkit Submodule work/CraftBukkit 1ec1b05e..368f4e99: > Increase outdated build delay to 3 weeks > SPIGOT-5249: Do not add data to empty loot table > SPIGOT-5257: Call EntityBreedEvent for foxes and set the child's spawn reason to BREEDING --- work/Spigot Submodule work/Spigot e5b1b5db..ea7e48b3: > Add string default for view distance, and API to retrieve per world
61 lines
No EOL
2.5 KiB
Diff
61 lines
No EOL
2.5 KiB
Diff
From 0000000000000000000000000000000000000000 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 5984e70c..4822687f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -0,0 +0,0 @@ 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;
|
|
@@ -0,0 +0,0 @@ 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() {
|
|
--
|