Java bukkit可运行非法状态异常

Java bukkit可运行非法状态异常,java,minecraft,illegalstateexception,Java,Minecraft,Illegalstateexception,伙计们,我正在制作一个插口1.8插件。它在1.16中起作用,但在1.8中它抛出了以下内容: [10:00:59 ERROR]: Could not pass event InventoryClickEvent to Knockback_PVP v1.0.0 ..... org.bukkit.event.EventException Caused by: java.lang.IllegalStateException: Already scheduled as 1201 at or

伙计们,我正在制作一个插口1.8插件。它在1.16中起作用,但在1.8中它抛出了以下内容:

[10:00:59 ERROR]: Could not pass event InventoryClickEvent to Knockback_PVP v1.0.0
.....
org.bukkit.event.EventException
Caused by: java.lang.IllegalStateException: Already scheduled as 1201
        at org.bukkit.scheduler.BukkitRunnable.checkState(BukkitRunnable.java:141) ~[spigot-1.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.scheduler.BukkitRunnable.runTask(BukkitRunnable.java:31) ~[spigot-1.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-c3c767f-33d5de3]
...
以下是我代码的一部分:

BukkitRunnable runnable = new BukkitRunnable() {
            @Override
            public void run() {
                if (plugin.RegenTasks.containsKey(getTaskId()) == false) return;
                Player p = plugin.RegenTasks.get(getTaskId());
                p.getInventory().setItem(3, new ItemStack(Material.DIAMOND));
                plugin.RegenTasks.remove(getTaskId());
                return;
            }
        };
        runnable.runTaskLater(plugin, 2*20*30);
        plugin.RegenTasks.put(runnable.getTaskId(),p);
在其他地方,当玩家死亡时:

if (plugin.RegenTasks.containsValue(p)){ 
    for (int i: plugin.RegenTasks.keySet()) {
        if (plugin.RegenTasks.get(i) == p) {
            plugin.RegenTasks.remove(i);
                try 
                    {plugin.getServer().getScheduler().cancelTask(i);}
                finally {break;}
        }
    }
}

有什么办法可以解决吗?

您只能安排一次bukkitrunable。您的错误消息也会告诉您

已安排为1201

看看Javadoc:

因此,要么只调用runnable一次,要么安排您的任务,例如:


我知道那个错误是什么,但我很困惑,因为我从未多次运行过它。您的代码的哪一行导致了这个验证?