package com.leontg77.uhc; import static com.leontg77.uhc.Main.plugin; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Set; import java.util.TimeZone; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; 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.SkullMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.scheduler.BukkitRunnable; import com.leontg77.uhc.User.Rank; import com.leontg77.uhc.User.Stat; import com.leontg77.uhc.scenario.Scenario; import com.leontg77.uhc.scenario.ScenarioManager; import com.leontg77.uhc.utils.DateUtils; import com.leontg77.uhc.utils.GameUtils; import com.leontg77.uhc.utils.NameUtils; import com.leontg77.uhc.utils.NumberUtils; import com.leontg77.uhc.utils.PlayerUtils; /** * The inventory managing class. * <p> * This class contains methods for opening the selector inventory, game info inventory, hall of fame inventory and player inventories. * * @author LeonTG77 */ public class InvGUI { private Settings settings = Settings.getInstance(); private static InvGUI manager = new InvGUI(); public HashMap<Player, HashMap<Integer, Inventory>> pagesForPlayer = new HashMap<Player, HashMap<Integer, Inventory>>(); public HashMap<Player, Integer> currentPage = new HashMap<Player, Integer>(); /** * Gets the instance of this class * * @return The instance. */ public static InvGUI getInstance() { return manager; } public Inventory openStats(Player player, User user) { Inventory inv = Bukkit.createInventory(user.getPlayer(), InventoryType.HOPPER, "» §7" + user.getPlayer().getName() + "'s Stats"); ArrayList<String> lore = new ArrayList<String>(); ItemStack general = new ItemStack (Material.SIGN); ItemMeta generalMeta = general.getItemMeta(); generalMeta.setDisplayName("§8» §6General Stats §8«"); lore.add(" "); lore.add("§8» §7Games played: §a" + user.getStat(Stat.GAMESPLAYED)); lore.add("§8» §7Wins: §a" + user.getStat(Stat.WINS)); lore.add(" "); lore.add("§8» §7Hostile kills: §a" + user.getStat(Stat.HOSTILEMOBKILLS)); lore.add("§8» §7Animal kills: §a" + user.getStat(Stat.ANIMALKILLS)); lore.add("§8» §7Damage taken: §a" + (((double) user.getStat(Stat.DAMAGETAKEN)) / 2)); lore.add(" "); generalMeta.setLore(lore); general.setItemMeta(generalMeta); inv.setItem(0, general); lore.clear(); ItemStack pvpmining = new ItemStack (Material.DIAMOND_AXE); ItemMeta pvpminingMeta = pvpmining.getItemMeta(); pvpminingMeta.setDisplayName("§8» §6PvP & Mining Stats §8«"); lore.add(" "); lore.add("§8» §7Highest Arena Killstreak: §a" + user.getStat(Stat.ARENAKILLSTREAK)); lore.add("§8» §7Highest Killstreak: §a" + user.getStat(Stat.KILLSTREAK)); lore.add(" "); lore.add("§8» §7Kills: §a" + user.getStat(Stat.KILLS)); lore.add("§8» §7Deaths: §a" + user.getStat(Stat.DEATHS)); if (user.getStat(Stat.DEATHS) == 0) { lore.add("§8» §7KDR: §a" + user.getStat(Stat.KILLS)); } else { lore.add("§8» §7KDR: §a" + user.getStat(Stat.KILLS) / user.getStat(Stat.DEATHS)); } lore.add(" "); lore.add("§8» §7Diamonds mined: §a" + user.getStat(Stat.DIAMONDS)); lore.add("§8» §7Gold mined: §a" + user.getStat(Stat.GOLD)); lore.add(" "); lore.add("§8» §7Arena Kills: §a" + user.getStat(Stat.ARENAKILLS)); lore.add("§8» §7Arena Deaths: §a" + user.getStat(Stat.ARENADEATHS)); if (user.getStat(Stat.ARENADEATHS) == 0) { lore.add("§8» §7Arena KDR: §a" + user.getStat(Stat.ARENAKILLS)); } else { lore.add("§8» §7Arena KDR: §a" + user.getStat(Stat.ARENAKILLS) / user.getStat(Stat.ARENADEATHS)); } lore.add(" "); pvpminingMeta.setLore(lore); pvpminingMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS); pvpminingMeta.addEnchant(Enchantment.DURABILITY, 1, true); pvpmining.setItemMeta(pvpminingMeta); inv.setItem(2, pvpmining); lore.clear(); ItemStack misc = new ItemStack (Material.NETHER_STALK); ItemMeta miscMeta = misc.getItemMeta(); miscMeta.setDisplayName("§8» §6Misc Stats §8«"); lore.add(" "); lore.add("§8» §7Golden Apples eaten: §a" + user.getStat(Stat.GOLDENAPPLESEATEN)); lore.add("§8» §7Golden Heads eaten: §a" + user.getStat(Stat.GOLDENHEADSEATEN)); lore.add("§8» §7Potions drunk: §a" + user.getStat(Stat.POTIONS)); lore.add(" "); lore.add("§8» §7Nethers entered: §a" + user.getStat(Stat.NETHER)); lore.add("§8» §7Ends entered: §a" + user.getStat(Stat.END)); lore.add(" "); lore.add("§8» §7Horses tamed: §a" + user.getStat(Stat.HORSESTAMED)); lore.add("§8» §7Wolves tamed: §a" + user.getStat(Stat.WOLVESTAMED)); lore.add(" "); miscMeta.setLore(lore); misc.setItemMeta(miscMeta); inv.setItem(4, misc); lore.clear(); player.openInventory(inv); return inv; } /** * Opens an inventory of all the online players that is playing. * * @param player the player opening for. * @return The opened inventory. */ public Inventory openSelector(Player player) { ArrayList<Player> list = new ArrayList<Player>(PlayerUtils.getPlayers()); Inventory inv = null; for (Player online : PlayerUtils.getPlayers()) { if (Spectator.getInstance().isSpectating(online) || !GameUtils.getGameWorlds().contains(online.getWorld())) { list.remove(online); } } int pages = ((list.size() / 28) + 1); pagesForPlayer.put(player, new HashMap<Integer, Inventory>()); for (int current = 1; current <= pages; current++) { inv = Bukkit.createInventory(null, 54, "» §7Player Selector"); for (int i = 0; i < 35; i++) { if (list.size() < 1) { continue; } if (noItem(i)) { continue; } Player target = list.remove(0); ItemStack item = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); SkullMeta meta = (SkullMeta) item.getItemMeta(); meta.setDisplayName("§a" + target.getName()); meta.setLore(Arrays.asList("§7Click to teleport.")); meta.setOwner(target.getName()); item.setItemMeta(meta); inv.setItem(i, item); } ItemStack nextpage = new ItemStack (Material.ARROW); ItemMeta pagemeta = nextpage.getItemMeta(); pagemeta.setDisplayName(ChatColor.GREEN + "Next page"); pagemeta.setLore(Arrays.asList("§7Switch to the next page.")); nextpage.setItemMeta(pagemeta); ItemStack prevpage = new ItemStack (Material.ARROW); ItemMeta prevmeta = prevpage.getItemMeta(); prevmeta.setDisplayName(ChatColor.GREEN + "Previous page"); prevmeta.setLore(Arrays.asList("§7Switch to the previous page.")); prevpage.setItemMeta(prevmeta); if (current != 1) { inv.setItem(47, prevpage); } if (current != pages) { inv.setItem(51, nextpage); } pagesForPlayer.get(player).put(current, inv); } inv = pagesForPlayer.get(player).get(1); currentPage.put(player, 1); player.openInventory(inv); return inv; } /** * Opens the inventory of the given target for the given player. * * @param player player to open for. * @param target the players inv to use. * * @return The opened inventory. */ public Inventory openPlayerInventory(final Player player, final Player target) { final Inventory inv = Bukkit.getServer().createInventory(target, 54, "» §7" + target.getName() + "'s Inventory"); Main.invsee.put(inv, new BukkitRunnable() { public void run() { inv.setItem(0, target.getInventory().getHelmet()); inv.setItem(1, target.getInventory().getChestplate()); inv.setItem(2, target.getInventory().getLeggings()); inv.setItem(3, target.getInventory().getBoots()); inv.setItem(5, target.getItemInHand()); inv.setItem(6, target.getItemOnCursor()); ItemStack info = new ItemStack (Material.BOOK); ItemMeta infoMeta = info.getItemMeta(); infoMeta.setDisplayName("§8» §6Player Info §8«"); ArrayList<String> lore = new ArrayList<String>(); lore.add("§8» §7Name: §a" + target.getName()); lore.add(" "); int health = (int) target.getHealth(); lore.add("§8» §7Hearts: §6" + (((double) health) / 2) + "§4♥"); lore.add("§8» §7Percent: §6" + NumberUtils.makePercent(target.getHealth()) + "%"); lore.add("§8» §7Hunger: §6" + (target.getFoodLevel() / 2)); lore.add("§8» §7Xp level: §6" + target.getLevel()); lore.add("§8» §7Location: §6x:" + target.getLocation().getBlockX() + ", y:" + target.getLocation().getBlockY() + ", z:" + target.getLocation().getBlockZ() + " (" + target.getWorld().getEnvironment().name().replaceAll("_", "").toLowerCase().replaceAll("normal", "overworld") + ")"); lore.add(" "); lore.add("§8» §cPotion effects:"); if (target.getActivePotionEffects().size() == 0) { lore.add("§8» §7None"); } for (PotionEffect effects : target.getActivePotionEffects()) { lore.add("§8» §7P:§6" + NameUtils.getPotionName(effects.getType()) + " §7T:§6" + (effects.getAmplifier() + 1) + " §7D:§6" + DateUtils.ticksToString(effects.getDuration() / 20)); } infoMeta.setLore(lore); info.setItemMeta(infoMeta); inv.setItem(8, info); lore.clear(); for (int i = 9; i < 18; i++) { ItemStack glass = new ItemStack (Material.STAINED_GLASS_PANE, 1, (short) 15); ItemMeta glassMeta = glass.getItemMeta(); glassMeta.setDisplayName("§0:>"); glass.setItemMeta(glassMeta); inv.setItem(8, info); inv.setItem(i, glass); } int i = 18; for (ItemStack item : target.getInventory().getContents()) { inv.setItem(i, item); i++; } player.updateInventory(); } }); Main.invsee.get(inv).runTaskTimer(Main.plugin, 1, 1); player.openInventory(inv); return inv; } /** * Opens an inventory the given hosts hall of fame. * * @param player the player opening for. * @param host The owner of the hall of fame. * @return The opened inventory. */ public Inventory openHOF(Player player, String host) { Set<String> keys = settings.getHOF().getConfigurationSection(host).getKeys(false); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); ArrayList<String> list = new ArrayList<String>(keys); Inventory inv = null; int pages = ((list.size() / 28) + 1); pagesForPlayer.put(player, new HashMap<Integer, Inventory>()); for (int current = 1; current <= pages; current++) { inv = Bukkit.createInventory(null, 54, "» §7" + host + "'s HoF, Page " + current); for (int i = 0; i < 35; i++) { if (list.size() < 1) { continue; } if (noItem(i)) { continue; } String target = list.remove(0); boolean isSpecial = target.endsWith("50") || target.endsWith("00") || target.endsWith("25") || target.endsWith("75"); ItemStack item = new ItemStack (Material.GOLDEN_APPLE, 1, isSpecial ? (short) 1 : (short) 0); ItemMeta meta = item.getItemMeta(); meta.setDisplayName("§8» §6" + host + "'s #" + target + " §8«"); ArrayList<String> lore = new ArrayList<String>(); lore.add("§7" + settings.getHOF().getString(host + "." + target + ".date", "N/A")); lore.add(" "); lore.add("§8» §cWinners:"); for (String winners : settings.getHOF().getStringList(host + "." + target + ".winners")) { lore.add("§8» §7" + winners); } lore.add(" "); lore.add("§8» §cKills:"); lore.add("§8» §7" + settings.getHOF().getString(host + "." + target + ".kills", "-1")); if (!settings.getHOF().getString(host + "." + target + ".teamsize", "FFA").isEmpty()) { lore.add(" "); lore.add("§8» §cTeamsize:"); lore.add("§8» §7" + settings.getHOF().getString(host + "." + target + ".teamsize", "FFA")); } lore.add(" "); lore.add("§8» §cScenario:"); for (String scenario : settings.getHOF().getString(host + "." + target + ".scenarios", "Vanilla+").split(" ")) { lore.add("§8» §7" + scenario); } lore.add(" "); meta.setLore(lore); item.setItemMeta(meta); inv.setItem(i, item); } ItemStack nextpage = new ItemStack (Material.ARROW); ItemMeta pagemeta = nextpage.getItemMeta(); pagemeta.setDisplayName(ChatColor.GREEN + "Next page"); pagemeta.setLore(Arrays.asList("§7Switch to the next page.")); nextpage.setItemMeta(pagemeta); ItemStack prevpage = new ItemStack (Material.ARROW); ItemMeta prevmeta = prevpage.getItemMeta(); prevmeta.setDisplayName(ChatColor.GREEN + "Previous page"); prevmeta.setLore(Arrays.asList("§7Switch to the previous page.")); prevpage.setItemMeta(prevmeta); String name = GameUtils.getHostName(host); ItemStack head = new ItemStack (Material.SKULL_ITEM, 1, (short) 3); SkullMeta headMeta = (SkullMeta) head.getItemMeta(); headMeta.setDisplayName("§8» §6Host Info §8«"); headMeta.setOwner(name); ArrayList<String> hlore = new ArrayList<String>(); hlore.add(" "); hlore.add("§8» §7Total games hosted: §6" + settings.getHOF().getConfigurationSection(host).getKeys(false).size()); hlore.add("§8» §7Rank: §6" + NameUtils.fixString(User.get(PlayerUtils.getOfflinePlayer(name)).getRank().name(), false)); hlore.add(" "); hlore.add("§8» §7Host name: §6" + host); hlore.add("§8» §7IGN: §6" + name); hlore.add(" "); headMeta.setLore(hlore); head.setItemMeta(headMeta); inv.setItem(49, head); if (current != 1) { inv.setItem(47, prevpage); } if (current != pages) { inv.setItem(51, nextpage); } pagesForPlayer.get(player).put(current, inv); } inv = pagesForPlayer.get(player).get(1); currentPage.put(player, 1); player.openInventory(inv); return inv; } /** * Open the config option inventory for the given player. * * @param player The player opening for. * @return The opened inventory. */ public Inventory openConfigOptions(Player player) { Inventory inv = Bukkit.getServer().createInventory(null, 45, "» §7Game config"); Game game = Game.getInstance(); ItemStack absorption = new ItemStack (Material.GOLDEN_APPLE); ItemMeta absorptionMeta = absorption.getItemMeta(); absorptionMeta.setDisplayName((game.absorption() ? "§a" : "§c") + "Absorption"); absorption.setItemMeta(absorptionMeta); inv.setItem(0, absorption); ItemStack heads = new ItemStack (Material.SKULL_ITEM, 1, (short) 3); ItemMeta headsMeta = heads.getItemMeta(); headsMeta.setDisplayName((game.goldenHeads() ? "§a" : "§c") + "Golden Heads"); heads.setItemMeta(headsMeta); inv.setItem(1, heads); ItemStack pearl = new ItemStack (Material.ENDER_PEARL); ItemMeta peralMeta = pearl.getItemMeta(); peralMeta.setDisplayName((game.goldenHeads() ? "§a" : "§c") + "Pearl Damage"); pearl.setItemMeta(peralMeta); inv.setItem(2, pearl); ItemStack notchApples = new ItemStack (Material.GOLDEN_APPLE, 1, (short) 1); ItemMeta notchMeta = notchApples.getItemMeta(); notchMeta.setDisplayName((game.notchApples() ? "§a" : "§c") + "Notch Apples"); notchApples.setItemMeta(notchMeta); inv.setItem(3, notchApples); ItemStack hearts = new ItemStack (Material.INK_SACK, 1, (short) 1); ItemMeta heartsMeta = hearts.getItemMeta(); heartsMeta.setDisplayName((game.heartsOnTab() ? "§a" : "§c") + "Hearts on tab"); hearts.setItemMeta(heartsMeta); inv.setItem(5, hearts); ItemStack hardcore = new ItemStack (Material.REDSTONE); ItemMeta hardcoreMeta = hardcore.getItemMeta(); hardcoreMeta.setDisplayName((game.hardcoreHearts() ? "§a" : "§c") + "Hardcore Hearts"); hardcore.setItemMeta(hardcoreMeta); inv.setItem(6, hardcore); ItemStack tab = new ItemStack (Material.SIGN); ItemMeta tabMeta = tab.getItemMeta(); tabMeta.setDisplayName((game.tabShowsHealthColor() ? "§a" : "§c") + "Tab health color"); tab.setItemMeta(tabMeta); inv.setItem(7, tab); ItemStack rr = new ItemStack (Material.PAINTING); ItemMeta rrMeta = rr.getItemMeta(); rrMeta.setDisplayName((game.isRecordedRound() ? "§a" : "§c") + "Recorded Round"); rr.setItemMeta(rrMeta); inv.setItem(8, rr); ItemStack nether = new ItemStack (Material.NETHER_STALK); ItemMeta netherMeta = nether.getItemMeta(); netherMeta.setDisplayName((game.nether() ? "§a" : "§c") + "Nether"); nether.setItemMeta(netherMeta); inv.setItem(18, nether); ItemStack end = new ItemStack (Material.ENDER_PORTAL_FRAME); ItemMeta endMeta = end.getItemMeta(); endMeta.setDisplayName((game.theEnd() ? "§a" : "§c") + "The End"); end.setItemMeta(endMeta); inv.setItem(19, end); ItemStack strip = new ItemStack (Material.DIAMOND_PICKAXE); ItemMeta stripMeta = strip.getItemMeta(); stripMeta.setDisplayName((game.antiStripmine() ? "§a" : "§c") + "Anti Stripmine"); strip.setItemMeta(stripMeta); inv.setItem(21, strip); ItemStack death = new ItemStack (Material.BLAZE_ROD); ItemMeta deathMeta = death.getItemMeta(); deathMeta.setDisplayName((game.deathLightning() ? "§a" : "§c") + "Death Lightning"); death.setItemMeta(deathMeta); inv.setItem(22, death); ItemStack horse = new ItemStack (Material.SADDLE); ItemMeta horseMeta = horse.getItemMeta(); horseMeta.setDisplayName((game.horses() ? "§a" : "§c") + "Horses"); horse.setItemMeta(horseMeta); inv.setItem(24, horse); ItemStack armor = new ItemStack (Material.IRON_BARDING); ItemMeta armorMeta = armor.getItemMeta(); armorMeta.setDisplayName((game.horseArmor() ? "§a" : "§c") + "Horse Armor"); armor.setItemMeta(armorMeta); inv.setItem(25, armor); ItemStack healing = new ItemStack (Material.BREAD); ItemMeta healingMeta = healing.getItemMeta(); healingMeta.setDisplayName((game.horseHealing() ? "§a" : "§c") + "Horse Healing"); healing.setItemMeta(healingMeta); inv.setItem(26, healing); ItemStack shears = new ItemStack (Material.SHEARS); ItemMeta shearsMeta = shears.getItemMeta(); shearsMeta.setDisplayName((game.shears() ? "§a" : "§c") + "Shears"); shears.setItemMeta(shearsMeta); inv.setItem(36, shears); ItemStack ghast = new ItemStack (Material.GHAST_TEAR); ItemMeta ghastMeta = ghast.getItemMeta(); ghastMeta.setDisplayName((game.ghastDropGold() ? "§a" : "§c") + "Ghast drop gold"); ghast.setItemMeta(ghastMeta); inv.setItem(37, ghast); ItemStack melon = new ItemStack (Material.SPECKLED_MELON); ItemMeta melonMeta = melon.getItemMeta(); melonMeta.setDisplayName((game.goldenMelonNeedsIngots() ? "§a" : "§c") + "Golden Melon needs ingots"); melon.setItemMeta(melonMeta); inv.setItem(38, melon); ItemStack tier2 = new ItemStack (Material.GLOWSTONE_DUST); ItemMeta tier2Meta = tier2.getItemMeta(); tier2Meta.setDisplayName((game.tier2() ? "§a" : "§c") + "Tier 2"); tier2.setItemMeta(tier2Meta); inv.setItem(41, tier2); ItemStack splash = new ItemStack (Material.POTION, 1, (short) 16424); ItemMeta splashMeta = splash.getItemMeta(); splashMeta.setDisplayName((game.splash() ? "§a" : "§c") + "Splash"); splash.setItemMeta(splashMeta); inv.setItem(42, splash); ItemStack str = new ItemStack (Material.BLAZE_POWDER); ItemMeta strMeta = str.getItemMeta(); strMeta.setDisplayName((game.strength() ? "§a" : "§c") + "Strength"); str.setItemMeta(strMeta); inv.setItem(43, str); ItemStack nerf = new ItemStack (Material.POTION, 1, (short) 8233); ItemMeta nerfMeta = nerf.getItemMeta(); nerfMeta.setDisplayName((game.nerfedStrength() ? "§a" : "§c") + "Nerfed Strength"); nerf.setItemMeta(nerfMeta); inv.setItem(44, nerf); player.openInventory(inv); return inv; } /** * Opens the game information inventory. * * @param player player to open for. * @return The opened inventory. */ public Inventory openGameInfo(final Player player) { final Inventory inv = Bukkit.getServer().createInventory(null, 45, "» §7Game Information"); final ArrayList<String> lore = new ArrayList<String>(); final Game game = Game.getInstance(); ItemStack general = new ItemStack (Material.SIGN); ItemMeta generalMeta = general.getItemMeta(); generalMeta.setDisplayName("§8» §6General Info §8«"); lore.add(" ");; lore.add("§8» §7Teaming in the arena: §cNot Allowed."); lore.add("§8» §7Starter food: §cNone."); lore.add(" "); lore.add("§8» §7Towering: §aAllowed, but come down at meetup."); lore.add("§8» §7Forting: §aAllowed before meetup."); lore.add(" "); lore.add("§8» §7You can follow our twitter @ArcticUHC to find"); lore.add(" §7out when our next games are."); lore.add(" "); lore.add("§8» §7Final heal is 20 seconds after start, "); lore.add(" §7no more are given after that."); lore.add(" "); lore.add("§8» §7Our UHC plugin is custom coded by LeonTG77."); lore.add(" "); generalMeta.setLore(lore); general.setItemMeta(generalMeta); inv.setItem(0, general); lore.clear(); ItemStack chat = new ItemStack (Material.PAPER); ItemMeta chatMeta = chat.getItemMeta(); chatMeta.setDisplayName("§8» §6Chat Rules §8«"); lore.add(" "); lore.add("§8» §7Excessive rage: §eKick."); lore.add(" "); lore.add("§8» §7Talking other languages in chat: §cMute."); lore.add("§8» §7Excessive Swearing: §cMute."); lore.add("§8» §7Homophobic: §cMute."); lore.add("§8» §7Spamming: §cMute."); lore.add("§8» §7Insults: §cMute."); lore.add("§8» §7Racism: §cMute."); lore.add(" "); lore.add("§8» §7Helpop abuse: §4Ban."); lore.add("§8» §7Disrespect: §4Ban."); lore.add(" "); lore.add("§8» §7Spoiling when alive: §aAllowed."); lore.add("§8» §7Spoiling when dead: §cNot allowed."); lore.add(" "); chatMeta.setLore(lore); chat.setItemMeta(chatMeta); inv.setItem(2, chat); lore.clear(); ItemStack pvp = new ItemStack (Material.IRON_SWORD); ItemMeta pvpMeta = pvp.getItemMeta(); pvpMeta.setDisplayName("§8» §6PvP Rules §8«"); lore.add(" "); lore.add("§8» §7iPvP: §cNot Allowed before pvp."); lore.add("§8» §7Team Killing: " + ((GameUtils.getTeamSize().startsWith("r") || GameUtils.getTeamSize().isEmpty()) && !ScenarioManager.getInstance().getScenario("Moles").isEnabled() ? "§cNot Allowed." : "§aAllowed.")); lore.add("§8» §7Stalking: §aAllowed. §c(Not excessive)"); lore.add("§8» §7Stealing: §aAllowed."); lore.add("§8» §7Crossteaming: §cNot Allowed."); lore.add(" "); pvpMeta.setLore(lore); pvpMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); pvp.setItemMeta(pvpMeta); inv.setItem(4, pvp); lore.clear(); ItemStack mining = new ItemStack (Material.DIAMOND_PICKAXE); ItemMeta miningMeta = mining.getItemMeta(); miningMeta.setDisplayName("§8» §6Mining Rules §8«"); lore.add(" "); if (game.antiStripmine()) { lore.add("§8» §4IMPORTANT:"); lore.add("§8» §7Gold and Diamonds only spawn in caves."); lore.add(" "); lore.add("§8» §7Stripmining: §aAllowed."); lore.add("§8» §7Branchmining: §aAllowed."); lore.add("§8» §7Pokeholing: §aAllowed."); lore.add("§8» §7Blastmining: §aAllowed."); lore.add("§8» §7Staircasing: §aAllowed."); lore.add("§8» §7Rollercoastering: §aAllowed."); lore.add("§8» §7Digging to sounds: §aAllowed."); lore.add("§8» §7Digging to entities: §aAllowed."); lore.add("§8» §7Digging to players: §aAllowed."); lore.add(" "); } else { lore.add("§8» §4Info:"); lore.add("§8» §7AntiStripmine is disabled."); lore.add(" "); lore.add("§8» §7Stripmining: §cNot Allowed."); lore.add("§8» §7Branchmining: §cNot Allowed."); lore.add("§8» §7Pokeholing: §cNot Allowed."); lore.add("§8» §7Blastmining: §aAllowed."); lore.add("§8» §7Staircasing: §aAllowed."); lore.add("§8» §7Rollercoastering: §aAllowed."); lore.add("§8» §7Digging to sounds: §aAllowed."); lore.add("§8» §7Digging to entities: §aAllowed."); lore.add("§8» §7Digging to players: §cOnly if you see them."); lore.add(" "); } miningMeta.setLore(lore); miningMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); mining.setItemMeta(miningMeta); inv.setItem(6, mining); lore.clear(); ItemStack misc = new ItemStack (Material.NETHER_STAR); ItemMeta miscMeta = misc.getItemMeta(); miscMeta.setDisplayName("§8» §6Misc. Rules §8«"); lore.add(" "); lore.add("§8» §7Suiciding in random team games: §cNot Allowed."); lore.add("§8» §7TS in random teams games: §cRequired."); lore.add(" "); lore.add("§8» §7Xray/Cavefinder: §cNot Allowed."); lore.add("§8» §7Hacked Client: §cNot Allowed."); lore.add("§8» §7Fast Break: §cNot Allowed."); lore.add(" "); lore.add("§8» §7F3+A Spam: §cNot Allowed."); lore.add("§8» §7Full Bright: §aAllowed."); lore.add(" "); lore.add("§8» §7Benefitting: §4Ban."); lore.add("§8» §7Bug abuse: §4Ban."); lore.add("§8» §7PvP Log: §4Ban."); lore.add("§8» §7PvE Log: §4Ban."); lore.add(" "); miscMeta.setLore(lore); misc.setItemMeta(miscMeta); inv.setItem(8, misc); lore.clear(); ItemStack staff = new ItemStack (Material.SKULL_ITEM, 1, (short) 3); SkullMeta staffMeta = (SkullMeta) staff.getItemMeta(); staffMeta.setDisplayName("§8» §6Staff §8«"); ItemStack commands = new ItemStack (Material.BANNER, 1, (short) 1); ItemMeta commandsMeta = commands.getItemMeta(); commandsMeta.setDisplayName("§8» §6Useful commands §8«"); lore.add(" "); lore.add("§a/uhc §8» §7§oView this menu :o"); lore.add("§a/helpop §8» §7§oAsk for help by the staff."); lore.add("§a/post §8» §7§oGet a link to the matchpost."); lore.add("§a/team §8» §7§oView the team help menu."); lore.add("§a/scen §8» §7§oView the enabled scenarios."); lore.add("§a/timeleft §8» §7§oView the timer."); lore.add("§a/border §8» §7§oView the current border size."); lore.add("§a/hof §8» §7§oView the hall of fame."); lore.add("§a/lag §8» §7§oView the server performance."); lore.add("§a/ms §8» §7§oView your or someones ping."); lore.add("§a/list §8» §7§oView online players."); lore.add("§a/pm §8» §7§oTalk in team chat."); lore.add("§a/tl §8» §7§oTell your team your coords."); lore.add(" "); commandsMeta.setLore(lore); commands.setItemMeta(commandsMeta); inv.setItem(21, commands); lore.clear(); ItemStack scenario = new ItemStack (Material.BANNER, 1, (short) 14); ItemMeta scenarioMeta = scenario.getItemMeta(); scenarioMeta.setDisplayName("§8» §6Enabled Scenarios §8«"); lore.add(" "); lore.add("§8» §cScenarios:"); if (ScenarioManager.getInstance().getEnabledScenarios().isEmpty()) { lore.add("§8» §7None!"); } for (Scenario scen : ScenarioManager.getInstance().getEnabledScenarios()) { lore.add("§8» §7" + scen.getName()); } lore.add(" "); lore.add("§8» §7Use §a/scen §7to view info about the scenarios."); lore.add(" "); scenarioMeta.setLore(lore); scenario.setItemMeta(scenarioMeta); inv.setItem(23, scenario); lore.clear(); ItemStack nether = new ItemStack (Material.NETHER_STALK); ItemMeta netherMeta = nether.getItemMeta(); netherMeta.setDisplayName("§8» §6Nether Info §8«"); lore.add(" "); lore.add("§8» §7Nether: " + (game.nether() ? "§aEnabled." : "§cDisabled.")); lore.add("§8» §7The End: " + (game.theEnd() ? "§aEnabled." : "§cDisabled.")); lore.add(" "); if (game.nether()) { lore.add("§8» §7Trapping: " + (game.theEnd() ? "§cNot allowed." : "§aAllowed.")); lore.add("§8» §7Camping: §aAllowed."); lore.add(" "); lore.add("§8» §7Strength: " + (game.strength() ? (game.nerfedStrength() ? "§cNerfed" : "§aVanilla") : "§cDisabled")); lore.add("§8» §7Tier 2: " + (game.tier2() ? "§aEnabled." : "§cDisabled.")); lore.add("§8» §7Splash: " + (game.splash() ? "§aEnabled." : "§cDisabled.")); lore.add(" "); lore.add("§8» §7Golden Melon: §6" + (game.goldenMelonNeedsIngots() ? "Gold Ingots." : "Golden Nuggets.")); lore.add("§8» §7Ghast Drop: §6" + (game.ghastDropGold() ? "Gold Ingot." : "Ghast Tear.")); lore.add(" "); } netherMeta.setLore(lore); nether.setItemMeta(netherMeta); inv.setItem(36, nether); lore.clear(); ItemStack healing = new ItemStack (Material.GOLDEN_APPLE); ItemMeta healingMeta = healing.getItemMeta(); healingMeta.setDisplayName("§8» §6Healing Info §8«"); lore.add(" "); lore.add("§8» §7Absorption: " + (game.absorption() ? "§aEnabled." : "§cDisabled.")); lore.add("§8» §7Golden Heads: " + (game.goldenHeads() ? "§aEnabled." : "§cDisabled.")); if (game.goldenHeads()) { lore.add("§8» §7Heads Heal: §6" + game.goldenHeadsHeal() + " hearts."); } lore.add("§8» §7Notch Apples: " + (game.notchApples() ? "§aEnabled." : "§cDisabled.")); lore.add(" "); healingMeta.setLore(lore); healing.setItemMeta(healingMeta); inv.setItem(38, healing); lore.clear(); ItemStack rates = new ItemStack (Material.FLINT); ItemMeta ratesMeta = rates.getItemMeta(); ratesMeta.setDisplayName("§8» §6Rates Info §8«"); lore.add(" "); lore.add("§8» §7Apple Rates: §6" + game.getAppleRates() + "%"); lore.add("§8» §7Shears: " + (game.shears() ? "§aWork." : "§cDoes not work.") + ""); lore.add("§8» §7Flint Rates: §6" + game.getFlintRates() + "%"); lore.add(" "); lore.add("§8» §7Mob Rates: §6Vanilla."); lore.add("§8» §7Ore Rates: §6Vanilla."); lore.add("§8» §7Cave Rates: §6Vanilla."); lore.add(" "); lore.add("§8» §7Witch Potion: §6If poisoned 100%, if not 30%"); lore.add(" "); ratesMeta.setLore(lore); rates.setItemMeta(ratesMeta); inv.setItem(40, rates); lore.clear(); ItemStack horse = new ItemStack (Material.SADDLE); ItemMeta horseMeta = horse.getItemMeta(); horseMeta.setDisplayName("§8» §6Horse Info §8«"); lore.add(" "); lore.add("§8» §7Horses: " + (game.horses() ? "§aEnabled." : "§cDisabled.")); if (game.horses()) { lore.add("§8» §7Horse Healing: " + (game.horseHealing() ? "§aEnabled." : "§cDisabled.")); lore.add("§8» §7Horse Armor: " + (game.horseArmor() ? "§aEnabled." : "§cDisabled.")); } lore.add(" "); horseMeta.setLore(lore); horse.setItemMeta(horseMeta); inv.setItem(42, horse); lore.clear(); ItemStack miscI = new ItemStack (Material.ENDER_PEARL); ItemMeta miscIMeta = miscI.getItemMeta(); miscIMeta.setDisplayName("§8» §6Misc. Info §8«"); lore.add(" "); lore.add("§8» §7Enderpearl Damage: " + (game.pearlDamage() ? "§aEnabled, deals 1 heart." : "§cDisabled.")); lore.add("§8» §7Death Lightning: " + (game.deathLightning() ? "§aEnabled." : "§cDisabled.")); lore.add("§8» §7Saturation Fix: §aEnabled."); lore.add(" "); lore.add("§8» §7Border shrinks: §6" + NameUtils.fixString(game.getBorderShrink().getPreText(), false) + game.getBorderShrink().name().toLowerCase() + "."); lore.add("§8» §7The border will kill you if you go outside!"); lore.add(" "); lore.add("§8» §7At meetup you can do everything you want"); lore.add("§8» §7as long as you are inside the border and"); lore.add("§8» §7on the surface, border can shrink to 100x100."); lore.add(" "); miscIMeta.setLore(lore); miscI.setItemMeta(miscIMeta); inv.setItem(44, miscI); lore.clear(); File folder = new File(plugin.getDataFolder() + File.separator + "users" + File.separator); StringBuilder staffs = new StringBuilder(); StringBuilder owners = new StringBuilder(); StringBuilder hosts = new StringBuilder(); StringBuilder specs = new StringBuilder(); ArrayList<String> hostL = new ArrayList<String>(); ArrayList<String> staffL = new ArrayList<String>(); ArrayList<String> specL = new ArrayList<String>(); int i = 1; int j = 0; for (File file : folder.listFiles()) { FileConfiguration config = YamlConfiguration.loadConfiguration(file); if (config.getString("rank").equals(Rank.ADMIN.name())) { hostL.add(config.getString("username")); } if (config.getString("rank").equals(Rank.HOST.name())) { hostL.add(config.getString("username")); } if (config.getString("rank").equals(Rank.TRIAL.name())) { hostL.add(config.getString("username")); } if (config.getString("rank").equals(Rank.STAFF.name())) { staffL.add(config.getString("username")); } if (config.getString("rank").equals(Rank.SPEC.name())) { specL.add(config.getString("username")); } } for (String sL : hostL) { if (hosts.length() > 0) { if (hostL.size() == i) { hosts.append(" and "); } else { hosts.append(", "); } } if (j == 2) { hosts.append("-"); j = 0; } else { j++; } hosts.append(sL); i++; } i = 1; j = 0; for (String sL : staffL) { if (staffs.length() > 0) { if (staffL.size() == i) { staffs.append(" and "); } else { staffs.append(", "); } } if (j == 2) { staffs.append("-"); j = 0; } else { j++; } staffs.append(sL); i++; } i = 1; j = 0; for (String pL : specL) { if (specs.length() > 0) { if (specL.size() == i) { specs.append(" and "); } else { specs.append(", "); } } if (j == 2) { specs.append("-"); j = 0; } else { j++; } specs.append(pL); i++; } i = 1; j = 0; for (OfflinePlayer ops : Bukkit.getServer().getOperators()) { if (owners.length() > 0) { if (Bukkit.getOperators().size() == i) { owners.append(" and "); } else { owners.append(", "); } } if (j == 2) { hosts.append("-"); j = 0; } else { j++; } owners.append(ops.getName()); i++; } lore.add(" "); lore.add("§8» §4Owners:"); for (String split : owners.toString().split("-")) { lore.add("§8» §7" + split); } lore.add(" "); lore.add("§8» §4Hosts:"); for (String split : hosts.toString().split("-")) { lore.add("§8» §7" + split); } lore.add(" "); lore.add("§8» §cStaff:"); for (String split : staffs.toString().split("-")) { lore.add("§8» §7" + split); } lore.add(" "); lore.add("§8» §7Specs:"); for (String split : specs.toString().split("-")) { lore.add("§8» §7" + split); } lore.add(" "); staffMeta.setLore(lore); staffMeta.setOwner("LeonTG77"); staff.setItemMeta(staffMeta); inv.setItem(19, staff); lore.clear(); Main.gameInfo.put(inv, new BukkitRunnable() { public void run() { ItemStack timer = new ItemStack (Material.WATCH); ItemMeta timerMeta = timer.getItemMeta(); timerMeta.setDisplayName("§8» §6Timers §8«"); lore.add(" "); if (Game.getInstance().isRecordedRound()) { lore.add("§8» §7Current Episode: §a" + Timers.meetup); lore.add("§8» §7Time to next episode: §a" + Timers.time + " mins"); } else if (GameUtils.getTeamSize().startsWith("No") || GameUtils.getTeamSize().startsWith("Open")) { lore.add("§8» §7There are no matches running."); } else if (!State.isState(State.INGAME)) { lore.add("§8» §7The game has not started yet."); } else { lore.add("§8» §7Time since start: §a" + DateUtils.ticksToString(Timers.timeSeconds)); lore.add(Timers.pvpSeconds <= 0 ? "§8» §aPvP is enabled." : "§8» §7PvP in: §a" + DateUtils.ticksToString(Timers.pvpSeconds)); lore.add(Timers.meetupSeconds <= 0 ? "§8» §6Meetup is now!" : "§8» §7Meetup in: §a" + DateUtils.ticksToString(Timers.meetupSeconds)); } lore.add(" "); timerMeta.setLore(lore); timer.setItemMeta(timerMeta); inv.setItem(25, timer); lore.clear(); player.updateInventory(); } }); Main.gameInfo.get(inv).runTaskTimer(Main.plugin, 1, 1); player.openInventory(inv); return inv; } /** * Check if this slot shall have no items. * * @param slot The slot. * @return True if it shouldn't, false otherwise. */ private boolean noItem(int slot) { switch (slot) { case 0: case 8: case 9: case 17: case 18: case 26: case 27: case 35: case 36: return true; default: return false; } } }