mirror of
https://github.com/filoghost/ChestCommands.git
synced 2025-02-19 21:11:42 +01:00
Refactoring
This commit is contained in:
parent
2e2d6ad75f
commit
8f098fc961
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user