SnuviScheduler.java 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package me.km.scheduler;
  2. import java.util.HashMap;
  3. import java.util.concurrent.Executors;
  4. import java.util.concurrent.ScheduledExecutorService;
  5. import java.util.concurrent.TimeUnit;
  6. import me.km.api.Module;
  7. import net.minecraft.util.text.TextFormatting;
  8. public class SnuviScheduler extends Module
  9. {
  10. private boolean checker;
  11. private int counter;
  12. private final HashMap<Integer, SnuviTask> tasks;
  13. public SnuviScheduler(String mname, String prefix, TextFormatting color)
  14. {
  15. super(mname, prefix, color);
  16. counter = 0;
  17. tasks = new HashMap<>();
  18. }
  19. public void cancelTask(int id)
  20. {
  21. tasks.remove(id);
  22. }
  23. public int scheduleRepeatingTask(Runnable r, long ticks, long rtimer)
  24. {
  25. counter++;
  26. tasks.put(counter, new SnuviTask(r, ticks, rtimer));
  27. return counter;
  28. }
  29. public int scheduleTask(Runnable r, int delay)
  30. {
  31. return scheduleRepeatingTask(r, delay, 0);
  32. }
  33. public void tick()
  34. {
  35. checker = false;
  36. long l = System.currentTimeMillis();
  37. tasks.values().removeIf(task ->
  38. {
  39. if(checker)
  40. {
  41. return false;
  42. }
  43. if(System.currentTimeMillis() - l > 25)
  44. {
  45. checker = true;
  46. this.sendWarningToConsole("Der Scheduler ist länger als 25 ms gelaufen.");
  47. return false;
  48. }
  49. return task.tick();
  50. });
  51. }
  52. public static void scheduleAsyncTask(Runnable r)
  53. {
  54. scheduleAsyncTask(r, 1);
  55. }
  56. public static void scheduleAsyncTask(Runnable r, long ticks)
  57. {
  58. ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
  59. executor.schedule(r, ticks * 50, TimeUnit.MILLISECONDS);
  60. executor.shutdown();
  61. }
  62. }