package org.arkham.cs.interfaces; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.arkham.cs.CosmeticSuite; import org.arkham.cs.gui.Category; import org.arkham.cs.gui.ClickableItem; import org.arkham.cs.gui.ItemFactory; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; public abstract class Button { public abstract void onClick(Player player); private int slot, id; private Category cat; private ItemStack item; private String permission; private static HashMap<Category, HashMap<ItemStack, Button>> buttons = new HashMap<>(); public static HashMap<String, Button> buttonPerms = new HashMap<>(); public static ArrayList<Button> allButtons = new ArrayList<>(); public Button(int slot, Category cat, String permission, ItemStack item){ this.slot = slot; if(!buttons.isEmpty()){ id = buttons.size() + 1; } else { id = 1; } this.cat = cat; this.item = item; this.permission = permission; HashMap<ItemStack, Button> bs = buttons.get(cat) == null ? new HashMap<ItemStack, Button>() : buttons.get(cat); bs.put(item, this); allButtons.add(this); buttons.put(cat, bs); buttonPerms.put(permission, this); } public String getPermission() { return permission; } public ItemStack getDisplay(){ return item; } public ClickableItem noPermissionItem(){ ItemStack item = ItemFactory.create(Material.STAINED_GLASS_PANE, ChatColor.RED + name(getDisplay()), 1, (byte) 14, ChatColor.RED + "You do not own this item"); return new ClickableItem(item) { @Override public void doClick(Player player) { CosmeticSuite cs = CosmeticSuite.getInstance(); FileConfiguration config = cs.getConfig(); String link = config.getString("buy-link", CosmeticSuite.PREFIX + "Purchase this rank at " + ChatColor.UNDERLINE + "buy.arkhamnetwork.org"); link = ChatColor.translateAlternateColorCodes('&', link); player.sendMessage(link); player.closeInventory(); } }; } private String name(ItemStack item){ return "Locked"; } public int getSlot(){ return slot; } public void setSlot(int slot){ this.slot = slot; } public int getId(){ return id; } public void setItem(ItemStack item){ this.item = item; HashMap<ItemStack, Button> bs = buttons.get(cat); bs.put(item, this); buttons.put(cat, bs); } public Category getCategory() { return cat; } public static Button getButton(Category cat, ItemStack name){ return buttons.get(cat).get(name); } public static Button fromPermission(String perm){ return buttonPerms.get(perm); } public static String serialze(List<Button> buttons){ StringBuilder builder = new StringBuilder(); int buttonsSize = buttons.size(); for(int i = 0; i < buttonsSize; i++){ Button button = buttons.get(i); builder.append(button.getPermission() + ","); } return builder.toString(); } public static List<Button> deserialize(String permissions){ if(buttonPerms.isEmpty()){ System.out.println("ButtonPerms is empty, filling it"); for(Button button : allButtons){ buttonPerms.put(button.getPermission(), button); } } if(!permissions.contains(",") ){ System.out.println("No comma, must be " + permissions); return new ArrayList<>(); } String[] str = permissions.split(","); List<Button> buttons = new ArrayList<>(); for(int i = 0; i < str.length; i++){ String perm = str[i]; Button button = fromPermission(perm); buttons.add(button); } return buttons; } }