package me.colmalle.classcombat.utils.gui; import java.util.ArrayList; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryCloseEvent.Reason; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionType; import org.bukkit.scheduler.BukkitRunnable; import me.colmalle.classcombat.ClassCombat; import me.colmalle.classcombat.utils.ClassUtils; import me.colmalle.classcombat.utils.ClassUtils.Classes; import me.colmalle.classcombat.utils.MessageManager; import me.colmalle.classcombat.utils.Utils; public class ClassPickerGui implements Menu { private ClassCombat plugin; private Inventory inventory; private Player player; private boolean firstJoin; public ClassPickerGui(Player player, boolean firstJoin, ClassCombat plugin) { this.plugin = plugin; inventory = plugin.getServer().createInventory(this, 9, "Class Picker"); this.player = player; this.firstJoin = firstJoin; setItems(this.player); } private void setItems(Player player) { ItemStack assassinItem = new ItemStack(Material.LEATHER_BOOTS, 1); ItemMeta meta = assassinItem.getItemMeta(); meta.setDisplayName(ChatColor.GRAY + ClassUtils.Classes.ASSASSIN.displayName); ArrayList lore = new ArrayList(); lore.add(ChatColor.RESET + "" + ChatColor.DARK_RED + "Strength: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".assassin.str")); lore.add(ChatColor.RESET + "" + ChatColor.GRAY + "Defence: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".assassin.def")); lore.add(ChatColor.RESET + "" + ChatColor.AQUA + "Speed: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".assassin.dex")); lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Left click to choose"); lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Right click to reset attributes"); meta.setLore(lore); assassinItem.setItemMeta(meta); inventory.setItem(2, assassinItem); ItemStack warriorItem = new ItemStack(Material.IRON_SWORD, 1); meta = warriorItem.getItemMeta(); meta.setDisplayName(ChatColor.GRAY + ClassUtils.Classes.WARRIOR.displayName); lore = new ArrayList(); lore.add(ChatColor.RESET + "" + ChatColor.DARK_RED + "Strength: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".warrior.str")); lore.add(ChatColor.RESET + "" + ChatColor.GRAY + "Defence: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".warrior.def")); lore.add(ChatColor.RESET + "" + ChatColor.AQUA + "Speed: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".warrior.dex")); lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Left click to choose"); lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Right click to reset attributes"); meta.setLore(lore); warriorItem.setItemMeta(meta); inventory.setItem(4, warriorItem); ItemStack paladinItem = new ItemStack(Material.POTION, 1); PotionMeta potMeta = (PotionMeta) paladinItem.getItemMeta(); potMeta.setBasePotionData(new PotionData(PotionType.FIRE_RESISTANCE)); potMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); potMeta.setDisplayName(ChatColor.GRAY + ClassUtils.Classes.PALADIN.displayName); lore = new ArrayList(); lore.add(ChatColor.RESET + "" + ChatColor.DARK_RED + "Strength: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".paladin.str")); lore.add(ChatColor.RESET + "" + ChatColor.GRAY + "Defence: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".paladin.def")); lore.add(ChatColor.RESET + "" + ChatColor.AQUA + "Speed: " + plugin.playerDataConfig.getInt(player.getUniqueId().toString() + ".paladin.dex")); lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Left click to choose"); lore.add(ChatColor.RESET + "" + ChatColor.YELLOW + "Right click to reset attributes"); potMeta.setLore(lore); paladinItem.setItemMeta(potMeta); inventory.setItem(6, paladinItem); if (this.firstJoin) { ItemStack disconnectItem = new ItemStack(Material.GRAY_DYE, 1); meta = disconnectItem.getItemMeta(); meta.setDisplayName(ChatColor.RED + "Disconnect"); disconnectItem.setItemMeta(meta); inventory.setItem(8, disconnectItem); } else { ItemStack exitItem = new ItemStack(Material.ARROW, 1); meta = exitItem.getItemMeta(); meta.setDisplayName(ChatColor.GREEN + "Exit"); exitItem.setItemMeta(meta); inventory.setItem(8, exitItem); } ItemStack fillItem = new ItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE, 1); meta = fillItem.getItemMeta(); meta.setDisplayName(ChatColor.RESET + " "); fillItem.setItemMeta(meta); Utils.fillEmpty(inventory, fillItem); } @Override public boolean onClick(Player player, int slot, ClickType type) { if (slot == 2) { if (type == ClickType.LEFT) { if (plugin.classes.get(player.getUniqueId()) == Classes.ASSASSIN && !this.firstJoin) { MessageManager.playerBad(player, "You are already an " + ClassUtils.Classes.ASSASSIN.displayName); return true; } if (!this.firstJoin) { plugin.playerDataConfig.set(player.getUniqueId() + "." + plugin.classes.get(player.getUniqueId()).name + ".location", player.getLocation()); } plugin.classes.put(player.getUniqueId(), Classes.ASSASSIN); player.closeInventory(); player.teleport(plugin.playerDataConfig.getLocation(player.getUniqueId().toString() + "." + ClassUtils.Classes.ASSASSIN.name + ".location")); MessageManager.playerGood(player, "You are now an " + ChatColor.GRAY + ClassUtils.Classes.ASSASSIN.displayName); return true; } else if (type == ClickType.RIGHT) { player.closeInventory(); AreYouSureGui gui = new AreYouSureGui(player, firstJoin, Classes.ASSASSIN, plugin); player.openInventory(gui.getInventory()); return true; } return true; } if (slot == 4) { if (type == ClickType.LEFT) { if (plugin.classes.get(player.getUniqueId()) == Classes.WARRIOR && !this.firstJoin) { MessageManager.playerBad(player, "You are already a " + ClassUtils.Classes.WARRIOR.displayName); return true; } if (!this.firstJoin) { plugin.playerDataConfig.set(player.getUniqueId() + "." + plugin.classes.get(player.getUniqueId()).name + ".location", player.getLocation()); } plugin.classes.put(player.getUniqueId(), Classes.WARRIOR); player.closeInventory(); player.teleport(plugin.playerDataConfig.getLocation(player.getUniqueId().toString() + "." + ClassUtils.Classes.WARRIOR.name + ".location")); MessageManager.playerGood(player, "You are now a " + ChatColor.GRAY + ClassUtils.Classes.WARRIOR.displayName); return true; } else if (type == ClickType.RIGHT) { player.closeInventory(); AreYouSureGui gui = new AreYouSureGui(player, firstJoin, Classes.WARRIOR, plugin); player.openInventory(gui.getInventory()); return true; } return true; } if (slot == 6) { if (type == ClickType.LEFT) { if (plugin.classes.get(player.getUniqueId()) == Classes.PALADIN && !this.firstJoin) { MessageManager.playerBad(player, "You are already an " + ClassUtils.Classes.PALADIN.displayName); return true; } if (!this.firstJoin) { plugin.playerDataConfig.set(player.getUniqueId() + "." + plugin.classes.get(player.getUniqueId()).name + ".location", player.getLocation()); } plugin.classes.put(player.getUniqueId(), Classes.PALADIN); player.closeInventory(); player.teleport(plugin.playerDataConfig.getLocation(player.getUniqueId().toString() + "." + ClassUtils.Classes.PALADIN.name + ".location")); MessageManager.playerGood(player, "You are now a " + ChatColor.GRAY + ClassUtils.Classes.PALADIN.displayName); return true; } else if (type == ClickType.RIGHT) { player.closeInventory(); AreYouSureGui gui = new AreYouSureGui(player, firstJoin, Classes.PALADIN, plugin); player.openInventory(gui.getInventory()); return true; } return true; } if (slot == 8 && firstJoin) { player.kickPlayer("You must choose a class"); return true; } if (slot == 8 && !firstJoin) { player.closeInventory(); AttributesMenuGui gui = new AttributesMenuGui(player, plugin); player.openInventory(gui.getInventory()); return true; } return true; } @Override public void onClose(Player player, Reason reason) { if (this.firstJoin && reason != Reason.PLUGIN) { new BukkitRunnable() { @Override public void run() { player.openInventory(inventory); } }.runTaskLater(plugin, 1L); return; } ClassUtils.initClass(player, plugin); } @Override public Inventory getInventory() { return this.inventory; } }