diff --git a/src/main/java/net/knarcraft/knargui/GUIListener.java b/src/main/java/net/knarcraft/knargui/GUIListener.java index d05c604..6b18549 100644 --- a/src/main/java/net/knarcraft/knargui/GUIListener.java +++ b/src/main/java/net/knarcraft/knargui/GUIListener.java @@ -13,6 +13,17 @@ import org.bukkit.event.player.PlayerQuitEvent; */ public class GUIListener implements Listener { + private final boolean autoDelete; + + /** + * Instantiates a new GUI listener + * + * @param autoDelete

Whether to automatically delete closed GUIs. Useful to prevent RAM leaks

+ */ + public GUIListener(boolean autoDelete) { + this.autoDelete = autoDelete; + } + @EventHandler public void onInventoryClick(InventoryClickEvent event) { HumanEntity clicker = event.getWhoClicked(); @@ -41,12 +52,12 @@ public class GUIListener implements Listener { if (!(event.getPlayer() instanceof Player player)) { return; } - GUIRegistry.closeGUI(player); + GUIRegistry.closeGUI(player, autoDelete); } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - GUIRegistry.closeGUI(event.getPlayer()); + GUIRegistry.closeGUI(event.getPlayer(), autoDelete); } } diff --git a/src/main/java/net/knarcraft/knargui/GUIRegistry.java b/src/main/java/net/knarcraft/knargui/GUIRegistry.java index 0a6c738..6d8df99 100644 --- a/src/main/java/net/knarcraft/knargui/GUIRegistry.java +++ b/src/main/java/net/knarcraft/knargui/GUIRegistry.java @@ -55,9 +55,10 @@ public class GUIRegistry { /** * Registers a GUI as being closed for the given player * - * @param player

The player that closed a GUI

+ * @param player

The player that closed a GUI

+ * @param autoDelete

Whether to immediately delete the closed GUI

*/ - public static void closeGUI(Player player) { + public static void closeGUI(Player player, boolean autoDelete) { //Run the close action if an anvil GUI is used AbstractGUI gui = getOpenGUI(player); if (gui instanceof AnvilGUI anvilGUI) { @@ -65,6 +66,10 @@ public class GUIRegistry { } //Un-register the player's open GUI openGUIs.remove(player.getUniqueId()); + + if (gui != null && autoDelete) { + deleteGUI(gui.getUuid()); + } } /**