SubServers-2/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java

1282 lines
62 KiB
Java

package net.ME1312.SubServers.Client.Bukkit.Graphic;
import net.ME1312.SubServers.Client.Bukkit.Library.Container;
import net.ME1312.SubServers.Client.Bukkit.Library.NamedContainer;
import net.ME1312.SubServers.Client.Bukkit.Library.Version.Version;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketCreateServer;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadHostInfo;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadServerInfo;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadServerList;
import net.ME1312.SubServers.Client.Bukkit.SubPlugin;
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 org.bukkit.scheduler.BukkitTask;
import java.text.DecimalFormat;
import java.util.*;
public class UIRenderer {
protected static HashMap<String, Renderer> hostPlugins = new HashMap<String, Renderer>();
protected static HashMap<String, Renderer> subserverPlugins = new HashMap<String, Renderer>();
private List<Runnable> windowHistory = new LinkedList<Runnable>();
protected Options lastUsedOptions = null;
protected String lastVistedObject = null;
protected int lastPage = 1;
protected Runnable lastMenu = null;
private NamedContainer<String, Integer> downloading = null;
protected boolean open = false;
protected final UUID player;
private SubPlugin plugin;
public abstract static class Options {
List<Runnable> history = new LinkedList<Runnable>();
private boolean init = false;
boolean init() {
if (!init) {
init = true;
return false;
} else {
return true;
}
}
/**
* If there is any undo history
*
* @return Undo History Status
*/
public boolean hasHistory() {
return !history.isEmpty();
}
/**
* Reverts the last change
*/
public void undo() {
Runnable lastWindow = history.get(history.size() - 1);
history.remove(history.size() - 1);
lastWindow.run();
}
}
protected UIRenderer(SubPlugin plugin, UUID player) {
this.plugin = plugin;
this.player = player;
}
/**
* Opens a new window
*/
public void newUI() {
clearHistory();
if (lastMenu == null) {
hostMenu(1);
} else {
lastMenu.run();
}
}
/**
* Clears the Window History
*/
public void clearHistory() {
windowHistory.clear();
}
/**
* If there is any Window History
*
* @return Window History Status
*/
public boolean hasHistory() {
return windowHistory.size() > 1;
}
/**
* Reopens the current window
*/
public void reopen() {
Runnable lastWindow = windowHistory.get(windowHistory.size() - 1);
windowHistory.remove(windowHistory.size() - 1);
lastWindow.run();
}
/**
* Reopens the previous window
*/
public void back() {
windowHistory.remove(windowHistory.size() - 1);
reopen();
}
/**
* Attempt to send a Title Message
*
* @param str Message
* @return Success Status
*/
public boolean sendTitle(String str) {
return sendTitle(str, -1);
}
/**
* Attempt to send a Title Message
*
* @param str Message
* @param stay How long the message should stay
* @return Success Status
*/
public boolean sendTitle(String str, int stay) {
return sendTitle(str, -1, stay, -1);
}
/**
* Attempt to send a Title Message
*
* @param str Message
* @param fadein FadeIn Transition length
* @param stay How long the message should stay
* @param fadeout FadeOut Transition length
* @return Success Status
*/
public boolean sendTitle(String str, int fadein, int stay, int fadeout) {
if (Bukkit.getPluginManager().getPlugin("TitleManager") != null && plugin.pluginconf.get().getSection("Settings").getBoolean("Use-Title-Messages", true)) {
String line1, line2;
if (!str.startsWith("\n") && str.contains("\n")) {
line1 = str.split("\\n")[0];
line2 = str.split("\\n")[1];
} else {
line1 = str.replace("\n", "");
line2 = ChatColor.RESET.toString();
}
try {
io.puharesource.mc.titlemanager.api.TitleObject obj = io.puharesource.mc.titlemanager.api.TitleObject.class.getConstructor(String.class, String.class).newInstance(line1, line2);
if (fadein >= 0) obj.setFadeIn(fadein);
if (stay >= 0) obj.setStay(stay);
if (fadeout >= 0) obj.setFadeOut(fadeout);
obj.send(Bukkit.getPlayer(player));
return true;
} catch (Throwable e) {
return false;
}
} else {
return false;
}
}
/**
* Shows/Hides the Downloading Title Message
*
* @param subtitle Subtitle to display (or null to hide)
*/
public void setDownloading(String subtitle) {
if (subtitle != null && !(Bukkit.getPluginManager().getPlugin("TitleManager") != null && plugin.pluginconf.get().getSection("Settings").getBoolean("Use-Title-Messages", true))) {
Bukkit.getPlayer(player).sendMessage(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Downloading", '&').replace("$str$", subtitle));
} if (subtitle != null && downloading == null) {
downloading = new NamedContainer<String, Integer>(subtitle, 0);
final Container<Integer> delay = new Container<Integer>(0);
Bukkit.getScheduler().runTask(plugin, new Runnable() {
@Override
public void run() {
if (downloading != null) {
String word = ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Downloading.Title", '&'));
int i = 0;
int start = (downloading.get() - 3 < 0)?0:downloading.get()-3;
int end = (downloading.get() >= word.length())?word.length():downloading.get();
String str = plugin.lang.getSection("Lang").getColoredString((delay.get() > 7 && start == 0)?"Interface.Generic.Downloading.Title-Color-Alt":"Interface.Generic.Downloading.Title-Color", '&');
delay.set(delay.get() + 1);
if (delay.get() > 7) downloading.set(downloading.get() + 1);
if (downloading.get() >= word.length() + 3) {
downloading.set(0);
delay.set(0);
}
for (char c : word.toCharArray()) {
i++;
if (i == start) str += plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Downloading.Title-Color-Alt", '&');
str += c;
if (i == end) str += plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Downloading.Title-Color", '&');
}
str += '\n' + plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Downloading.Title-Color-Alt", '&') + downloading.name();
sendTitle(str, 0, 10, 5);
Bukkit.getScheduler().runTaskLater(plugin, this, 1);
} else {
sendTitle(ChatColor.RESET.toString(), 0, 1, 0);
}
}
});
} else if (subtitle != null) {
downloading.rename(subtitle);
} else if (downloading != null) {
downloading = null;
}
}
/**
* Add Host Plugin
*
* @param handle Handle to bind
* @param renderer Renderer
*/
public static void addHostPlugin(String handle, Renderer renderer) {
hostPlugins.put(handle, renderer);
}
/**
* Add SubServer Plugin
*
* @param handle Handle to bind
* @param renderer Renderer
*/
public static void addSubServerPlugin(String handle, Renderer renderer) {
subserverPlugins.put(handle, renderer);
}
/**
* Opens the Host Menu
*
* @param page Page Number (starting from page 1)
*/
public void hostMenu(final Integer page) {
setDownloading(ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Menu.Title", '&')));
plugin.subdata.sendPacket(new PacketDownloadServerList(null, UUID.randomUUID().toString(), (json) -> {
setDownloading(null);
lastVistedObject = null;
lastPage = page;
lastMenu = () -> hostMenu(1);
windowHistory.add(() -> hostMenu(page));
List<String> hosts = new ArrayList<String>();
hosts.addAll(json.getJSONObject("hosts").keySet());
ItemStack block;
ItemMeta blockMeta;
ItemStack div = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);
ItemMeta divMeta = div.getItemMeta();
divMeta.setDisplayName(ChatColor.RESET.toString());
div.setItemMeta(divMeta);
int i = 0;
int min = ((page - 1) * 36);
int max = (min + 35);
int count = (hosts.size() == 0)?27:((hosts.size() - min - 1 >= max)?36:hosts.size() - min);
int area = (count % 9 == 0) ? count : (int) (Math.floor(count / 9) + 1) * 9;
Inventory inv = Bukkit.createInventory(null, 18 + area, plugin.lang.getSection("Lang").getColoredString("Interface.Host-Menu.Title", '&'));
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
block.setItemMeta(divMeta);
while (i < area) {
inv.setItem(i, block);
i++;
}
ItemStack adiv = block;
i = (int) ((count < 9) ? Math.floor((9 - count) / 2) : 0);
boolean even = (count & 1) == 0 && count < 9;
short enabled, disabled;
for (String host : hosts) {
if (hosts.indexOf(host) >= min && hosts.indexOf(host) <= max) {
if (even && (i == 4 || i == 13 || i == 22 || i == 31)) inv.setItem(i++, adiv);
enabled = (short) (((i & 1) == 0) ? 3 : 11);
disabled = (short) (((i & 1) == 0) ? 2 : 14);
if (json.getJSONObject("hosts").getJSONObject(host).getBoolean("enabled")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, enabled);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.AQUA + host);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Menu.Host-Server-Count", '&').replace("$int$", new DecimalFormat("#,###").format(json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").keySet().size()))));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, disabled);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + host);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Menu.Host-Disabled", '&')));
}
block.setItemMeta(blockMeta);
inv.setItem(i, block);
count--;
if (count < 9 && (i == 8 || i == 17 || i == 26)) {
i += (int) Math.floor((9 - count) / 2) + 1;
even = (count & 1) == 0;
} else {
i++;
}
}
}
if (hosts.size() == 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Menu.No-Hosts", '&'));
block.setItemMeta(blockMeta);
inv.setItem(12, block);
inv.setItem(13, block);
inv.setItem(14, block);
}
i = inv.getSize() - 18;
while (i < inv.getSize()) {
inv.setItem(i, div);
i++;
}
i = inv.getSize() - 9;
if (min != 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back-Arrow", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i++, block);
} else i += 2;
i++;
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Menu.SubServer-Menu", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i++, block);
inv.setItem(i++, block);
i++;
if (hosts.size() - 1 > max) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Next-Arrow", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i, block);
}
Bukkit.getPlayer(player).openInventory(inv);
open = true;
}));
}
/**
* Opens Host/&lt;name&gt;
*
* @param host Host Name
*/
public void hostAdmin(final String host) {
setDownloading(ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.Title", '&').replace("$str$", host)));
plugin.subdata.sendPacket(new PacketDownloadHostInfo(host, UUID.randomUUID().toString(), (json) -> {
windowHistory.add(() -> hostAdmin(host));
if (!json.getBoolean("valid")) {
if (hasHistory()) back();
} else {
setDownloading(null);
lastVistedObject = host;
ItemStack block;
ItemMeta blockMeta;
ItemStack div = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);
ItemMeta divMeta = div.getItemMeta();
divMeta.setDisplayName(ChatColor.RESET.toString());
div.setItemMeta(divMeta);
Inventory inv = Bukkit.createInventory(null, 36, plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.Title", '&').replace("$str$", host));
int i = 0;
while (i < inv.getSize()) {
inv.setItem(i, div);
i++;
}
if (!(Bukkit.getPlayer(player).hasPermission("subservers.host.create.*") || Bukkit.getPlayer(player).hasPermission("subservers.host.create." + host.toLowerCase()))) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.Creator", '&')));
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Invalid-Permission", '&').replace("$str$", "subservers.host.create." + host.toLowerCase())));
} else if (!json.getJSONObject("host").getBoolean("enabled") || json.getJSONObject("host").getJSONObject("creator").getBoolean("busy")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.Creator", '&')));
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.Creator-Busy", '&')));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.Creator", '&'));
}
block.setItemMeta(blockMeta);
inv.setItem(1, block);
inv.setItem(2, block);
inv.setItem(3, block);
inv.setItem(10, block);
inv.setItem(11, block);
inv.setItem(12, block);
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.SubServers", '&'));
block.setItemMeta(blockMeta);
inv.setItem(5, block);
inv.setItem(6, block);
inv.setItem(7, block);
inv.setItem(14, block);
inv.setItem(15, block);
inv.setItem(16, block);
if (!json.getJSONObject("host").getBoolean("enabled")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.Plugins", '&')));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 11);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Admin.Plugins", '&'));
}
inv.setItem(27, block);
inv.setItem(28, block);
if (json.getJSONObject("host").getBoolean("enabled")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 11);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.AQUA + host);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Menu.Host-Server-Count", '&').replace("$int$", new DecimalFormat("#,###").format(json.getJSONObject("host").getJSONObject("servers").keySet().size()))));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + host);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Menu.Host-Disabled", '&')));
}
block.setItemMeta(blockMeta);
inv.setItem(30, block);
inv.setItem(31, block);
inv.setItem(32, block);
if (hasHistory()) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back", '&'));
block.setItemMeta(blockMeta);
inv.setItem(34, block);
inv.setItem(35, block);
}
Bukkit.getPlayer(player).openInventory(inv);
open = true;
}
}));
}
/**
* Opens Host/&lt;name&gt;/Create
*
* @param options Creator Options
*/
public void hostCreator(final CreatorOptions options) {
setDownloading(ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Title", '&').replace("$str$", options.getHost())));
lastUsedOptions = options;
if (!options.init()) {
windowHistory.add(() -> hostCreator(options));
lastVistedObject = options.getHost();
}
plugin.subdata.sendPacket(new PacketDownloadHostInfo(options.getHost(), UUID.randomUUID().toString(), json -> {
if (!json.getBoolean("valid")|| !json.getJSONObject("host").getBoolean("enabled") || json.getJSONObject("host").getJSONObject("creator").getBoolean("busy")) {
lastUsedOptions = null;
if (hasHistory()) back();
} else {
setDownloading(null);
ItemStack block;
ItemMeta blockMeta;
ItemStack div = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);
ItemMeta divMeta = div.getItemMeta();
divMeta.setDisplayName(ChatColor.RESET.toString());
div.setItemMeta(divMeta);
Inventory inv = Bukkit.createInventory(null, 54, plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Title", '&').replace("$str$", options.getHost()));
int i = 0;
while (i < inv.getSize()) {
inv.setItem(i, div);
i++;
}
if (options.getName() == null) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-Name", '&'));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GREEN + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-Name", '&'));
blockMeta.setLore(Arrays.asList(ChatColor.GRAY + options.getName()));
}
block.setItemMeta(blockMeta);
inv.setItem(3, block);
inv.setItem(4, block);
inv.setItem(5, block);
if (options.getType() == null) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-Type", '&'));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GREEN + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-Type", '&'));
blockMeta.setLore(Arrays.asList(ChatColor.GRAY + options.getType().toString()));
}
block.setItemMeta(blockMeta);
inv.setItem(10, block);
inv.setItem(11, block);
if (options.getVersion() == null) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-Version", '&'));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GREEN + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-Version", '&'));
blockMeta.setLore(Arrays.asList(ChatColor.GRAY + "v" + options.getVersion().toString()));
}
block.setItemMeta(blockMeta);
inv.setItem(15, block);
inv.setItem(16, block);
if (options.getPort() <= 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-Port", '&'));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GREEN + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-Port", '&'));
blockMeta.setLore(Arrays.asList(ChatColor.GRAY.toString() + options.getPort()));
}
block.setItemMeta(blockMeta);
inv.setItem(28, block);
inv.setItem(29, block);
if (options.getMemory() < 256) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-RAM", '&'));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GREEN + plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Edit-RAM", '&'));
blockMeta.setLore(Arrays.asList(ChatColor.GRAY.toString() + options.getMemory() + "MB"));
}
block.setItemMeta(blockMeta);
inv.setItem(33, block);
inv.setItem(34, block);
if (!options.hasHistory()) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY + ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Undo", '&')));
block.setItemMeta(blockMeta);
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 1);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Undo", '&'));
block.setItemMeta(blockMeta);
}
block.setItemMeta(blockMeta);
inv.setItem(45, block);
inv.setItem(46, block);
if (options.getName() == null || options.getType() == null || options.getVersion() == null || options.getPort() <= 0 && options.getMemory() < 256) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY + ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Submit", '&')));
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Form-Incomplete", '&')));
block.setItemMeta(blockMeta);
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Creator.Submit", '&'));
block.setItemMeta(blockMeta);
}
block.setItemMeta(blockMeta);
inv.setItem(48, block);
inv.setItem(49, block);
inv.setItem(50, block);
if (hasHistory()) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back", '&'));
block.setItemMeta(blockMeta);
inv.setItem(52, block);
inv.setItem(53, block);
}
Bukkit.getPlayer(player).openInventory(inv);
open = true;
}
}));
}
public static class CreatorOptions extends Options {
private String host;
private String name = null;
private PacketCreateServer.ServerType type = null;
private Version version = null;
private int memory = 1024;
private int port = -1;
/**
* Grabs a raw CreatorOptions instance
*
* @param host Host Name
*/
public CreatorOptions(String host) {
this.host = host;
}
/**
* Gets the Host Name
*
* @return Host Name
*/
public String getHost() {
return this.host;
}
/**
* Gets the Server Name
*
* @return Server Name
*/
public String getName() {
return name;
}
/**
* Sets the Server Name
*
* @param value Value
*/
public void setName(String value) {
final String name = this.name;
history.add(() -> this.name = name);
this.name = value;
}
/**
* Gets the ServerType
*
* @return ServerType
*/
public PacketCreateServer.ServerType getType() {
return type;
}
/**
* Sets the ServerType
*
* @param value Value
*/
public void setType(PacketCreateServer.ServerType value) {
final PacketCreateServer.ServerType type = this.type;
history.add(() -> this.type = type);
this.type = value;
}
/**
* Gets the Server Version
*
* @return Server Version
*/
public Version getVersion() {
return version;
}
/**
* Sets the Server Version
*
* @param value Value
*/
public void setVersion(Version value) {
final Version version = this.version;
history.add(() -> this.version = version);
this.version = value;
}
/**
* Gets the RAM Amount for the Server
*
* @return Server RAM Amount (in MB)
*/
public int getMemory() {
return memory;
}
/**
* Sets the RAM AMount for the Server
*
* @param value Value (in MB)
*/
public void setMemory(int value) {
final int memory = this.memory;
history.add(() -> this.memory = memory);
this.memory = value;
}
/**
* Gets the Port Number for the Server
*
* @return Server Port Number
*/
public int getPort() {
return port;
}
/**
* Sets the Port Number for the Server
*
* @param value Value
*/
public void setPort(int value) {
final int port = this.port;
history.add(() -> this.port = port);
this.port = value;
}
}
/**
* Opens Host/&lt;name&gt;/Plugins
*
* @param host Host Name
*/
public void hostPlugin(final Integer page, final String host) {
setDownloading(ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Plugin.Title", '&').replace("$str$", host)));
plugin.subdata.sendPacket(new PacketDownloadHostInfo(host, UUID.randomUUID().toString(), (json) -> {
windowHistory.add(() -> hostPlugin(page, host));
if (!json.getBoolean("valid")) {
if (hasHistory()) back();
} else {
setDownloading(null);
lastVistedObject = host;
lastPage = page;
List<String> renderers = new ArrayList<String>();
for (String renderer : renderers) {
if (subserverPlugins.get(renderer).isEnabled(host)) renderers.add(renderer);
}
Collections.sort(renderers);
ItemStack block;
ItemMeta blockMeta;
ItemStack div = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);
ItemMeta divMeta = div.getItemMeta();
divMeta.setDisplayName(ChatColor.RESET.toString());
div.setItemMeta(divMeta);
int i = 0;
int min = ((page - 1) * 36);
int max = (min + 35);
int count = (renderers.size() == 0)?27:((renderers.size() - min - 1 >= max)?36:renderers.size() - min);
int area = (count % 9 == 0) ? count : (int) (Math.floor(count / 9) + 1) * 9;
Inventory inv = Bukkit.createInventory(null, 18 + area, plugin.lang.getSection("Lang").getColoredString("Interface.Host-Plugin.Title", '&').replace("$str$", host));
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
block.setItemMeta(divMeta);
while (i < area) {
inv.setItem(i, block);
i++;
}
ItemStack adiv = block;
i = (int) ((count < 9) ? Math.floor((9 - count) / 2) : 0);
boolean even = (count & 1) == 0 && count < 9;
for (String renderer : renderers) {
if (renderers.indexOf(renderer) >= min && renderers.indexOf(renderer) <= max) {
if (even && (i == 4 || i == 13 || i == 22 || i == 31)) inv.setItem(i++, adiv);
inv.setItem(i, hostPlugins.get(renderer).getIcon());
count--;
if (count < 9 && (i == 8 || i == 17 || i == 26)) {
i += (int) Math.floor((9 - count) / 2) + 1;
even = (count & 1) == 0;
} else {
i++;
}
}
}
if (renderers.size() == 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Host-Plugin.No-Plugins", '&'));
block.setItemMeta(blockMeta);
inv.setItem(12, block);
inv.setItem(13, block);
inv.setItem(14, block);
}
i = inv.getSize() - 18;
while (i < inv.getSize()) {
inv.setItem(i, div);
i++;
}
i = inv.getSize() - 9;
if (min != 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back-Arrow", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i++, block);
} else i += 2;
i++;
if (hasHistory()) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i++, block);
inv.setItem(i++, block);
i++;
}
if (renderers.size() - 1 > max) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Next-Arrow", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i, block);
}
Bukkit.getPlayer(player).openInventory(inv);
open = true;
}
}));
}
/**
* Opens the SubServer Menu
*
* @param page Page Number (starting from page 1)
* @param host Host Name (or null to scan all hosts)
*/
public void subserverMenu(final Integer page, final String host) {
setDownloading(ChatColor.stripColor((host == null)?plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.Title", '&'):plugin.lang.getSection("Lang").getColoredString("Interface.Host-SubServer.Title", '&').replace("$str$", host)));
plugin.subdata.sendPacket(new PacketDownloadServerList(host, UUID.randomUUID().toString(), json -> {
setDownloading(null);
lastPage = page;
HashMap<String, String> hosts = new HashMap<String, String>();
List<String> subservers = new ArrayList<String>();
if (host != null && json.getJSONObject("hosts").keySet().contains(host)) {
lastVistedObject = host;
for (String subserver : json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").keySet()) {
hosts.put(subserver, host);
subservers.add(subserver);
}
} else {
lastVistedObject = null;
lastMenu = () -> subserverMenu(1, null);
for (String tmphost : json.getJSONObject("hosts").keySet()) {
for (String tmpsubserver : json.getJSONObject("hosts").getJSONObject(tmphost).getJSONObject("servers").keySet()) {
hosts.put(tmpsubserver, tmphost);
subservers.add(tmpsubserver);
}
}
}
Collections.sort(subservers);
windowHistory.add(() -> subserverMenu(page, host));
ItemStack block;
ItemMeta blockMeta;
ItemStack div = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);
ItemMeta divMeta = div.getItemMeta();
divMeta.setDisplayName(ChatColor.RESET.toString());
div.setItemMeta(divMeta);
int i = 0;
int min = ((page - 1) * 36);
int max = (min + 35);
int count = (subservers.size() == 0)?27:((subservers.size() - min - 1 >= max)?36:subservers.size() - min);
int area = (count % 9 == 0) ? count : (int) (Math.floor(count / 9) + 1) * 9;
Inventory inv = Bukkit.createInventory(null, 18 + area, (host == null)?plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.Title", '&'):plugin.lang.getSection("Lang").getColoredString("Interface.Host-SubServer.Title", '&').replace("$str$", host));
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
block.setItemMeta(divMeta);
while (i < area) {
inv.setItem(i, block);
i++;
}
ItemStack adiv = block;
i = (int) ((count < 9) ? Math.floor((9 - count) / 2) : 0);
boolean even = (count & 1) == 0 && count < 9;
short online, temp, offline, disabled;
for (String subserver : subservers) {
if (subservers.indexOf(subserver) >= min && subservers.indexOf(subserver) <= max) {
if (even && (i == 4 || i == 13 || i == 22 || i == 31)) inv.setItem(i++, adiv);
online = (short) (((i & 1) == 0) ? 5 : 13);
temp = (short) (((i & 1) == 0) ? 3 : 11);
offline = (short) (((i & 1) == 0) ? 4 : 1);
disabled = (short) (((i & 1) == 0) ? 2 : 14);
if (json.getJSONObject("hosts").getJSONObject(hosts.get(subserver)).getJSONObject("servers").getJSONObject(subserver).getBoolean("temp")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, temp);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.AQUA + subserver);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Player-Count", '&').replace("$int$", new DecimalFormat("#,###").format(json.getJSONObject("hosts").getJSONObject(hosts.get(subserver)).getJSONObject("servers").getJSONObject(subserver).getJSONObject("players").keySet().size())), plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Temporary", '&')));
} else if (json.getJSONObject("hosts").getJSONObject(hosts.get(subserver)).getJSONObject("servers").getJSONObject(subserver).getBoolean("running")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, online);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GREEN + subserver);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Player-Count", '&').replace("$int$", new DecimalFormat("#,###").format(json.getJSONObject("hosts").getJSONObject(hosts.get(subserver)).getJSONObject("servers").getJSONObject(subserver).getJSONObject("players").keySet().size()))));
} else if (json.getJSONObject("hosts").getJSONObject(hosts.get(subserver)).getJSONObject("servers").getJSONObject(subserver).getBoolean("enabled")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, offline);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.YELLOW + subserver);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Offline", '&')));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, disabled);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + subserver);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Disabled", '&')));
}
block.setItemMeta(blockMeta);
inv.setItem(i, block);
count--;
if (count < 9 && (i == 8 || i == 17 || i == 26)) {
i += (int) Math.floor((9 - count) / 2) + 1;
even = (count & 1) == 0;
} else {
i++;
}
}
}
if (subservers.size() == 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.No-SubServers", '&'));
block.setItemMeta(blockMeta);
inv.setItem(12, block);
inv.setItem(13, block);
inv.setItem(14, block);
}
i = inv.getSize() - 18;
while (i < inv.getSize()) {
inv.setItem(i, div);
i++;
}
i = inv.getSize() - 9;
if (min != 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back-Arrow", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i++, block);
} else i += 2;
i++;
if (host == null || hasHistory()) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) ((host == null) ? 11 : 14));
blockMeta = block.getItemMeta();
blockMeta.setDisplayName((host == null) ? plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.Host-Menu", '&') : plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i++, block);
inv.setItem(i++, block);
i++;
}
if (subservers.size() - 1 > max) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Next-Arrow", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i, block);
}
Bukkit.getPlayer(player).openInventory(inv);
open = true;
}));
}
/**
* Opens SubServer/&lt;name&gt;
*
* @param subserver SubServer Name
*/
public void subserverAdmin(final String subserver) {
setDownloading(ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Title", '&').replace("$str$", subserver)));
plugin.subdata.sendPacket(new PacketDownloadServerInfo(subserver, UUID.randomUUID().toString(), json -> {
windowHistory.add(() -> subserverAdmin(subserver));
if (!json.getString("type").equals("subserver")) {
if (hasHistory()) back();
} else {
setDownloading(null);
lastVistedObject = subserver;
ItemStack block;
ItemMeta blockMeta;
ItemStack div = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);
ItemMeta divMeta = div.getItemMeta();
divMeta.setDisplayName(ChatColor.RESET.toString());
div.setItemMeta(divMeta);
Inventory inv = Bukkit.createInventory(null, 36, plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Title", '&').replace("$str$", subserver));
int i = 0;
while (i < inv.getSize()) {
inv.setItem(i, div);
i++;
}
i = 0;
if (json.getJSONObject("server").getBoolean("running")) {
if (!(Bukkit.getPlayer(player).hasPermission("subservers.subserver.terminate.*") || Bukkit.getPlayer(player).hasPermission("subservers.subserver.terminate." + subserver.toLowerCase()))) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Terminate", '&')));
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Invalid-Permission", '&').replace("$str$", "subservers.subserver.terminate." + subserver.toLowerCase())));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Terminate", '&'));
}
block.setItemMeta(blockMeta);
inv.setItem(1, block);
inv.setItem(10, block);
if (!(Bukkit.getPlayer(player).hasPermission("subservers.subserver.stop.*") || Bukkit.getPlayer(player).hasPermission("subservers.subserver.stop." + subserver.toLowerCase()))) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Stop", '&')));
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Invalid-Permission", '&').replace("$str$", "subservers.subserver.stop." + subserver.toLowerCase())));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 2);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Stop", '&'));
}
block.setItemMeta(blockMeta);
inv.setItem(2, block);
inv.setItem(3, block);
inv.setItem(11, block);
inv.setItem(12, block);
if (!(Bukkit.getPlayer(player).hasPermission("subservers.subserver.command.*") || Bukkit.getPlayer(player).hasPermission("subservers.subserver.command." + subserver.toLowerCase()))) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Command", '&')));
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Invalid-Permission", '&').replace("$str$", "subservers.subserver.command." + subserver.toLowerCase())));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Command", '&'));
}
block.setItemMeta(blockMeta);
inv.setItem(5, block);
inv.setItem(6, block);
inv.setItem(7, block);
inv.setItem(14, block);
inv.setItem(15, block);
inv.setItem(16, block);
} else {
if (!(Bukkit.getPlayer(player).hasPermission("subservers.subserver.start.*") || Bukkit.getPlayer(player).hasPermission("subservers.subserver.start." + subserver.toLowerCase()))) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Start", '&')));
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Invalid-Permission", '&').replace("$str$", "subservers.subserver.start." + subserver.toLowerCase())));
} else if (!json.getJSONObject("server").getBoolean("enabled")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Start", '&')));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Start", '&'));
}
block.setItemMeta(blockMeta);
inv.setItem(3, block);
inv.setItem(4, block);
inv.setItem(5, block);
inv.setItem(12, block);
inv.setItem(13, block);
inv.setItem(14, block);
}
if (!json.getJSONObject("server").getBoolean("enabled")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Plugins", '&')));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 11);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Admin.Plugins", '&'));
}
block.setItemMeta(blockMeta);
inv.setItem(27, block);
inv.setItem(28, block);
if (json.getJSONObject("server").getBoolean("temp")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 11);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.AQUA + subserver);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Player-Count", '&').replace("$int$", new DecimalFormat("#,###").format(json.getJSONObject("server").getJSONObject("players").keySet().size())), plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Temporary", '&')));
} else if (json.getJSONObject("server").getBoolean("running")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GREEN + subserver);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Player-Count", '&').replace("$int$", new DecimalFormat("#,###").format(json.getJSONObject("server").getJSONObject("players").keySet().size()))));
} else if (json.getJSONObject("server").getBoolean("enabled")) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.YELLOW + subserver);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Offline", '&')));
} else {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.RED + subserver);
blockMeta.setLore(Arrays.asList(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Menu.SubServer-Disabled", '&')));
}
block.setItemMeta(blockMeta);
inv.setItem(30, block);
inv.setItem(31, block);
inv.setItem(32, block);
if (hasHistory()) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back", '&'));
block.setItemMeta(blockMeta);
inv.setItem(34, block);
inv.setItem(35, block);
}
Bukkit.getPlayer(player).openInventory(inv);
open = true;
}
}));
}
/**
* Opens SubServer/&lt;name&gt;/Plugins
*
* @param subserver SubServer Name
*/
public void subserverPlugin(final Integer page, final String subserver) {
setDownloading(ChatColor.stripColor(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Plugin.Title", '&').replace("$str$", subserver)));
plugin.subdata.sendPacket(new PacketDownloadServerInfo(subserver, UUID.randomUUID().toString(), json -> {
windowHistory.add(() -> subserverPlugin(page, subserver));
if (!json.getString("type").equals("subserver")) {
if (hasHistory()) back();
} else {
setDownloading(null);
lastVistedObject = subserver;
lastPage = page;
List<String> renderers = new ArrayList<String>();
for (String renderer : renderers) {
if (subserverPlugins.get(renderer).isEnabled(subserver)) renderers.add(renderer);
}
Collections.sort(renderers);
ItemStack block;
ItemMeta blockMeta;
ItemStack div = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 15);
ItemMeta divMeta = div.getItemMeta();
divMeta.setDisplayName(ChatColor.RESET.toString());
div.setItemMeta(divMeta);
int i = 0;
int min = ((page - 1) * 36);
int max = (min + 35);
int count = (renderers.size() == 0)?27:((renderers.size() - min - 1 >= max)?36:renderers.size() - min);
int area = (count % 9 == 0) ? count : (int) (Math.floor(count / 9) + 1) * 9;
Inventory inv = Bukkit.createInventory(null, 18 + area, plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Plugin.Title", '&').replace("$str$", subserver));
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
block.setItemMeta(divMeta);
while (i < area) {
inv.setItem(i, block);
i++;
}
ItemStack adiv = block;
i = (int) ((count < 9) ? Math.floor((9 - count) / 2) : 0);
boolean even = (count & 1) == 0 && count < 9;
for (String renderer : renderers) {
if (renderers.indexOf(renderer) >= min && renderers.indexOf(renderer) <= max) {
if (even && (i == 4 || i == 13 || i == 22 || i == 31)) inv.setItem(i++, adiv);
inv.setItem(i, subserverPlugins.get(renderer).getIcon());
count--;
if (count < 9 && (i == 8 || i == 17 || i == 26)) {
i += (int) Math.floor((9 - count) / 2) + 1;
even = (count & 1) == 0;
} else {
i++;
}
}
}
if (renderers.size() == 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.SubServer-Plugin.No-Plugins", '&'));
block.setItemMeta(blockMeta);
inv.setItem(12, block);
inv.setItem(13, block);
inv.setItem(14, block);
}
i = inv.getSize() - 18;
while (i < inv.getSize()) {
inv.setItem(i, div);
i++;
}
i = inv.getSize() - 9;
if (min != 0) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back-Arrow", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i++, block);
} else i += 2;
i++;
if (hasHistory()) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Back", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i++, block);
inv.setItem(i++, block);
i++;
}
if (renderers.size() - 1 > max) {
block = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 4);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(plugin.lang.getSection("Lang").getColoredString("Interface.Generic.Next-Arrow", '&'));
block.setItemMeta(blockMeta);
inv.setItem(i++, block);
inv.setItem(i, block);
}
Bukkit.getPlayer(player).openInventory(inv);
open = true;
}
}));
}
}