From 46f04a594727a6cd6f83f49f50a4ea8ecb603cc9 Mon Sep 17 00:00:00 2001 From: Krakenied Date: Sat, 1 Mar 2025 09:12:42 +0100 Subject: Fix BukkitTask#isCancelled() missing on 1.8 --- .../bukkit/scheduler/bukkit/BukkitWrappedTask.java | 33 +++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'bukkit/src/main/java/com/leonardobishop') 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 isCancelledPredicate; + + static { + final Predicate 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 -- cgit v1.2.3-70-g09d2