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 5e9fa79..6e22495 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/reflection/Reflections.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/reflection/Reflections.java @@ -60,6 +60,11 @@ public final class Reflections { .withClassName("AsyncScheduler") .setStrict(FoliaUtil.isFolia())).get(); + public static final Class GLOBAL_REGION_SCHEDULER_CLASS = new ClassReflection( + new ReflectionBuilder("io.papermc.paper.threadedregions.scheduler") + .withClassName("GlobalRegionScheduler") + .setStrict(FoliaUtil.isFolia())).get(); + public static final Class SCHEDULED_TASK_CLASS = new ClassReflection( new ReflectionBuilder("io.papermc.paper.threadedregions.scheduler") .withClassName("ScheduledTask") @@ -71,6 +76,12 @@ public final class Reflections { .withExpectResult(ASYNC_SCHEDULER_CLASS) .setStrict(FoliaUtil.isFolia())); + public static final ReflectionLazyLoader FOLIA_GET_GLOBAL_REGION_SCHEDULER = new MethodReflection( + new ReflectionBuilder(Bukkit.class) + .withMethodName("getGlobalRegionScheduler") + .withExpectResult(GLOBAL_REGION_SCHEDULER_CLASS) + .setStrict(FoliaUtil.isFolia())); + public static final ReflectionLazyLoader FOLIA_RUN_NOW = new MethodReflection( new ReflectionBuilder(ASYNC_SCHEDULER_CLASS) .withMethodName("runNow") @@ -92,6 +103,13 @@ public final class Reflections { .withExpectResult(SCHEDULED_TASK_CLASS) .setStrict(FoliaUtil.isFolia())); + public static final ReflectionLazyLoader FOLIA_RUN_NOW_GLOBAL = new MethodReflection( + new ReflectionBuilder(GLOBAL_REGION_SCHEDULER_CLASS) + .withMethodName("runNow") + .withParameterTypes(Plugin.class, Consumer.class) + .withExpectResult(SCHEDULED_TASK_CLASS) + .setStrict(FoliaUtil.isFolia())); + public static final ReflectionLazyLoader FOLIA_TELEPORT_ASYNC = new MethodReflection( new ReflectionBuilder(Entity.class) .withMethodName("teleportAsync") 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 51b699b..6d8e742 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java @@ -14,7 +14,12 @@ public class FoliaScheduler extends TaskScheduler { @Override public void runSync(Runnable runnable) { - // TODO: Figure out which scheduler to use for running commands + try { + Object scheduler = Reflections.FOLIA_GET_GLOBAL_REGION_SCHEDULER.get().invoke(null); + Reflections.FOLIA_RUN_NOW_GLOBAL.get().invoke(scheduler, plugin, (Consumer) o -> runnable.run()); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } } @Override