From 2ccfc8efc0fada73b0c35fc069d454749f3328d0 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Tue, 7 Mar 2023 13:06:11 -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. --- .../0004-Add-RegionisedServerInitEvent.patch | 42 +++++++++++++++++++ patches/server/0004-Threaded-Regions.patch | 8 +++- 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 patches/api/0004-Add-RegionisedServerInitEvent.patch diff --git a/patches/api/0004-Add-RegionisedServerInitEvent.patch b/patches/api/0004-Add-RegionisedServerInitEvent.patch new file mode 100644 index 0000000..aace997 --- /dev/null +++ b/patches/api/0004-Add-RegionisedServerInitEvent.patch @@ -0,0 +1,42 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Spottedleaf +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 before 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; ++ } ++} diff --git a/patches/server/0004-Threaded-Regions.patch b/patches/server/0004-Threaded-Regions.patch index 5fe427a..2a5967b 100644 --- a/patches/server/0004-Threaded-Regions.patch +++ b/patches/server/0004-Threaded-Regions.patch @@ -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();