Newer
Older
ChallengeSystem / src / main / java / de / fanta / challenges / schedular / BukkitScheduler.java
@fanta fanta on 15 Apr 2023 2 KB Foliaaaa
package de.fanta.challenges.schedular;

import de.fanta.challenges.Challenges;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Entity;

import java.util.function.Consumer;

public class BukkitScheduler implements Scheduler {

    private final Challenges plugin;

    public BukkitScheduler(Challenges plugin) {
        this.plugin = plugin;
    }

    @Override
    public void runAsync(Runnable task) {
        Bukkit.getScheduler().runTaskAsynchronously(this.plugin, task);
    }

    @Override
    public void run(Runnable task) {
        Bukkit.getScheduler().runTask(this.plugin, task);
    }

    @Override
    public void runLocal(Location location, Runnable task) {
        Bukkit.getScheduler().runTask(this.plugin, task);
    }

    @Override
    public void runAtChunk(World world, int chunkX, int chunkZ, Runnable task) {
        Bukkit.getScheduler().runTask(this.plugin, task);
    }

    @Override
    public CancellableTask runGlobalDelayed(Runnable task, long delay) {
        return Bukkit.getScheduler().runTaskLater(this.plugin, task, delay)::cancel;
    }

    @Override
    public void runLocalDelayed(Location location, Runnable task, long delay) {
        runGlobalDelayed(task, delay);
    }

    @Override
    public CancellableTask runLocalAtFixedRate(Location location, Runnable task, long delay, long period) {
        return runGlobalAtFixedRate(task, delay, period);
    }

    @Override
    public void runLocalAtFixedRate(Location location, Consumer<CancellableTask> taskConsumer, long delay, long period) {
        runGlobalAtFixedRate(taskConsumer, delay, period);
    }

    @Override
    public CancellableTask runGlobalAtFixedRate(Runnable task, long delay, long period) {
        return Bukkit.getScheduler().runTaskTimer(this.plugin, task, delay, period)::cancel;
    }

    @Override
    public void runGlobalAtFixedRate(Consumer<CancellableTask> taskConsumer, long delay, long period) {
        Bukkit.getScheduler().runTaskTimer(this.plugin, bukkitTask -> taskConsumer.accept(bukkitTask::cancel), delay, period);
    }

    @Override
    public CancellableTask runOnEntityAtFixedRate(Entity entity, Runnable task, long delay, long period) {
        return runGlobalAtFixedRate(task, delay, period);
    }

    @Override
    public void runOnEntityAtFixedRate(Entity entity, Consumer<CancellableTask> taskConsumer, long delay, long period) {
        runLocalAtFixedRate(null, taskConsumer, delay, period);
    }

    @Override
    public void runDelayedOnEntity(Entity entity, Runnable task, long delay) {
        Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, task, delay);
    }
}