From d3094053eb208251cdb223a3f39958da02da8c1b Mon Sep 17 00:00:00 2001 From: BONNe Date: Thu, 9 Jul 2020 23:25:25 +0300 Subject: [PATCH] Fixes #239 --- .../panel/admin/ListLibraryGUI.java | 55 ++++++++++++++++++- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/src/main/java/world/bentobox/challenges/panel/admin/ListLibraryGUI.java b/src/main/java/world/bentobox/challenges/panel/admin/ListLibraryGUI.java index 179cbb1..d153da3 100644 --- a/src/main/java/world/bentobox/challenges/panel/admin/ListLibraryGUI.java +++ b/src/main/java/world/bentobox/challenges/panel/admin/ListLibraryGUI.java @@ -7,6 +7,7 @@ import java.util.List; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.scheduler.BukkitTask; import world.bentobox.bentobox.api.panels.PanelItem; import world.bentobox.bentobox.api.panels.builders.PanelBuilder; @@ -118,7 +119,7 @@ public class ListLibraryGUI extends CommonGUI } panelBuilder.item(4, this.createDownloadNow()); - panelBuilder.item(44, this.returnButton); + panelBuilder.item(44, this.createReturnButton()); panelBuilder.build(); } @@ -153,10 +154,16 @@ public class ListLibraryGUI extends CommonGUI } else { - this.addon.getWebManager().requestCatalogGitHubData(false); + this.addon.getWebManager().requestCatalogGitHubData(this.clearCache); + + // Fix multiclick issue. + if (this.updateTask != null) + { + this.updateTask.cancel(); + } // add some delay to rebuilding gui. - this.addon.getPlugin().getServer().getScheduler().runTaskLaterAsynchronously( + this.updateTask = this.addon.getPlugin().getServer().getScheduler().runTaskLater( this.addon.getPlugin(), this::build, 100L); @@ -169,6 +176,33 @@ public class ListLibraryGUI extends CommonGUI } + /** + * This creates return button, that allows to exist or return to parent gui, + * @return PanelItem for return button. + */ + private PanelItem createReturnButton() + { + return new PanelItemBuilder(). + name(this.user.getTranslation("challenges.gui.buttons.return")). + icon(Material.OAK_DOOR). + clickHandler((panel, user1, clickType, i) -> { + if (this.updateTask != null) + { + this.updateTask.cancel(); + } + + if (this.parentGUI == null) + { + this.user.closeInventory(); + return true; + } + + this.parentGUI.build(); + return true; + }).build(); + } + + /** * This method creates button for given library entry. * @param libraryEntry LibraryEntry which button must be created. @@ -199,10 +233,20 @@ public class ListLibraryGUI extends CommonGUI if (this.parentGUI != null) { + if (this.updateTask != null) + { + this.updateTask.cancel(); + } + this.parentGUI.build(); } else { + if (this.updateTask != null) + { + this.updateTask.cancel(); + } + this.user.closeInventory(); } } @@ -252,6 +296,11 @@ public class ListLibraryGUI extends CommonGUI */ private boolean clearCache; + /** + * Stores update task that is triggered. + */ + private BukkitTask updateTask = null; + /** * This variable will protect against spam-click. */