diff --git a/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java b/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java index 79094015..e5da5359 100644 --- a/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java +++ b/src/main/java/com/comphenix/protocol/async/AsyncListenerHandler.java @@ -24,6 +24,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import org.bukkit.plugin.Plugin; + import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.error.Report; import com.comphenix.protocol.error.ReportType; @@ -38,8 +40,6 @@ import com.comphenix.protocol.timing.TimedTracker; import com.google.common.base.Function; import com.google.common.base.Joiner; -import org.bukkit.plugin.Plugin; - /** * Represents a handler for an asynchronous event. *

@@ -328,7 +328,7 @@ public class AsyncListenerHandler { } private void scheduleAsync(Runnable runnable) { - listener.getPlugin().getServer().getScheduler().runTaskAsynchronously(listener.getPlugin(), runnable); + filterManager.getScheduler().runTaskAsync(runnable); } /** diff --git a/src/main/java/com/comphenix/protocol/scheduler/DefaultScheduler.java b/src/main/java/com/comphenix/protocol/scheduler/DefaultScheduler.java index 8e1766af..a6d312bd 100644 --- a/src/main/java/com/comphenix/protocol/scheduler/DefaultScheduler.java +++ b/src/main/java/com/comphenix/protocol/scheduler/DefaultScheduler.java @@ -29,4 +29,10 @@ public class DefaultScheduler implements ProtocolScheduler { int taskId = scheduler.scheduleSyncDelayedTask(plugin, task, delay); return taskId >= 0 ? new DefaultTask(scheduler, taskId) : null; } + + @Override + public Task runTaskAsync(Runnable task) { + int taskId = scheduler.runTaskAsynchronously(plugin, task).getTaskId(); + return taskId >= 0 ? new DefaultTask(scheduler, taskId) : null; + } } diff --git a/src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java b/src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java index 8662d80d..1146adda 100644 --- a/src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java +++ b/src/main/java/com/comphenix/protocol/scheduler/DefaultTask.java @@ -1,7 +1,6 @@ package com.comphenix.protocol.scheduler; import org.bukkit.scheduler.BukkitScheduler; -import org.bukkit.scheduler.BukkitTask; public class DefaultTask implements Task { private final int taskId; diff --git a/src/main/java/com/comphenix/protocol/scheduler/FoliaScheduler.java b/src/main/java/com/comphenix/protocol/scheduler/FoliaScheduler.java index 8ca48caa..ee45cad3 100644 --- a/src/main/java/com/comphenix/protocol/scheduler/FoliaScheduler.java +++ b/src/main/java/com/comphenix/protocol/scheduler/FoliaScheduler.java @@ -9,23 +9,32 @@ import org.bukkit.plugin.Plugin; import java.util.function.Consumer; public class FoliaScheduler implements ProtocolScheduler { - private final Object foliaScheduler; + private final Object foliaRegionScheduler; private final MethodAccessor runAtFixedRate; private final MethodAccessor runDelayed; private final MethodAccessor execute; private final MethodAccessor cancel; + + private final Object foliaAsyncScheduler; + private final MethodAccessor executeAsync; + private final Plugin plugin; public FoliaScheduler(Plugin plugin) { this.plugin = plugin; MethodAccessor getScheduler = Accessors.getMethodAccessor(Bukkit.getServer().getClass(), "getGlobalRegionScheduler"); - this.foliaScheduler = getScheduler.invoke(Bukkit.getServer()); + this.foliaRegionScheduler = getScheduler.invoke(Bukkit.getServer()); - this.runAtFixedRate = Accessors.getMethodAccessor(foliaScheduler.getClass(), "runAtFixedRate", Plugin.class, + this.runAtFixedRate = Accessors.getMethodAccessor(foliaRegionScheduler.getClass(), "runAtFixedRate", Plugin.class, Consumer.class, long.class, long.class); - this.execute = Accessors.getMethodAccessor(foliaScheduler.getClass(), "run", Plugin.class, Consumer.class); - this.runDelayed = Accessors.getMethodAccessor(foliaScheduler.getClass(), "runDelayed", Plugin.class, Consumer.class, long.class); + this.execute = Accessors.getMethodAccessor(foliaRegionScheduler.getClass(), "run", Plugin.class, Consumer.class); + this.runDelayed = Accessors.getMethodAccessor(foliaRegionScheduler.getClass(), "runDelayed", Plugin.class, Consumer.class, long.class); + + MethodAccessor getAsyncScheduler = Accessors.getMethodAccessor(Bukkit.getServer().getClass(), "getAsyncScheduler"); + foliaAsyncScheduler = getAsyncScheduler.invoke(Bukkit.getServer()); + + this.executeAsync = Accessors.getMethodAccessor(foliaAsyncScheduler.getClass(), "runNow", Plugin.class, Consumer.class); Class taskClass = MinecraftReflection.getLibraryClass("io.papermc.paper.threadedregions.scheduler.ScheduledTask"); this.cancel = Accessors.getMethodAccessor(taskClass, "cancel"); @@ -33,19 +42,25 @@ public class FoliaScheduler implements ProtocolScheduler { @Override public Task scheduleSyncRepeatingTask(Runnable task, long delay, long period) { - Object taskHandle = runAtFixedRate.invoke(foliaScheduler, plugin, (Consumer)(t -> task.run()), delay, period); + Object taskHandle = runAtFixedRate.invoke(foliaRegionScheduler, plugin, (Consumer)(t -> task.run()), delay, period); return new FoliaTask(cancel, taskHandle); } @Override public Task runTask(Runnable task) { - Object taskHandle = execute.invoke(foliaScheduler, plugin, (Consumer)(t -> task.run())); + Object taskHandle = execute.invoke(foliaRegionScheduler, plugin, (Consumer)(t -> task.run())); return new FoliaTask(cancel, taskHandle); } @Override public Task scheduleSyncDelayedTask(Runnable task, long delay) { - Object taskHandle = runDelayed.invoke(foliaScheduler, plugin, (Consumer)(t -> task.run()), delay); + Object taskHandle = runDelayed.invoke(foliaRegionScheduler, plugin, (Consumer)(t -> task.run()), delay); return new FoliaTask(cancel, taskHandle); } + + @Override + public Task runTaskAsync(Runnable task) { + Object taskHandle = executeAsync.invoke(foliaAsyncScheduler, plugin, (Consumer)(t -> task.run())); + return new FoliaTask(cancel, taskHandle); + } } diff --git a/src/main/java/com/comphenix/protocol/scheduler/ProtocolScheduler.java b/src/main/java/com/comphenix/protocol/scheduler/ProtocolScheduler.java index 4f6b25ac..681e4380 100644 --- a/src/main/java/com/comphenix/protocol/scheduler/ProtocolScheduler.java +++ b/src/main/java/com/comphenix/protocol/scheduler/ProtocolScheduler.java @@ -1,12 +1,11 @@ package com.comphenix.protocol.scheduler; -import com.comphenix.protocol.ProtocolLib; -import org.bukkit.plugin.Plugin; - public interface ProtocolScheduler { Task scheduleSyncRepeatingTask(Runnable task, long delay, long period); Task runTask(Runnable task); Task scheduleSyncDelayedTask(Runnable task, long delay); + + Task runTaskAsync(Runnable task); } diff --git a/src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java b/src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java index 46e45178..b03b6499 100644 --- a/src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java +++ b/src/main/java/com/comphenix/protocol/updater/SpigotUpdater.java @@ -19,7 +19,6 @@ package com.comphenix.protocol.updater; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.error.Report; import com.comphenix.protocol.utility.Closer; -import com.comphenix.protocol.utility.SchedulerUtil; import org.bukkit.plugin.Plugin; import java.io.BufferedReader; diff --git a/src/main/java/com/comphenix/protocol/utility/SchedulerUtil.java b/src/main/java/com/comphenix/protocol/utility/SchedulerUtil.java deleted file mode 100644 index aa186b86..00000000 --- a/src/main/java/com/comphenix/protocol/utility/SchedulerUtil.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.comphenix.protocol.utility; - -import com.comphenix.protocol.reflect.accessors.Accessors; -import com.comphenix.protocol.reflect.accessors.MethodAccessor; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; - -import java.util.function.Consumer; - -public class SchedulerUtil { - private Object foliaScheduler; - private MethodAccessor runAtFixedRate; - private MethodAccessor cancelTasks; - private MethodAccessor execute; - - private static SchedulerUtil getInstance() { - return Holder.INSTANCE; - } - - private static class Holder { - private static final SchedulerUtil INSTANCE = new SchedulerUtil(); - } - - private SchedulerUtil() { - if (Util.isUsingFolia()) { - MethodAccessor getScheduler = Accessors.getMethodAccessor(Bukkit.getServer().getClass(), "getGlobalRegionScheduler"); - foliaScheduler = getScheduler.invoke(Bukkit.getServer()); - - runAtFixedRate = Accessors.getMethodAccessor(foliaScheduler.getClass(), "runAtFixedRate", Plugin.class, - Consumer.class, long.class, long.class); - cancelTasks = Accessors.getMethodAccessor(foliaScheduler.getClass(), "cancelTasks", Plugin.class); - execute = Accessors.getMethodAccessor(foliaScheduler.getClass(), "execute", Plugin.class, Runnable.class); - } - } - - public static int scheduleSyncRepeatingTask(Plugin plugin, Runnable runnable, long delay, long period) { - return getInstance().doScheduleSyncRepeatingTask(plugin, runnable, delay, period); - } - - private int doScheduleSyncRepeatingTask(Plugin plugin, Runnable runnable, long delay, long period) { - if (Util.isUsingFolia()) { - runAtFixedRate.invoke(foliaScheduler, plugin, (Consumer)(task -> runnable.run()), delay, period); - return 1; - } else { - return plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, runnable, delay, period); - } - } - - private void doCancelTask(Plugin plugin, int id) { - if (Util.isUsingFolia()) { - cancelTasks.invoke(foliaScheduler, plugin); - } else { - plugin.getServer().getScheduler().cancelTask(id); - } - } - - public static void cancelTask(Plugin plugin, int id) { - getInstance().doCancelTask(plugin, id); - } - - private void doExecute(Plugin plugin, Runnable runnable) { - if (Util.isUsingFolia()) { - execute.invoke(foliaScheduler, plugin, runnable); - } else { - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, runnable); - } - } - - public static void execute(Plugin plugin, Runnable runnable) { - getInstance().doExecute(plugin, runnable); - } -}