diff --git a/leaf-server/paper-patches/features/0030-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/paper-patches/features/0030-SparklyPaper-Parallel-world-ticking.patch index 32ce99bb..19025c6e 100644 --- a/leaf-server/paper-patches/features/0030-SparklyPaper-Parallel-world-ticking.patch +++ b/leaf-server/paper-patches/features/0030-SparklyPaper-Parallel-world-ticking.patch @@ -237,23 +237,6 @@ index a4aa2615823d77920ff55b8aa0bcc27a54b8c3e1..2fb65ce228da94eb7d9364ee0f945823 } + // SparklyPaper end - parallel world ticking } -diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java -index 548fcd9646dee0c40b6ba9b3dafb9ca157dfe324..d7af94890bfccd6ff665d920cecfa1e5be626aa4 100644 ---- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java -+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java -@@ -40,6 +40,12 @@ class PaperEventManager { - if (listeners.length == 0) return; - // Leaf end - Skip event if no listeners - if (event.isAsynchronous() && this.server.isPrimaryThread()) { -+ // Leaf start - Parallel world ticking -+ if (org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.enabled && org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.runAsyncTasksSync) { -+ org.dreeam.leaf.async.world.PWTEventScheduler.getScheduler().scheduleTask(event::callEvent); -+ return; -+ } -+ // Leaf end - Parallel world ticking - throw new IllegalStateException(event.getEventName() + " may only be triggered asynchronously."); - } else if (!event.isAsynchronous() && !this.server.isPrimaryThread() && !this.server.isStopping()) { - // Leaf start - Multithreaded tracker diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index af33cab59932f4ec135caf94dc5828930833daf6..caa92e48d031cb54950e6613a82f407d7ed2455a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -1599,47 +1582,3 @@ index c2552c3706831f7012b5b449fa43c7d5990056a4..4e8a1d01a6c0afef92ae56cc4909af06 if (!event.callEvent()) { return itemStack; } -diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java -index e4e2e42d0ca25df7fe9f2dd4275610e45fcb2c84..e7c6b2ab5f2c68f3319ccd52785c8d3488a2eef7 100644 ---- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java -+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java -@@ -19,11 +19,39 @@ class CraftAsyncTask extends CraftTask { - - @Override - public boolean isSync() { -+ // Leaf start - Parallel world ticking -+ // Return true if we should run this task synchronously when parallel world ticking is enabled and runAsyncTasksSync is true -+ if (org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.enabled && -+ org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.runAsyncTasksSync) { -+ return true; -+ } -+ // Leaf end - Parallel world ticking - return false; - } - - @Override - public void run() { -+ // Leaf start - Parallel world ticking -+ // If parallel world ticking is enabled and we're configured to run async tasks sync, -+ // execute the task as if it were a sync task (directly on the main thread) -+ if (org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.enabled && -+ org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.runAsyncTasksSync) { -+ try { -+ super.run(); -+ } catch (final Throwable t) { -+ this.getOwner().getLogger().log( -+ Level.WARNING, -+ String.format( -+ "Plugin %s generated an exception while executing task %s (forced sync mode)", -+ this.getOwner().getDescription().getFullName(), -+ this.getTaskId()), -+ t); -+ } -+ return; -+ } -+ // Leaf end - Parallel world ticking -+ -+ // Original async implementation - final Thread thread = Thread.currentThread(); - // Paper start - name threads according to running plugin - final String nameBefore = thread.getName(); diff --git a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/async/SparklyPaperParallelWorldTicking.java b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/async/SparklyPaperParallelWorldTicking.java index 304e234f..1d89ae82 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/async/SparklyPaperParallelWorldTicking.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/async/SparklyPaperParallelWorldTicking.java @@ -17,7 +17,7 @@ public class SparklyPaperParallelWorldTicking extends ConfigModules { public static boolean logContainerCreationStacktraces = false; public static boolean disableHardThrow = false; @Deprecated - public static boolean runAsyncTasksSync = false; + public static Boolean runAsyncTasksSync; // STRICT, BUFFERED, DISABLED public static String asyncUnsafeReadHandling = "BUFFERED"; @@ -52,15 +52,14 @@ public class SparklyPaperParallelWorldTicking extends ConfigModules { asyncUnsafeReadHandling = "DISABLED"; } - runAsyncTasksSync = config.getBoolean(getBasePath() + ".run-async-tasks-sync", false); // Default to false now - if (runAsyncTasksSync) { - LeafConfig.LOGGER.warn("The setting '{}.run-async-tasks-sync' is deprecated. Use 'async-unsafe-read-handling: STRICT' for similar safety checks or 'BUFFERED' for buffered reads.", getBasePath()); + // Transfer old config + runAsyncTasksSync = config.getBoolean(getBasePath() + ".run-async-tasks-sync"); + if (runAsyncTasksSync != null && runAsyncTasksSync) { + LeafConfig.LOGGER.warn("The setting '{}.run-async-tasks-sync' is deprecated, removed automatically. Use 'async-unsafe-read-handling: BUFFERED' for buffered reads instead.", getBasePath()); } if (enabled) { LeafConfig.LOGGER.info("Using {} threads for Parallel World Ticking", threads); } - - runAsyncTasksSync = enabled && runAsyncTasksSync; // Auto-disable if main feature is off } }