From 8f098fc961ae3cb032314ec1a65d6c2881ef81be Mon Sep 17 00:00:00 2001 From: filoghost Date: Mon, 15 Jun 2020 19:53:59 +0200 Subject: [PATCH] Refactoring --- .../listener/InventoryListener.java | 15 +++---- .../chestcommands/menu/AdvancedIconMenu.java | 16 ++++--- .../chestcommands/menu/MenuManager.java | 43 ++++++++++--------- .../chestcommands/menu/MenuView.java | 6 +-- .../menu/inventory/MenuInventoryHolder.java | 2 + .../chestcommands/task/RefreshMenusTask.java | 11 ++++- 6 files changed, 51 insertions(+), 42 deletions(-) diff --git a/Plugin/src/main/java/me/filoghost/chestcommands/listener/InventoryListener.java b/Plugin/src/main/java/me/filoghost/chestcommands/listener/InventoryListener.java index 0b888df..973eb4f 100644 --- a/Plugin/src/main/java/me/filoghost/chestcommands/listener/InventoryListener.java +++ b/Plugin/src/main/java/me/filoghost/chestcommands/listener/InventoryListener.java @@ -53,23 +53,20 @@ public class InventoryListener implements Listener { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false) public void onEarlyInventoryClick(InventoryClickEvent event) { - BaseIconMenu menu = MenuManager.getOpenMenu(event.getInventory()); - if (menu == null) { - return; + if (MenuManager.isMenuInventory(event.getInventory())) { + // Cancel the event as early as possible + event.setCancelled(true); } - - // Cancel the event as early as possible - event.setCancelled(true); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = false) public void onLateInventoryClick(InventoryClickEvent event) { Inventory inventory = event.getInventory(); - BaseIconMenu menu = MenuManager.getOpenMenu(inventory); - if (menu == null) { + BaseIconMenu menu = MenuManager.getOpenMenu(inventory); + if (menu == null) { return; } - + // Make sure the event is still cancelled (in case another plugin wrongly uncancels it) event.setCancelled(true); diff --git a/Plugin/src/main/java/me/filoghost/chestcommands/menu/AdvancedIconMenu.java b/Plugin/src/main/java/me/filoghost/chestcommands/menu/AdvancedIconMenu.java index 09039cf..c1514fa 100644 --- a/Plugin/src/main/java/me/filoghost/chestcommands/menu/AdvancedIconMenu.java +++ b/Plugin/src/main/java/me/filoghost/chestcommands/menu/AdvancedIconMenu.java @@ -95,26 +95,28 @@ public class AdvancedIconMenu extends BaseIconMenu { if (icon.hasViewPermission() || icon.hasVariables()) { // Then we have to refresh it - refreshIcon(player, inventory, icon, i); + ItemStack currentItem = inventory.getItem(i); + ItemStack newItem = refreshIcon(player, icon, currentItem); + inventory.setItem(i, newItem); } } } - private void refreshIcon(Player player, Inventory inventory, AdvancedIcon icon, int inventorySlot) { + private ItemStack refreshIcon(Player player, AdvancedIcon icon, ItemStack currentItem) { if (icon.canViewIcon(player)) { - if (inventory.getItem(inventorySlot) == null) { - ItemStack newItem = hideAttributes(icon.createItemStack(player)); - inventory.setItem(inventorySlot, newItem); + if (currentItem == null) { + return hideAttributes(icon.createItemStack(player)); } else { // Performance, only update name and lore - ItemStack oldItem = hideAttributes(inventory.getItem(inventorySlot)); + ItemStack oldItem = hideAttributes(currentItem); ItemMeta meta = oldItem.getItemMeta(); meta.setDisplayName(icon.calculateName(player)); meta.setLore(icon.calculateLore(player)); oldItem.setItemMeta(meta); + return oldItem; } } else { - inventory.setItem(inventorySlot, null); + return null; } } diff --git a/Plugin/src/main/java/me/filoghost/chestcommands/menu/MenuManager.java b/Plugin/src/main/java/me/filoghost/chestcommands/menu/MenuManager.java index fa421f8..52b32d8 100644 --- a/Plugin/src/main/java/me/filoghost/chestcommands/menu/MenuManager.java +++ b/Plugin/src/main/java/me/filoghost/chestcommands/menu/MenuManager.java @@ -89,31 +89,28 @@ public class MenuManager { return Collections.unmodifiableCollection(menusByFile.keySet()); } + public static boolean isMenuInventory(Inventory inventory) { + return getMenuInventoryHolder(inventory) != null; + } public static BaseIconMenu getOpenMenu(Player player) { - InventoryView view = player.getOpenInventory(); - if (view == null) { + MenuView menuView = getOpenMenuView(player); + if (menuView != null) { + return menuView.getMenu(); + } else { return null; } - - BaseIconMenu openMenu = getOpenMenu(view.getTopInventory()); - if (openMenu == null) { - openMenu = getOpenMenu(view.getBottomInventory()); - } - - return openMenu; } - public static BaseIconMenu getOpenMenu(Inventory inventory) { - if (!(inventory.getHolder() instanceof MenuInventoryHolder)) { + MenuView menuView = getOpenMenuView(inventory); + if (menuView != null) { + return menuView.getMenu(); + } else { return null; } - - return ((MenuInventoryHolder) inventory.getHolder()).getIconMenu(); } - public static MenuView getOpenMenuView(Player player) { InventoryView view = player.getOpenInventory(); if (view == null) { @@ -129,17 +126,21 @@ public class MenuManager { } - private static MenuView getOpenMenuView(Inventory inventory) { - if (!(inventory.getHolder() instanceof MenuInventoryHolder)) { + public static MenuView getOpenMenuView(Inventory inventory) { + MenuInventoryHolder inventoryHolder = getMenuInventoryHolder(inventory); + if (inventoryHolder != null) { + return new MenuView(inventoryHolder.getIconMenu(), inventory); + } else { return null; } - - MenuInventoryHolder menuInventoryHolder = (MenuInventoryHolder) inventory.getHolder(); - if (!(menuInventoryHolder.getIconMenu() instanceof AdvancedIconMenu)) { + } + + private static MenuInventoryHolder getMenuInventoryHolder(Inventory inventory) { + if (inventory.getHolder() instanceof MenuInventoryHolder) { + return (MenuInventoryHolder) inventory.getHolder(); + } else { return null; } - - return new MenuView((AdvancedIconMenu) menuInventoryHolder.getIconMenu(), inventory); } } diff --git a/Plugin/src/main/java/me/filoghost/chestcommands/menu/MenuView.java b/Plugin/src/main/java/me/filoghost/chestcommands/menu/MenuView.java index 62a272f..3df406a 100644 --- a/Plugin/src/main/java/me/filoghost/chestcommands/menu/MenuView.java +++ b/Plugin/src/main/java/me/filoghost/chestcommands/menu/MenuView.java @@ -18,15 +18,15 @@ import org.bukkit.inventory.Inventory; public class MenuView { - private final AdvancedIconMenu menu; + private final BaseIconMenu menu; private final Inventory inventory; - public MenuView(AdvancedIconMenu menu, Inventory inventory) { + public MenuView(BaseIconMenu menu, Inventory inventory) { this.menu = menu; this.inventory = inventory; } - public AdvancedIconMenu getMenu() { + public BaseIconMenu getMenu() { return menu; } diff --git a/Plugin/src/main/java/me/filoghost/chestcommands/menu/inventory/MenuInventoryHolder.java b/Plugin/src/main/java/me/filoghost/chestcommands/menu/inventory/MenuInventoryHolder.java index 05946c8..66c52ed 100644 --- a/Plugin/src/main/java/me/filoghost/chestcommands/menu/inventory/MenuInventoryHolder.java +++ b/Plugin/src/main/java/me/filoghost/chestcommands/menu/inventory/MenuInventoryHolder.java @@ -19,6 +19,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; import me.filoghost.chestcommands.menu.BaseIconMenu; +import me.filoghost.chestcommands.util.Preconditions; /** * This class links an IconMenu with an Inventory, via InventoryHolder. @@ -28,6 +29,7 @@ public class MenuInventoryHolder implements InventoryHolder { private final BaseIconMenu iconMenu; public MenuInventoryHolder(BaseIconMenu iconMenu) { + Preconditions.notNull(iconMenu, "iconMenu"); this.iconMenu = iconMenu; } diff --git a/Plugin/src/main/java/me/filoghost/chestcommands/task/RefreshMenusTask.java b/Plugin/src/main/java/me/filoghost/chestcommands/task/RefreshMenusTask.java index 7e0aa0e..8a6c206 100644 --- a/Plugin/src/main/java/me/filoghost/chestcommands/task/RefreshMenusTask.java +++ b/Plugin/src/main/java/me/filoghost/chestcommands/task/RefreshMenusTask.java @@ -17,6 +17,7 @@ package me.filoghost.chestcommands.task; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import me.filoghost.chestcommands.menu.AdvancedIconMenu; import me.filoghost.chestcommands.menu.MenuManager; import me.filoghost.chestcommands.menu.MenuView; @@ -32,8 +33,14 @@ public class RefreshMenusTask implements Runnable { return; } - if (elapsedTenths % openMenuView.getMenu().getRefreshTicks() == 0) { - openMenuView.getMenu().refresh(player, openMenuView.getInventory()); + if (!(openMenuView.getMenu() instanceof AdvancedIconMenu)) { + return; + } + + AdvancedIconMenu iconMenu = (AdvancedIconMenu) openMenuView.getMenu(); + + if (elapsedTenths % iconMenu.getRefreshTicks() == 0) { + iconMenu.refresh(player, openMenuView.getInventory()); } }