From ff8f96a36e62a0850ae357f7cdcdb261d033a82c Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Sun, 16 Apr 2023 17:19:16 +0200 Subject: [PATCH] Fix AbstractWindow#handleCloseEvent not being called on disable --- .../invui/window/AbstractWindow.java | 6 ++-- .../xenondevs/invui/window/WindowManager.java | 32 +++++++++---------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java b/invui-core/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java index 0bb20d0..5a43984 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java @@ -187,7 +187,7 @@ public abstract class AbstractWindow implements Window, GuiParent { throw new IllegalStateException("Window is already closed!"); currentlyOpen = false; - remove(false); + remove(); // handleClosed() might have already been called by open() if the window was replaced by another one if (!hasHandledClose) { @@ -250,7 +250,7 @@ public abstract class AbstractWindow implements Window, GuiParent { && ((SlotElement.InventorySlotElement) element).getInventory() == inventory); } - public void remove(boolean closeForViewer) { + private void remove() { WindowManager.getInstance().removeWindow(this); Arrays.stream(elementsDisplayed) @@ -266,8 +266,6 @@ public abstract class AbstractWindow implements Window, GuiParent { Arrays.stream(getGuis()) .forEach(gui -> gui.removeParent(this)); - - if (closeForViewer) close(); } @Override diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/window/WindowManager.java b/invui-core/src/main/java/xyz/xenondevs/invui/window/WindowManager.java index 689072b..d4a3cde 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/window/WindowManager.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/window/WindowManager.java @@ -26,12 +26,12 @@ public class WindowManager implements Listener { private static WindowManager instance; - private final Map windows = new HashMap<>(); - private final Map openWindows = new HashMap<>(); + private final Map windowsByInventory = new HashMap<>(); + private final Map windowsByPlayer = new HashMap<>(); private WindowManager() { Bukkit.getPluginManager().registerEvents(this, InvUI.getInstance().getPlugin()); - InvUI.getInstance().addDisableHandler(() -> new HashSet<>(windows.values()).forEach(window -> window.remove(true))); + InvUI.getInstance().addDisableHandler(() -> new HashSet<>(windowsByPlayer.values()).forEach(AbstractWindow::close)); } /** @@ -50,7 +50,7 @@ public class WindowManager implements Listener { * @param window The {@link AbstractWindow} to add */ public void addWindow(AbstractWindow window) { - windows.put(window.getInventories()[0], window); + windowsByInventory.put(window.getInventories()[0], window); } /** @@ -60,7 +60,7 @@ public class WindowManager implements Listener { * @param window The {@link AbstractWindow} to remove */ public void removeWindow(AbstractWindow window) { - windows.remove(window.getInventories()[0]); + windowsByInventory.remove(window.getInventories()[0]); } /** @@ -71,7 +71,7 @@ public class WindowManager implements Listener { */ @Nullable public Window getWindow(Inventory inventory) { - return windows.get(inventory); + return windowsByInventory.get(inventory); } /** @@ -82,25 +82,25 @@ public class WindowManager implements Listener { */ @Nullable public Window getOpenWindow(Player player) { - return openWindows.get(player); + return windowsByPlayer.get(player); } /** - * Gets a set of all registered {@link Window Windows}. + * Gets a set of all open {@link Window Windows}. * * @return A set of all {@link Window Windows} */ public Set getWindows() { - return new HashSet<>(windows.values()); + return new HashSet<>(windowsByInventory.values()); } /** - * Gets a set of all currently opened {@link Window Windows}. - * - * @return A set of all opened {@link Window Windows} + * Gets a set of all open {@link Window Windows}. + * @deprecated Use {@link #getWindows()} instead */ + @Deprecated public Set getOpenWindows() { - return new HashSet<>(openWindows.values()); + return getWindows(); } @EventHandler @@ -127,7 +127,7 @@ public class WindowManager implements Listener { window.handleCloseEvent(player); } - openWindows.remove(player); + windowsByPlayer.remove(player); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @@ -135,7 +135,7 @@ public class WindowManager implements Listener { AbstractWindow window = (AbstractWindow) getWindow(event.getInventory()); if (window != null) { window.handleOpenEvent(event); - openWindows.put((Player) event.getPlayer(), window); + windowsByPlayer.put((Player) event.getPlayer(), window); } } @@ -145,7 +145,7 @@ public class WindowManager implements Listener { AbstractWindow window = (AbstractWindow) getOpenWindow(player); if (window != null) { window.handleCloseEvent(player); - openWindows.remove(player); + windowsByPlayer.remove(player); } }