From 12e2c2963db2956cdab1bcb6379aab8964f621dd Mon Sep 17 00:00:00 2001 From: D3v1s0m Date: Sun, 13 Aug 2023 12:08:48 +0530 Subject: [PATCH] Added async task scheduling --- .../java/lol/pyr/znpcsplus/reflection/Reflections.java | 8 ++++++++ .../lol/pyr/znpcsplus/scheduling/FoliaScheduler.java | 10 ++++++++++ .../lol/pyr/znpcsplus/scheduling/SpigotScheduler.java | 5 +++++ .../lol/pyr/znpcsplus/scheduling/TaskScheduler.java | 1 + 4 files changed, 24 insertions(+) diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/reflection/Reflections.java b/plugin/src/main/java/lol/pyr/znpcsplus/reflection/Reflections.java index 5521938..04fc347 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/reflection/Reflections.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/reflection/Reflections.java @@ -169,6 +169,14 @@ public final class Reflections { .setStrict(FoliaUtil.isFolia()) .toMethodReflection(); + public static final ReflectionLazyLoader FOLIA_RUN_NOW_ASYNC = + new ReflectionBuilder(ASYNC_SCHEDULER_CLASS) + .withMethodName("runNow") + .withParameterTypes(Plugin.class, Consumer.class) + .withExpectResult(SCHEDULED_TASK_CLASS) + .setStrict(FoliaUtil.isFolia()) + .toMethodReflection(); + public static final ReflectionLazyLoader FOLIA_RUN_DELAYED_ASYNC = new ReflectionBuilder(ASYNC_SCHEDULER_CLASS) .withMethodName("runDelayed") diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java b/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java index f5575de..0436b39 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java @@ -43,6 +43,16 @@ public class FoliaScheduler extends TaskScheduler { } } + @Override + public void runAsyncGlobal(Runnable runnable) { + try { + Object scheduler = Reflections.FOLIA_GET_ASYNC_SCHEDULER.get().invoke(null); + Reflections.FOLIA_RUN_NOW_ASYNC.get().invoke(scheduler, plugin, (Consumer) o -> runnable.run()); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + } + @Override public void runLaterAsync(Runnable runnable, long delay) { try { diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java b/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java index 3af2e68..949218a 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/SpigotScheduler.java @@ -24,6 +24,11 @@ public class SpigotScheduler extends TaskScheduler { Bukkit.getScheduler().runTask(plugin, runnable); } + @Override + public void runAsyncGlobal(Runnable runnable) { + Bukkit.getScheduler().runTaskAsynchronously(plugin, runnable); + } + @Override public void runLaterAsync(Runnable runnable, long delay) { Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, runnable, delay); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java b/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java index cf6d19d..fca0bf0 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/TaskScheduler.java @@ -13,6 +13,7 @@ public abstract class TaskScheduler { public abstract void schedulePlayerChat(Player player, String message); public abstract void schedulePlayerCommand(Player player, String command); public abstract void runSyncGlobal(Runnable runnable); + public abstract void runAsyncGlobal(Runnable runnable); public abstract void runLaterAsync(Runnable runnable, long delay); public abstract void runDelayedTimerAsync(Runnable runnable, long delay, long interval); public abstract void cancelAll();