diff options
Diffstat (limited to 'bukkit/src/main/java')
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/scheduler/bukkit/BukkitWrappedTask.java | 33 |
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 |
