diff --git a/paper-api/src/main/java/org/bukkit/Server.java b/paper-api/src/main/java/org/bukkit/Server.java index e97623d879..49c3743ad7 100644 --- a/paper-api/src/main/java/org/bukkit/Server.java +++ b/paper-api/src/main/java/org/bukkit/Server.java @@ -5,6 +5,7 @@ import org.bukkit.entity.Player; import java.util.List; import org.bukkit.plugin.PluginManager; +import org.bukkit.scheduler.BukkitScheduler; /** * Represents a server implementation @@ -75,6 +76,13 @@ public interface Server { */ public PluginManager getPluginManager(); + /** + * Gets the Scheduler for managing scheduled events + * + * @return Scheduler for this Server instance + */ + public BukkitScheduler getScheduler(); + /** * Gets a list of all worlds on this server * diff --git a/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java index 5da87a6f90..2af45672aa 100644 --- a/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/paper-api/src/main/java/org/bukkit/plugin/SimplePluginManager.java @@ -185,6 +185,7 @@ public final class SimplePluginManager implements PluginManager { public void disablePlugin(final Plugin plugin) { if (plugin.isEnabled()) { plugin.getPluginLoader().disablePlugin(plugin); + server.getScheduler().cancelTasks(plugin); } } diff --git a/paper-api/src/main/java/org/bukkit/scheduler/BukkitScheduler.java b/paper-api/src/main/java/org/bukkit/scheduler/BukkitScheduler.java new file mode 100644 index 0000000000..e1b64246f7 --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/scheduler/BukkitScheduler.java @@ -0,0 +1,92 @@ +package org.bukkit.scheduler; + +import org.bukkit.plugin.Plugin; + +public interface BukkitScheduler { + + /** + * Schedules a once off task to occur after a delay + * This task will be executed by the main server thread + * + * @param Plugin Plugin that owns the task + * @param Runnable Task to be executed + * @param long Delay in server ticks before executing task + * @return int Task id number (-1 if scheduling failed) + */ + public int scheduleSyncDelayedTask(Plugin plugin, Runnable task, long delay); + + /** + * Schedules a once off task to occur as soon as possible + * This task will be executed by the main server thread + * + * @param Plugin Plugin that owns the task + * @param Runnable Task to be executed + * @return int Task id number (-1 if scheduling failed) + */ + public int scheduleSyncDelayedTask(Plugin plugin, Runnable task); + + /** + * Schedules a repeating task + * This task will be executed by the main server thread + * + * @param Plugin Plugin that owns the task + * @param Runnable Task to be executed + * @param long Delay in server ticks before executing first repeat + * @param long Period in server ticks of the task + * @return int Task id number (-1 if scheduling failed) + */ + public int scheduleSyncRepeatingTask(Plugin plugin, Runnable task, long delay, long period); + + /** + * Schedules a once off task to occur after a delay + * This task will be executed by a thread managed by the scheduler + * + * @param Plugin Plugin that owns the task + * @param Runnable Task to be executed + * @param long Delay in server ticks before executing task + * @return int Task id number (-1 if scheduling failed) + */ + public int scheduleAsyncDelayedTask(Plugin plugin, Runnable task, long delay); + + /** + * Schedules a once off task to occur as soon as possible + * This task will be executed by a thread managed by the scheduler + * + * @param Plugin Plugin that owns the task + * @param Runnable Task to be executed + * @return int Task id number (-1 if scheduling failed) + */ + public int scheduleAsyncDelayedTask(Plugin plugin, Runnable task); + + /** + * Schedules a repeating task + * This task will be executed by a thread managed by the scheduler + * + * @param Plugin Plugin that owns the task + * @param Runnable Task to be executed + * @param long Delay in server ticks before executing first repeat + * @param long Period in server ticks of the task + * @return int Task id number (-1 if scheduling failed) + */ + public int scheduleAsyncRepeatingTask(Plugin plugin, Runnable task, long delay, long period); + + /** + * Removes task from scheduler + * + * @param int Id number of task to be removed + */ + public void cancelTask(int taskId); + + /** + * Removes all tasks associated with a particular plugin from the scheduler + * + * @param Plugin Owner of tasks to be removed + */ + public void cancelTasks(Plugin plugin); + + /** + * Removes all tasks from the scheduler + */ + public void cancelAllTasks(); + +}