Newer
Older
ChallengesFix / src / main / java / de / fanta / challenges / schedular / FoliaScheduler.java
@fanta fanta on 15 Apr 2023 3 KB Foliaaaa
package de.fanta.challenges.schedular;

import de.fanta.challenges.Challenges;
import io.papermc.paper.threadedregions.scheduler.ScheduledTask;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Entity;

import java.util.function.Consumer;

public class FoliaScheduler implements Scheduler {

    private final Challenges plugin;

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

    @Override
    public void runAsync(Runnable task) {
        Bukkit.getServer().getAsyncScheduler().runNow(this.plugin, scheduledTask -> task.run());
    }

    @Override
    public void run(Runnable task) {
        Bukkit.getServer().getGlobalRegionScheduler().run(this.plugin, scheduledTask -> task.run());
    }

    @Override
    public void runLocal(Location location, Runnable task) {
        Bukkit.getServer().getRegionScheduler().run(this.plugin, location, scheduledTask -> task.run());
    }

    @Override
    public void runAtChunk(World world, int chunkX, int chunkZ, Runnable task) {
        Bukkit.getServer().getRegionScheduler().run(this.plugin, world, chunkX, chunkZ, scheduledTask -> task.run());
    }

    @Override
    public CancellableTask runGlobalDelayed(Runnable task, long delay) {
        return Bukkit.getServer().getGlobalRegionScheduler().runDelayed(this.plugin, scheduledTask -> task.run(), delay)::cancel;
    }

    @Override
    public void runLocalDelayed(Location location, Runnable task, long delay) {
        Bukkit.getServer().getRegionScheduler().runDelayed(this.plugin, location, scheduledTask -> task.run(), delay);
    }

    @Override
    public CancellableTask runLocalAtFixedRate(Location location, Runnable task, long delay, long period) {
        return Bukkit.getServer().getRegionScheduler().runAtFixedRate(this.plugin, location, scheduledTask -> task.run(), delay, period)::cancel;
    }

    @Override
    public void runLocalAtFixedRate(Location location, Consumer<CancellableTask> taskConsumer, long delay, long period) {
        Bukkit.getServer().getRegionScheduler().runAtFixedRate(this.plugin, location, scheduledTask -> taskConsumer.accept(scheduledTask::cancel), delay, period);
    }

    @Override
    public CancellableTask runGlobalAtFixedRate(Runnable task, long delay, long period) {
        return Bukkit.getServer().getGlobalRegionScheduler().runAtFixedRate(this.plugin, scheduledTask -> task.run(), delay, period)::cancel;
    }

    @Override
    public void runGlobalAtFixedRate(Consumer<CancellableTask> taskConsumer, long delay, long period) {
        Bukkit.getServer().getGlobalRegionScheduler().runAtFixedRate(this.plugin, scheduledTask -> taskConsumer.accept(scheduledTask::cancel), delay, period);
    }

    @Override
    public CancellableTask runOnEntityAtFixedRate(Entity entity, Runnable task, long delay, long period) {
        ScheduledTask createdTask = entity.getScheduler().runAtFixedRate(this.plugin, scheduledTask -> task.run(), null, delay, period);
        return createdTask == null ? null : createdTask::cancel;
    }

    @Override
    public void runOnEntityAtFixedRate(Entity entity, Consumer<CancellableTask> taskConsumer, long delay, long period) {
        entity.getScheduler().runAtFixedRate(this.plugin, scheduledTask -> taskConsumer.accept(scheduledTask::cancel), null, delay, period);
    }

    @Override
    public void runDelayedOnEntity(Entity entity, Runnable task, long delay) {
        entity.getScheduler().runDelayed(this.plugin, scheduledTask -> task.run(), null, delay);
    }
}