package me.lethunderhawk.fluxapi.util.animation; import me.lethunderhawk.fluxapi.FluxService; import me.lethunderhawk.fluxapi.main.FluxAPI; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; public abstract class Animation { protected final JavaPlugin plugin; protected final World world; protected int tick = 0; protected int duration; private BukkitTask task; private Runnable onComplete; protected Animation(World world, int duration) { this.plugin = FluxService.get(FluxAPI.class); this.world = world; this.duration = duration; } public final void start() { onStart(); task = Bukkit.getScheduler().runTaskTimer(plugin, () -> { if (tick >= duration) { stop(true); return; } onTick(tick); tick++; }, 0L, 1L); } public final void stop(boolean completed) { if (task != null) task.cancel(); onEnd(); if (completed && onComplete != null) { onComplete.run(); } } public void onComplete(Runnable runnable) { this.onComplete = runnable; } protected abstract void onStart(); protected abstract void onTick(int tick); protected abstract void onEnd(); }