package com.walrusone.skywarsreloaded.listeners; import com.google.common.collect.Maps; import com.walrusone.skywarsreloaded.menus.IconMenu; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.ItemStack; import java.util.HashSet; import java.util.Map; //https://github.com/Wietje/SkyWars/blob/master/src/main/java/vc/pvp/skywars/controllers/IconMenuController.java/ public class IconMenuController implements Listener { private final Map<Player, IconMenu> menu = Maps.newHashMap(); public IconMenuController() { } public void create(Player player, String name, int size, IconMenu.OptionClickEventHandler handler) { if (player != null) { destroy(player); menu.put(player, new IconMenu(name, size, handler)); } } public IconMenu getMenu(Player player) { return menu.get(player); } public void show(Player player) { if (menu.containsKey(player)) { menu.get(player).open(player); } } public void update(final Player player) { if (menu.containsKey(player)) { menu.get(player).update(player); } } public void setOption(Player player, int position, ItemStack icon, String name, String[] info) { if (menu.containsKey(player)) { menu.get(player).setOption(position, icon, name, info); } } public String[] getOptions(Player player) { if (menu.containsKey(player)) { return menu.get(player).getOptions(); } return null; } public void destroy(Player player) { if (menu.containsKey(player)) { menu.remove(player).destroy(); player.getOpenInventory().close(); } } public void destroyAll() { for (Player player : new HashSet<Player>(menu.keySet())) { destroy(player); } } public boolean has(Player player) { return menu.containsKey(player); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onInventoryClick(InventoryClickEvent event) { if (event.getWhoClicked() instanceof Player && menu.containsKey(event.getWhoClicked())) { menu.get(event.getWhoClicked()).onInventoryClick(event); } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onInventoryClose(InventoryCloseEvent event) { if (event.getPlayer() instanceof Player && menu.containsKey(event.getPlayer())) { destroy((Player) event.getPlayer()); } } }