| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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();
- }
|