@Override
 public boolean isCurrentlyRunning(int taskId) {
   PipeTask task = runningTasks.get(taskId);
   if (task == null || task.isSync()) {
     return false;
   }
   return false;
 }
 @Override
 public List<BukkitWorker> getActiveWorkers() {
   ArrayList<BukkitWorker> workers = new ArrayList<BukkitWorker>();
   for (final PipeTask taskObj : runningTasks.values()) {
     if (taskObj.isSync()) {
       continue;
     }
     final PipeAsyncTask task = (PipeAsyncTask) taskObj;
     synchronized (task.getWorkers()) {
       workers.addAll(task.getWorkers());
     }
   }
   return workers;
 }
 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();
 }