// Path: common/src/main/java/com/vexsoftware/votifier/platform/scheduler/ScheduledVotifierTask.java
// public interface ScheduledVotifierTask {
//     void cancel();
// }
// 
// Path: common/src/main/java/com/vexsoftware/votifier/platform/scheduler/VotifierScheduler.java
// public interface VotifierScheduler {
//     ScheduledVotifierTask sync(Runnable runnable);
// 
//     ScheduledVotifierTask onPool(Runnable runnable);
// 
//     ScheduledVotifierTask delayedSync(Runnable runnable, int delay, TimeUnit unit);
// 
//     ScheduledVotifierTask delayedOnPool(Runnable runnable, int delay, TimeUnit unit);
// 
//     ScheduledVotifierTask repeatOnPool(Runnable runnable, int delay, int repeat, TimeUnit unit);
// }


import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.scheduler.ScheduledTask;
import com.velocitypowered.api.scheduler.Scheduler;
import com.vexsoftware.votifier.platform.scheduler.ScheduledVotifierTask;
import com.vexsoftware.votifier.platform.scheduler.VotifierScheduler;
import java.util.concurrent.TimeUnit;
package com.vexsoftware.votifier.velocity;



class VelocityScheduler implements VotifierScheduler {
    private final ProxyServer server;
    private final VotifierPlugin plugin;

    public VelocityScheduler(ProxyServer server, VotifierPlugin plugin) {
        this.server = server;
        this.plugin = plugin;
    }

    private Scheduler.TaskBuilder builder(Runnable runnable) {
        return server.getScheduler().buildTask(plugin, runnable);
    }

    @Override
    public ScheduledVotifierTask sync(Runnable runnable) {
        return onPool(runnable);
    }

    @Override
    public ScheduledVotifierTask onPool(Runnable runnable) {
        return new TaskWrapper(builder(runnable).schedule());
    }

// Path: common/src/main/java/com/vexsoftware/votifier/platform/scheduler/ScheduledVotifierTask.java
// public interface ScheduledVotifierTask {
//     void cancel();
// }
// 
// Path: common/src/main/java/com/vexsoftware/votifier/platform/scheduler/VotifierScheduler.java
// public interface VotifierScheduler {
//     ScheduledVotifierTask sync(Runnable runnable);
// 
//     ScheduledVotifierTask onPool(Runnable runnable);
// 
//     ScheduledVotifierTask delayedSync(Runnable runnable, int delay, TimeUnit unit);
// 
//     ScheduledVotifierTask delayedOnPool(Runnable runnable, int delay, TimeUnit unit);
// 
//     ScheduledVotifierTask repeatOnPool(Runnable runnable, int delay, int repeat, TimeUnit unit);
// }


// Path: velocity/src/main/java/com/vexsoftware/votifier/velocity/VelocityScheduler.java
import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.scheduler.ScheduledTask;
import com.velocitypowered.api.scheduler.Scheduler;
import com.vexsoftware.votifier.platform.scheduler.ScheduledVotifierTask;
import com.vexsoftware.votifier.platform.scheduler.VotifierScheduler;
import java.util.concurrent.TimeUnit;

package com.vexsoftware.votifier.velocity;



class VelocityScheduler implements VotifierScheduler {
    private final ProxyServer server;
    private final VotifierPlugin plugin;

    public VelocityScheduler(ProxyServer server, VotifierPlugin plugin) {
        this.server = server;
        this.plugin = plugin;
    }

    private Scheduler.TaskBuilder builder(Runnable runnable) {
        return server.getScheduler().buildTask(plugin, runnable);
    }

    @Override
    public ScheduledVotifierTask sync(Runnable runnable) {
        return onPool(runnable);
    }

    @Override
    public ScheduledVotifierTask onPool(Runnable runnable) {
        return new TaskWrapper(builder(runnable).schedule());
    }

    @Override