@Override public boolean isQueued(int taskId) { if (taskId <= 0) { return false; } for (PipeTask task : queuedTasks) { if (task.getTaskId() == taskId) { return task.getPeriod() >= -1; } } PipeTask task = runningTasks.get(taskId); return task != null && task.getPeriod() >= -1; }
@Override public List<BukkitTask> getPendingTasks() { final ArrayList<BukkitTask> pending = new ArrayList<BukkitTask>(); for (PipeTask task : runningTasks.values()) { if (task.getPeriod() >= -1L) { pending.add(task); } } for (PipeTask task : queuedTasks) { if (task.getPeriod() >= -1L && !pending.contains(task)) { pending.add(task); } } return pending; }
public void doTick(int currentTick) { this.currentTick = currentTick; Iterator<PipeTask> iterator = queuedTasks.iterator(); while (iterator.hasNext()) { PipeTask task = iterator.next(); long period = task.getPeriod(); if (period == -2) { iterator.remove(); continue; } if (task.getNextRun() <= currentTick) { runningTasks.put(task.getTaskId(), task); if (period == -1) { iterator.remove(); } else { task.setNextRun(currentTick + task.getPeriod()); } } } for (PipeTask runningTask : runningTasks.values()) { if (runningTask.isSync()) { try { runningTask.run(); } catch (final Throwable throwable) { runningTask .getOwner() .getLogger() .log( Level.WARNING, String.format( "Task #%s for %s generated an exception", runningTask.getTaskId(), runningTask.getOwner().getDescription().getFullName()), throwable); } } else { executor.execute(runningTask); } } runningTasks.clear(); }