Reputation: 345
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:
Upvotes: 1
Views: 544
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