A1trdX
A1trdX

Reputation: 345

Cancelled BukkitTask continue to run

I made a chest gui with server list. It must starting to update when player opens it and cancel updating when player opened other gui / closed current. Firstly, when player runs a command, openMenu(Player) method executed:

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

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

So, menu opened, starting update:

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);
}

The problem is even after cancelling task continues to run, log:

Trying to update menu.
Closed.
Updating menu.

Trying to update menu.
Closed.
Updating menu.

Running PaperSpigot 1.12.1 I printed isCancelled(), at first run it said false and then every time it was true, but task continued to execute. Idk what I can to do with that. I also tried:

  1. Cancel it, referring to other static method.
  2. Cancel it in new runTask(Plugin, Runnable)
  3. Cancel with Bukkit.getScheduler().cancelTask(task.getTaskId())

Upvotes: 1

Views: 544

Answers (1)

A1trdX
A1trdX

Reputation: 345

Just solved it. The problem was in overriding old task into hashmap, when player clicked on other item. So it cancelled new task but not old one. I added cancel task and remove it from hashmap when player clicks on item (which must open other gui) or closes the gui. Sorry for wasting your time on my errors.. Thanks to Squiddie for giving me right way.

Upvotes: 1

Related Questions