Refactoring

This commit is contained in:
filoghost 2020-06-15 19:53:59 +02:00
parent 2e2d6ad75f
commit 8f098fc961
6 changed files with 51 additions and 42 deletions

View File

@ -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<? extends Icon> 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);

View File

@ -95,26 +95,28 @@ public class AdvancedIconMenu extends BaseIconMenu<AdvancedIcon> {
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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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());
}
}