package nl.sugcube.crystalquest.inventorymenu; import nl.sugcube.crystalquest.Broadcast; import nl.sugcube.crystalquest.CrystalQuest; import nl.sugcube.crystalquest.game.Classes; import nl.sugcube.crystalquest.sba.SMeth; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * @author SugarCaney */ public class SelectClass { public static CrystalQuest plugin; /** * CONSTRUCTOR * Passes through the instance of the plugin. * * @param instance * (CrystalQuest) The instance of the plugin. */ public SelectClass(CrystalQuest instance) { plugin = instance; } /** * Gets the config-name of a certain class (technical name) * * @param trivialName * (String) The trivial name of the class (defined in the name-property) * @return (String) The technical name. */ public String getTechnicalClassName(String trivialName) { for (String key : plugin.getConfig().getConfigurationSection("kit").getKeys(false)) { if (SMeth.setColours(plugin.getConfig().getString("kit." + key + ".name")).equals(trivialName)) { return key; } } return null; } /** * Sets a random class for the player. * * @param player * (Player) The target player. * @return void */ public void setRandomClass(Player player) { String chosenClass = ""; boolean isOk = false; while (!isOk) { Random ran = new Random(); List<String> classes = new ArrayList<String>(); classes.addAll(plugin.getConfig().getConfigurationSection("kit").getKeys(false)); int classId = ran.nextInt(classes.size()); String pickedClass = classes.get(classId); if (player.hasPermission("crystalquest.kit." + pickedClass) || player.hasPermission("crystalquest.admin") || player.hasPermission("crystalquest.staff")) { chosenClass = pickedClass; isOk = true; } } plugin.im.setPlayerClass(player, chosenClass); } /** * Opens the class menu for a specific player. * * @param p * (Player) The target player. * @return void */ public void openMenu(Player p) { List<String> classes = new ArrayList<>(); /* * Gets a list of all classes' names. */ for (String key : plugin.getConfig().getConfigurationSection("kit").getKeys(false)) { if (Classes.hasPermission(p, key)) { classes.add(key); } } /* * Checks and sets the size the inventory has to be to fit in all the classes. */ int invSize = 9; for (int i = 54; i >= 9; i -= 9) { if (classes.size() < i) { invSize = i; } } Inventory inv = Bukkit.createInventory(p, invSize, "Pick a Class"); //Adds the random-class ItemStack randomItem = new ItemStack(Material.REDSTONE, 1); ItemMeta randomMeta = randomItem.getItemMeta(); randomMeta.setDisplayName("Random Class"); randomItem.setItemMeta(randomMeta); inv.addItem(randomItem); /* * Fills the inventory with the avaiable classes. */ for (String s : classes) { ItemStack icon = plugin.sh.toItemStack(plugin.getConfig().getString("kit." + s + ".icon")); ItemMeta im = icon.getItemMeta(); String name = plugin.getConfig().getString("kit." + s + ".name"); im.setDisplayName(SMeth.setColours(name)); if (plugin.getConfig().getString("kit." + s + ".lore") != "") { List<String> lore = new ArrayList<>(); String[] lines = plugin.getConfig().getString("kit." + s + ".lore").split("%nl%"); for (String str : lines) { lore.add(SMeth.setColours(str)); } if (!Classes.hasPermission(p, s)) { lore.add(ChatColor.RESET + "" + ChatColor.RED + Broadcast.get("menu.not-available")); } im.setLore(lore); } icon.setItemMeta(im); inv.addItem(icon); } /* * Shows the Inventory Menu. */ p.openInventory(inv); } }