取消BukkitTask继续运行

时间:2017-10-16 17:17:49

标签: java minecraft bukkit

我用服务器列表做了一个胸部gui。玩家打开它时必须开始更新,并且当玩家打开其他gui /关闭当前时取消更新。首先,当玩家运行命令时,执行openMenu(Player)方法:

public void openMenu(Player player) {
    // Creating inv, filling, etc

    player.openInventory(inv);
    updateMenu(player, inv);
}

所以,菜单打开,开始更新:

public void updateMenu(Player player, Inventory inv) {
    BukkitTask task = Bukkit.getServer().getScheduler().runTaskTimer(ServerSelect.instance, new Runnable() {
        @Override
        public void run() {
            Bukkit.getServer().getLogger().log(Level.INFO, "Trying to update menu.");
            if (!player.getOpenInventory().getTopInventory().getTitle().equals(inv.getTitle())) {
                Bukkit.getServer().getLogger().log(Level.INFO, "Closed.");
                MenuManager.menuUpdaters.get(player.getName()).cancel(); // Does not work? :/
            }
            Bukkit.getServer().getLogger().log(Level.INFO, "Updating menu.");

            // Updating inventory ...
        }
    }, 60L, 60L);
    MenuManager.menuUpdaters.put(player.getName(), task);
}

问题是甚至在取消任务继续运行后,记录:

Trying to update menu.
Closed.
Updating menu.

Trying to update menu.
Closed.
Updating menu.

运行PaperSpigot 1.12.1我打印isCancelled(),首先运行它false然后每次true,但任务继续执行。我喜欢用它做什么。我也尝试过:

  1. 取消它,参考其他静态方法。
  2. 在新的runTask(插件,Runnable)中取消它
  3. 使用Bukkit.getScheduler()取消.delayTask(task.getTaskId())

1 个答案:

答案 0 :(得分:1)

刚刚解决了。当玩家点击其他项目时,问题在于将旧任务重写为hashmap。所以它取消了新任务但不是旧任务。我添加了取消任务,当玩家点击项目(必须打开其他gui)或关闭gui时,将其从hashmap中删除。 很抱歉浪费你的时间在我的错误上..感谢Squiddie给我正确的方式。