package tc.oc.commons.bukkit.scheduler; import javax.inject.Inject; import org.bukkit.plugin.Plugin; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scheduler.BukkitTask; import java.time.Duration; import tc.oc.commons.core.plugin.PluginScoped; import tc.oc.commons.core.scheduler.SchedulerBackend; import tc.oc.commons.core.scheduler.Task; import tc.oc.commons.core.util.TimeUtils; @PluginScoped public class BukkitSchedulerBackend implements SchedulerBackend<BukkitTask> { private final Plugin plugin; private final BukkitScheduler bukkit; @Inject BukkitSchedulerBackend(Plugin plugin, BukkitScheduler bukkit) { this.plugin = plugin; this.bukkit = bukkit; } @Override public int taskId(BukkitTask bukkitTask) { return bukkitTask.getTaskId(); } @Override public boolean isTaskQueued(BukkitTask bukkitTask) { return bukkit.isQueued(bukkitTask.getTaskId()); } @Override public boolean isTaskRunning(BukkitTask bukkitTask) { return bukkit.isCurrentlyRunning(bukkitTask.getTaskId()); } @Override public BukkitTask startTask(Task.Parameters schedule, Runnable runnable) { final Duration delay = schedule.delay(); final Duration interval = schedule.interval(); return bukkit.runTaskTimer(plugin, runnable, delay == null ? 0 : TimeUtils.toTicks(delay), interval == null ? -1 : TimeUtils.toTicks(interval)); } @Override public void cancelTask(BukkitTask bukkitTask) { bukkitTask.cancel(); } }