package com.github.jamesnorris.ablockalypse.threading; import org.bukkit.Bukkit; import com.github.jamesnorris.ablockalypse.Ablockalypse; public class MainThread { private int id = -1, interval = 1; public MainThread(boolean autorun) { if (autorun) { run(); } } public synchronized void cancel() { Bukkit.getScheduler().cancelTask(id); id = -1; } public void run() { if (id != -1) { Ablockalypse.getTracker().error("The main thread has been run several times over. Ablockalypse will now stop to prevent serious issues.", Integer.MAX_VALUE); return; } id = Bukkit.getScheduler().scheduleSyncRepeatingTask(Ablockalypse.getInstance(), new Runnable() { @Override public void run() { tick(); } }, interval, interval); } public synchronized void tick() { for (Task task : Ablockalypse.getData().getObjectsOfType(Task.class)) { if (task.isRunning()) { if (task instanceof RepeatingTask) { RepeatingTask rthread = (RepeatingTask) task; rthread.setCount(rthread.getCount() + 1); if (rthread.getCount() >= rthread.getInterval()) { rthread.run(); rthread.setCount(0); } } else if (task instanceof DelayedTask) { DelayedTask dthread = (DelayedTask) task; dthread.setCountup(dthread.getCountup() + 1); if (dthread.getCountup() >= dthread.getDelay()) { dthread.run(); dthread.cancel(); } } } } } }