Animation.java 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package me.lethunderhawk.fluxapi.util.animation;
  2. import me.lethunderhawk.fluxapi.FluxService;
  3. import me.lethunderhawk.fluxapi.main.FluxAPI;
  4. import org.bukkit.Bukkit;
  5. import org.bukkit.World;
  6. import org.bukkit.plugin.java.JavaPlugin;
  7. import org.bukkit.scheduler.BukkitTask;
  8. public abstract class Animation {
  9. protected final JavaPlugin plugin;
  10. protected final World world;
  11. protected int tick = 0;
  12. protected int duration;
  13. private BukkitTask task;
  14. private Runnable onComplete;
  15. protected Animation(World world, int duration) {
  16. this.plugin = FluxService.get(FluxAPI.class);
  17. this.world = world;
  18. this.duration = duration;
  19. }
  20. public final void start() {
  21. onStart();
  22. task = Bukkit.getScheduler().runTaskTimer(plugin, () -> {
  23. if (tick >= duration) {
  24. stop(true);
  25. return;
  26. }
  27. onTick(tick);
  28. tick++;
  29. }, 0L, 1L);
  30. }
  31. public final void stop(boolean completed) {
  32. if (task != null) task.cancel();
  33. onEnd();
  34. if (completed && onComplete != null) {
  35. onComplete.run();
  36. }
  37. }
  38. public void onComplete(Runnable runnable) {
  39. this.onComplete = runnable;
  40. }
  41. protected abstract void onStart();
  42. protected abstract void onTick(int tick);
  43. protected abstract void onEnd();
  44. }