aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/scheduler/bukkit/BukkitWrappedTask.java33
1 files changed, 32 insertions, 1 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/scheduler/bukkit/BukkitWrappedTask.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/scheduler/bukkit/BukkitWrappedTask.java
index 9977c2f8..f620a559 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/scheduler/bukkit/BukkitWrappedTask.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/scheduler/bukkit/BukkitWrappedTask.java
@@ -1,14 +1,45 @@
package com.leonardobishop.quests.bukkit.scheduler.bukkit;
import com.leonardobishop.quests.bukkit.scheduler.WrappedTask;
+import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
+import org.bukkit.scheduler.BukkitScheduler;
import org.bukkit.scheduler.BukkitTask;
import org.jetbrains.annotations.NotNull;
+import java.lang.reflect.Method;
import java.util.Objects;
+import java.util.function.Predicate;
public class BukkitWrappedTask implements WrappedTask {
+ // TODO: Replace this reflection shit with a more proper solution
+ private static final Predicate<BukkitTask> isCancelledPredicate;
+
+ static {
+ final Predicate<BukkitTask> predicate;
+
+ Method isCancelledMethod;
+ try {
+ isCancelledMethod = BukkitTask.class.getMethod("isCancelled");
+ } catch (final NoSuchMethodException e) {
+ isCancelledMethod = null; // doesn't exist on 1.8
+ }
+
+ if (isCancelledMethod != null) {
+ predicate = BukkitTask::isCancelled;
+ } else {
+ predicate = task -> {
+ final int taskId = task.getTaskId();
+ final BukkitScheduler scheduler = Bukkit.getScheduler();
+ return !(scheduler.isCurrentlyRunning(taskId) || scheduler.isQueued(taskId));
+ };
+ }
+
+ isCancelledPredicate = predicate;
+ }
+ // TODO: Replace this reflection shit with a more proper solution
+
private final BukkitTask bukkitTask;
public BukkitWrappedTask(@NotNull BukkitTask bukkitTask) {
@@ -22,7 +53,7 @@ public class BukkitWrappedTask implements WrappedTask {
@Override
public boolean isCancelled() {
- return bukkitTask.isCancelled();
+ return isCancelledPredicate.test(bukkitTask);
}
@Override