diff options
| author | Krakenied <krakenied1@gmail.com> | 2025-03-01 09:12:42 +0100 |
|---|---|---|
| committer | Krakenied <46192742+Krakenied@users.noreply.github.com> | 2025-05-13 20:34:15 +0200 |
| commit | 46f04a594727a6cd6f83f49f50a4ea8ecb603cc9 (patch) | |
| tree | c15b331d2d27f941ce1a7550dcb76a932668f9e9 | |
| parent | 8f5308bdb71ea95c2420e9e22e0ce7057e05a05c (diff) | |
Fix BukkitTask#isCancelled() missing on 1.8
| -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 |
