@SuppressWarnings("deprecation") public static Inventory constructInventory( TitlesPlugin plugin, Player player, String cat, boolean owned) { DataContainer dataContainer = plugin.getDataContainer(); Inventory inv = null; // if there are titles, construct category inventory if (!dataContainer.getTitles().isEmpty()) { List<String> categories = GetCommands.getCategories(dataContainer); List<ItemStack> clickables = new ArrayList<>(); // get inventory with categories. if (cat == null) { if (owned) { List<Title> unlocked = dataContainer.getUnlockedTitles(player); for (Title title : unlocked) { ItemStack is; String name = title.getName(); String description = title.getDescription(); String status; if (dataContainer.getCurrentTitle(player) != null && dataContainer.getCurrentTitle(player).equals(title)) { is = new ItemStack(Material.WOOL, 1, DyeColor.LIME.getData()); status = "Current"; } else { is = new ItemStack(Material.WOOL, 1, DyeColor.GREEN.getData()); status = "Unlocked"; } ItemMeta meta = is.getItemMeta(); meta.setDisplayName(name); meta.setLore( Arrays.asList( "Description: " + description, "Category: " + title.getCategory().getName(), "Status: " + status)); is.setItemMeta(meta); clickables.add(is); } int size = ((clickables.size() / 9) + 1) * 9; inv = Bukkit.createInventory( null, size, ChatColor.DARK_AQUA + "" + ChatColor.BOLD + "Unlocked Titles"); for (int i = 0; i < clickables.size(); i++) inv.setItem(i, clickables.get(i)); // back button ItemStack is = new ItemStack(Material.WOOL, 1, DyeColor.GRAY.getData()); ItemMeta meta = is.getItemMeta(); meta.setDisplayName("Back"); is.setItemMeta(meta); inv.setItem(inv.getSize() - 1, is); return inv; } for (String category : categories) { ItemStack is = new ItemStack(Material.WOOL, 1, DyeColor.GRAY.getData()); ItemMeta meta = is.getItemMeta(); meta.setDisplayName(category); is.setItemMeta(meta); clickables.add(is); } int size = ((clickables.size() / 9) + 1) * 9; inv = Bukkit.createInventory( null, size, ChatColor.DARK_AQUA + "" + ChatColor.BOLD + "Title categories"); // get inventory with titles from category. } else { Category category = dataContainer.getCategory(cat); if (category == null) return null; List<Title> titles = dataContainer.getTitlesFromCategory(category); List<Title> ownedTitles = dataContainer.getUnlockedTitles(player); for (Title title : titles) { ItemStack is; String name = title.getName(); String description = title.getDescription(); String status; if (ownedTitles.contains(title)) { if (dataContainer.getCurrentTitle(player) != null && dataContainer.getCurrentTitle(player).equals(title)) { is = new ItemStack(Material.WOOL, 1, DyeColor.LIME.getData()); status = "Current"; } else { is = new ItemStack(Material.WOOL, 1, DyeColor.GREEN.getData()); status = "Unlocked"; } } else { Request request = dataContainer.getRequest(player); if (request != null && request.getTitle().equals(title) && request.getStatus() == RequestStatus.pending) { is = new ItemStack(Material.WOOL, 1, DyeColor.ORANGE.getData()); status = "Pending"; } else { is = new ItemStack(Material.WOOL, 1, DyeColor.RED.getData()); status = "Locked"; } } ItemMeta meta = is.getItemMeta(); meta.setDisplayName(name); meta.setLore( Arrays.asList( "Description: " + description, "Category: " + category.getName(), "Status: " + status)); is.setItemMeta(meta); clickables.add(is); } int size = ((clickables.size() / 9) + 1) * 9; inv = Bukkit.createInventory( null, size, ChatColor.DARK_AQUA + "" + ChatColor.BOLD + "Titles in category"); } for (int i = 0; i < clickables.size(); i++) inv.setItem(i, clickables.get(i)); // back button if (cat != null) { ItemStack is = new ItemStack(Material.WOOL, 1, DyeColor.GRAY.getData()); ItemMeta meta = is.getItemMeta(); meta.setDisplayName("Back"); is.setItemMeta(meta); inv.setItem(inv.getSize() - 1, is); // player's unlocked titles } else { ItemStack is = new ItemStack(Material.WOOL, 1, DyeColor.GREEN.getData()); ItemMeta meta = is.getItemMeta(); meta.setDisplayName("Unlocked"); is.setItemMeta(meta); inv.setItem(inv.getSize() - 1, is); } } else Utils.sendError(player, "There are no titles yet."); return inv; }