ZNPCsPlus/plugin/src/main/java/lol/pyr/znpcsplus/scheduling/FoliaScheduler.java

40 lines
1.4 KiB
Java

package lol.pyr.znpcsplus.scheduling;
import lol.pyr.znpcsplus.reflection.Reflections;
import org.bukkit.plugin.Plugin;
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
public class FoliaScheduler extends TaskScheduler {
public FoliaScheduler(Plugin plugin) {
super(plugin);
}
@Override
public void runSync(Runnable runnable) {
// TODO: Figure out which scheduler to use for running commands
}
@Override
public void runLaterAsync(Runnable runnable, long ticks) {
try {
Object scheduler = Reflections.FOLIA_GET_ASYNC_SCHEDULER.get().invoke(null);
Reflections.FOLIA_RUN_DELAYED.get().invoke(scheduler, plugin, (Consumer<Object>) o -> runnable.run(), ticks * 50, TimeUnit.MILLISECONDS);
} catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
}
@Override
public void runDelayedTimerAsync(Runnable runnable, long delay, long ticks) {
try {
Object scheduler = Reflections.FOLIA_GET_ASYNC_SCHEDULER.get().invoke(null);
Reflections.FOLIA_RUN_AT_FIXED_RATE.get().invoke(scheduler, plugin, (Consumer<Object>) o -> runnable.run(), delay * 50, ticks * 50, TimeUnit.MILLISECONDS);
} catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
}
}