Add RegionisedServerInitEvent

This event allows plugins to perform synchronous operations before
any region will tick. Plugins will not have to worry about the
possibility of a region ticking in parallel while listening
to the event.
This commit is contained in:
Spottedleaf 2023-03-07 13:06:11 -08:00
parent f86bc13d22
commit 2ccfc8efc0
2 changed files with 48 additions and 2 deletions

View File

@ -0,0 +1,42 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
Date: Tue, 7 Mar 2023 12:58:48 -0800
Subject: [PATCH] Add RegionisedServerInitEvent
This event allows plugins to perform synchronous operations before
any region will tick. Plugins will not have to worry about the
possibility of a region ticking in parallel while listening
to the event.
diff --git a/src/main/java/io/papermc/paper/threadedregions/RegionisedServerInitEvent.java b/src/main/java/io/papermc/paper/threadedregions/RegionisedServerInitEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ffadb7c54087b79cdf7ebe11367b9d5884536e6
--- /dev/null
+++ b/src/main/java/io/papermc/paper/threadedregions/RegionisedServerInitEvent.java
@@ -0,0 +1,26 @@
+package io.papermc.paper.threadedregions;
+
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.server.ServerEvent;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * This event is called after the server is initialised but <b>before</b> the server begins ticking regions in parallel.
+ * Plugins may use this as a hook to run post initialisation logic without worrying about the possibility that
+ * regions are ticking in parallel.
+ */
+public class RegionisedServerInitEvent extends ServerEvent {
+
+ private static final HandlerList handlers = new HandlerList();
+
+ @NotNull
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+}

View File

@ -4193,10 +4193,10 @@ index 0000000000000000000000000000000000000000..3549e5f3359f38b207e189d895954420
+}
diff --git a/src/main/java/io/papermc/paper/threadedregions/RegionisedServer.java b/src/main/java/io/papermc/paper/threadedregions/RegionisedServer.java
new file mode 100644
index 0000000000000000000000000000000000000000..269c051e20cd07e692c624a873e4ee2b5ae5589a
index 0000000000000000000000000000000000000000..99c258c113cd4257e54f795e09d6d8f3aa2f4e33
--- /dev/null
+++ b/src/main/java/io/papermc/paper/threadedregions/RegionisedServer.java
@@ -0,0 +1,366 @@
@@ -0,0 +1,370 @@
+package io.papermc.paper.threadedregions;
+
+import ca.spottedleaf.concurrentutil.collection.MultiThreadedQueue;
@ -4263,6 +4263,10 @@ index 0000000000000000000000000000000000000000..269c051e20cd07e692c624a873e4ee2b
+ }
+
+ public void init() {
+ // call init event _before_ scheduling anything
+ new RegionisedServerInitEvent().callEvent();
+
+ // now we can schedule
+ this.tickHandle.setInitialStart(System.nanoTime() + TickRegionScheduler.TIME_BETWEEN_TICKS);
+ TickRegions.getScheduler().scheduleRegion(this.tickHandle);
+ TickRegions.getScheduler().init();