mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-03 16:04:38 +01:00
8c5b837e05
Firstly, the old methods all routed to the CompletableFuture method. However, the CF method could not guarantee that if the caller was off-main that the future would be "completed" on-main. Since the callback methods used the CF one, this meant that the callback methods did not guarantee that the callbacks were to be called on the main thread. Now, all methods route to getChunkAtAsync(x, z, gen, urgent, cb) so that the methods with the callback are guaranteed to invoke the callback on the main thread. The CF behavior remains unchanged; it may still appear to complete on main if invoked off-main. Secondly, remove the scheduleOnMain invocation in the async chunk completion. This unnecessarily delays the callback by 1 tick. Thirdly, add getChunksAtAsync(minX, minZ, maxX, maxZ, ...) which will load chunks within an area. This method is provided as a helper as keeping all chunks loaded within an area can be complicated to implement for plugins (due to the lacking ticket API), and is already implemented internally anyways. Fourthly, remove the ticket addition that occured with getChunkAt and getChunkAtAsync. The ticket addition may delay the unloading of the chunk unnecessarily. It also fixes a very rare timing bug where the future/callback would be completed after the chunk unloads.
63 lines
1.9 KiB
Diff
63 lines
1.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Fri, 4 Mar 2022 09:46:40 -0800
|
|
Subject: [PATCH] More Raid API
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/Raid.java b/src/main/java/org/bukkit/Raid.java
|
|
index 983a8c20a06d2b509602b27f49c090598b8ecc42..fa98599e3eee37bf68f0e9813497c718f457485c 100644
|
|
--- a/src/main/java/org/bukkit/Raid.java
|
|
+++ b/src/main/java/org/bukkit/Raid.java
|
|
@@ -9,7 +9,7 @@ import org.jetbrains.annotations.NotNull;
|
|
/**
|
|
* Represents a raid event.
|
|
*/
|
|
-public interface Raid {
|
|
+public interface Raid extends org.bukkit.persistence.PersistentDataHolder { // Paper
|
|
|
|
/**
|
|
* Get whether this raid started.
|
|
@@ -131,4 +131,20 @@ public interface Raid {
|
|
*/
|
|
STOPPED;
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ /**
|
|
+ * Gets the id of this raid.
|
|
+ *
|
|
+ * @return the raid id
|
|
+ */
|
|
+ int getId();
|
|
+
|
|
+ /**
|
|
+ * Get the boss bar to be displayed for this raid.
|
|
+ *
|
|
+ * @return the boss bar
|
|
+ */
|
|
+ org.bukkit.boss.@NotNull BossBar getBossBar();
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
|
|
index ba57efc267e78d28c67648b0e994ffca3b8a8823..bb70a797ea5f0db5bd9f2397944687530b0d1cf3 100644
|
|
--- a/src/main/java/org/bukkit/World.java
|
|
+++ b/src/main/java/org/bukkit/World.java
|
|
@@ -4164,6 +4164,17 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
|
|
@Nullable
|
|
public Raid locateNearestRaid(@NotNull Location location, int radius);
|
|
|
|
+ // Paper start - more Raid API
|
|
+ /**
|
|
+ * Get a raid with the specific id from {@link Raid#getId}
|
|
+ * from this world.
|
|
+ *
|
|
+ * @param id the id of the raid
|
|
+ * @return the raid or null if none with that id
|
|
+ */
|
|
+ @Nullable Raid getRaid(int id);
|
|
+ // Paper end - more Raid API
|
|
+
|
|
/**
|
|
* Gets all raids that are going on over this world.
|
|
*
|