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();