package me.km.scheduler; import java.util.HashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import me.km.api.Module; import net.minecraft.util.text.TextFormatting; public class SnuviScheduler extends Module { private boolean checker; private int counter; private final HashMap tasks; public SnuviScheduler(String mname, String prefix, TextFormatting color) { super(mname, prefix, color); counter = 0; tasks = new HashMap<>(); } public void cancelTask(int id) { tasks.remove(id); } public int scheduleRepeatingTask(Runnable r, long ticks, long rtimer) { counter++; tasks.put(counter, new SnuviTask(r, ticks, rtimer)); return counter; } public int scheduleTask(Runnable r, int delay) { return scheduleRepeatingTask(r, delay, 0); } public void tick() { checker = false; long l = System.currentTimeMillis(); tasks.values().removeIf(task -> { if(checker) { return false; } if(System.currentTimeMillis() - l > 25) { checker = true; this.sendWarningToConsole("Der Scheduler ist länger als 25 ms gelaufen."); return false; } return task.tick(); }); } public static void scheduleAsyncTask(Runnable r) { scheduleAsyncTask(r, 1); } public static void scheduleAsyncTask(Runnable r, long ticks) { ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.schedule(r, ticks * 50, TimeUnit.MILLISECONDS); executor.shutdown(); } }