Makes it possible to auto-delete a closed GUI
This commit is contained in:
parent
836c1b151e
commit
5bc251309a
@ -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 <p>Whether to automatically delete closed GUIs. Useful to prevent RAM leaks</p>
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -56,8 +56,9 @@ public class GUIRegistry {
|
||||
* Registers a GUI as being closed for the given player
|
||||
*
|
||||
* @param player <p>The player that closed a GUI</p>
|
||||
* @param autoDelete <p>Whether to immediately delete the closed GUI</p>
|
||||
*/
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user