SubServers-2/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java

355 lines
23 KiB
Java

package net.ME1312.SubServers.Client.Bukkit.Library.Compatibility;
import net.ME1312.SubServers.Client.Bukkit.SubPlugin;
import net.ME1312.SubServers.Client.Common.Network.API.Host;
import net.ME1312.SubServers.Client.Common.Network.API.Proxy;
import net.ME1312.SubServers.Client.Common.Network.API.Server;
import net.ME1312.SubServers.Client.Common.Network.API.SubServer;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;
/**
* BungeeCord Chat Library Compatibility Class
*/
public class BungeeChat {
private SubPlugin plugin;
public BungeeChat(SubPlugin plugin) {
this.plugin = plugin;
}
/**
* Output for <b>/sub list</b>
*/
public void listCommand(CommandSender sender, String label) {
plugin.api.getGroups(groups -> plugin.api.getHosts(hosts -> plugin.api.getServers(servers -> plugin.api.getMasterProxy(proxymaster -> plugin.api.getProxies(proxies -> {
int i = 0;
boolean sent = false;
TextComponent div = new TextComponent(plugin.api.getLang("SubServers", "Command.List.Divider"));
if (groups.keySet().size() > 0) {
sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Group-Header"));
for (String group : groups.keySet()) {
List<TextComponent> hoverm = new LinkedList<TextComponent>();
TextComponent msg = new TextComponent(" ");
TextComponent message = new TextComponent(group);
TextComponent hover = new TextComponent(group + '\n');
message.setColor(ChatColor.GOLD);
hover.setColor(ChatColor.GOLD);
hoverm.add(hover);
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Group-Menu.Group-Server-Count").replace("$int$", new DecimalFormat("#,###").format(groups.get(group).size())) + ChatColor.RESET);
hoverm.add(hover);
message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Server 1 " + group));
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()])));
msg.addExtra(message);
msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Header")));
for (Server server : groups.get(group)) {
hoverm = new LinkedList<TextComponent>();
message = new TextComponent(server.getDisplayName());
hover = new TextComponent(server.getDisplayName() + '\n');
if (server instanceof SubServer) {
if (((SubServer) server).isRunning()) {
message.setColor(ChatColor.GREEN);
hover.setColor(ChatColor.GREEN);
hoverm.add(hover);
if (!server.getName().equals(server.getDisplayName())) {
hover = new TextComponent(server.getDisplayName() + '\n');
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
if (((SubServer) server).getStopAction() == SubServer.StopAction.REMOVE_SERVER || ((SubServer) server).getStopAction() == SubServer.StopAction.RECYCLE_SERVER || ((SubServer) server).getStopAction() == SubServer.StopAction.DELETE_SERVER) {
message.setColor(ChatColor.AQUA);
hover.setColor(ChatColor.AQUA);
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Temporary") + '\n');
hoverm.add(hover);
}
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(server.getRemotePlayers().size())) + ChatColor.RESET);
} else if (((SubServer) server).isAvailable() && ((SubServer) server).isEnabled() && ((SubServer) server).getCurrentIncompatibilities().size() == 0) {
message.setColor(ChatColor.YELLOW);
hover.setColor(ChatColor.YELLOW);
hoverm.add(hover);
if (!server.getName().equals(server.getDisplayName())) {
hover = new TextComponent(server.getName() + '\n');
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Offline"));
} else {
message.setColor(ChatColor.RED);
hover.setColor(ChatColor.RED);
if (!server.getName().equals(server.getDisplayName())) {
hoverm.add(hover);
hover = new TextComponent(server.getName() + '\n');
hover.setColor(ChatColor.GRAY);
}
if (((SubServer) server).getCurrentIncompatibilities().size() != 0) {
hoverm.add(hover);
String list = "";
for (String other : ((SubServer) server).getCurrentIncompatibilities()) {
if (list.length() != 0) list += ", ";
list += other;
}
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Incompatible").replace("$str$", list) + (((SubServer) server).isAvailable() && (((SubServer) server).isEnabled())?"":"\n"));
}
if (!((SubServer) server).isAvailable() || !((SubServer) server).isEnabled()) {
hoverm.add(hover);
hover = new TextComponent(plugin.api.getLang("SubServers", (!((SubServer) server).isAvailable())?"Interface.Server-Menu.SubServer-Unavailable":"Interface.Server-Menu.SubServer-Disabled"));
}
}
hoverm.add(hover);
if (plugin.config.get().getMap("Settings").getBoolean("Show-Addresses", false)) {
hover = new TextComponent('\n' + server.getAddress().getAddress().getHostAddress() + ':' + server.getAddress().getPort());
} else {
hover = new TextComponent("\n" + server.getAddress().getPort());
}
hover.setColor(ChatColor.WHITE);
hoverm.add(hover);
message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Server/ " + server.getName()));
} else {
message.setColor(ChatColor.WHITE);
hover.setColor(ChatColor.WHITE);
if (!server.getName().equals(server.getDisplayName())) {
hoverm.add(hover);
hover = new TextComponent(server.getName() + '\n');
hover.setColor(ChatColor.GRAY);
}
hoverm.add(hover);
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External") + '\n');
hoverm.add(hover);
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(server.getRemotePlayers().size())) + ChatColor.RESET);
hoverm.add(hover);
if (plugin.config.get().getMap("Settings").getBoolean("Show-Addresses", false)) {
hover = new TextComponent('\n' + server.getAddress().getAddress().getHostAddress() + ':' + server.getAddress().getPort());
} else {
hover = new TextComponent("\n" + server.getAddress().getPort());
}
hover.setColor(ChatColor.WHITE);
hoverm.add(hover);
}
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()])));
if (i != 0) msg.addExtra(div);
msg.addExtra(message);
i++;
}
if (i == 0) msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Empty")));
((Player) sender).spigot().sendMessage(msg);
i = 0;
sent = true;
}
if (!sent) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty"));
sent = false;
}
sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Host-Header"));
for (Host host : hosts.values()) {
List<TextComponent> hoverm = new LinkedList<TextComponent>();
TextComponent msg = new TextComponent(" ");
TextComponent message = new TextComponent(host.getDisplayName());
TextComponent hover = new TextComponent(host.getDisplayName() + '\n');
if (host.isAvailable() && host.isEnabled()) {
message.setColor(ChatColor.AQUA);
hover.setColor(ChatColor.AQUA);
hoverm.add(hover);
if (!host.getName().equals(host.getDisplayName())) {
hover = new TextComponent(host.getName() + '\n');
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Host-Menu.Host-Server-Count").replace("$int$", new DecimalFormat("#,###").format(host.getSubServers().keySet().size())) + ChatColor.RESET);
} else {
message.setColor(ChatColor.RED);
hover.setColor(ChatColor.RED);
hoverm.add(hover);
if (!host.getName().equals(host.getDisplayName())) {
hover = new TextComponent(host.getName() + '\n');
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
hover = new TextComponent(plugin.api.getLang("SubServers", (!host.isAvailable())?"Interface.Host-Menu.Host-Unavailable":"Interface.Host-Menu.Host-Disabled"));
}
if (plugin.config.get().getMap("Settings").getBoolean("Show-Addresses", false)) {
hoverm.add(hover);
hover = new TextComponent('\n' + host.getAddress().getHostAddress());
hover.setColor(ChatColor.WHITE);
}
hoverm.add(hover);
message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Host/ " + host.getName()));
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()])));
msg.addExtra(message);
msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Header")));
for (SubServer subserver : host.getSubServers().values()) {
hoverm = new LinkedList<TextComponent>();
message = new TextComponent(subserver.getDisplayName());
hover = new TextComponent(subserver.getDisplayName() + '\n');
message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Server/ " + subserver));
if (subserver.isRunning()) {
message.setColor(ChatColor.GREEN);
hover.setColor(ChatColor.GREEN);
hoverm.add(hover);
if (!subserver.getName().equals(subserver.getDisplayName())) {
hover = new TextComponent(subserver.getName() + '\n');
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
if (subserver.getStopAction() == SubServer.StopAction.REMOVE_SERVER || subserver.getStopAction() == SubServer.StopAction.RECYCLE_SERVER || subserver.getStopAction() == SubServer.StopAction.DELETE_SERVER) {
message.setColor(ChatColor.AQUA);
hover.setColor(ChatColor.AQUA);
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Temporary") + '\n');
hoverm.add(hover);
}
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(subserver.getRemotePlayers().size())) + ChatColor.RESET);
} else if (subserver.isAvailable() && subserver.isEnabled() && subserver.getCurrentIncompatibilities().size() == 0) {
message.setColor(ChatColor.YELLOW);
hover.setColor(ChatColor.YELLOW);
hoverm.add(hover);
if (!subserver.getName().equals(subserver.getDisplayName())) {
hover = new TextComponent(subserver.getName() + '\n');
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Offline"));
} else {
message.setColor(ChatColor.RED);
hover.setColor(ChatColor.RED);
if (!subserver.getName().equals(subserver.getDisplayName())) {
hoverm.add(hover);
hover = new TextComponent(subserver.getName() + '\n');
hover.setColor(ChatColor.GRAY);
}
if (subserver.getCurrentIncompatibilities().size() != 0) {
hoverm.add(hover);
String list = "";
for (String other : subserver.getCurrentIncompatibilities()) {
if (list.length() != 0) list += ", ";
list += other;
}
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Incompatible").replace("$str$", list) + ((subserver.isAvailable() && subserver.isEnabled())?"":"\n"));
}
if (!subserver.isAvailable() || !subserver.isEnabled()) {
hoverm.add(hover);
hover = new TextComponent(plugin.api.getLang("SubServers", (!subserver.isAvailable())?"Interface.Server-Menu.SubServer-Unavailable":"Interface.Server-Menu.SubServer-Disabled"));
}
}
hoverm.add(hover);
if (plugin.config.get().getMap("Settings").getBoolean("Show-Addresses", false)) {
hover = new TextComponent('\n' + subserver.getAddress().getAddress().getHostAddress()+':'+subserver.getAddress().getPort());
} else {
hover = new TextComponent("\n" + subserver.getAddress().getPort());
}
hover.setColor(ChatColor.WHITE);
hoverm.add(hover);
message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Server/ " + subserver.getName()));
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()])));
if (i != 0) msg.addExtra(div);
msg.addExtra(message);
i++;
}
if (i == 0) msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Empty")));
((Player) sender).spigot().sendMessage(msg);
i = 0;
sent = true;
}
if (!sent) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty"));
sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Server-Header"));
TextComponent msg = new TextComponent(" ");
for (Server server : servers.values()) if (!(server instanceof SubServer)) {
List<TextComponent> hoverm = new LinkedList<TextComponent>();
TextComponent message = new TextComponent(server.getDisplayName());
TextComponent hover = new TextComponent(server.getDisplayName() + '\n');
message.setColor(ChatColor.WHITE);
hover.setColor(ChatColor.WHITE);
hoverm.add(hover);
if (!server.getName().equals(server.getDisplayName())) {
hover = new TextComponent(server.getName() + '\n');
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External") + '\n');
hoverm.add(hover);
hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(server.getRemotePlayers().size())) + ChatColor.RESET);
hoverm.add(hover);
if (plugin.config.get().getMap("Settings").getBoolean("Show-Addresses", false)) {
hover = new TextComponent('\n' + server.getAddress().getAddress().getHostAddress()+':'+server.getAddress().getPort());
} else {
hover = new TextComponent("\n" + server.getAddress().getPort());
}
hover.setColor(ChatColor.WHITE);
hoverm.add(hover);
message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Server/ " + server.getName()));
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()])));
if (i != 0) msg.addExtra(div);
msg.addExtra(message);
i++;
}
if (i == 0) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty"));
else ((Player) sender).spigot().sendMessage(msg);
if (proxies.keySet().size() > 0) {
sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Proxy-Header"));
msg = new TextComponent(" ");
List<TextComponent> hoverm = new LinkedList<TextComponent>();
TextComponent message = new TextComponent("(master)");
TextComponent hover = new TextComponent("(master)");
message.setColor(ChatColor.GRAY);
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
if (proxymaster != null) {
if (!proxymaster.getName().equals(proxymaster.getDisplayName())) {
hover = new TextComponent('\n' + proxymaster.getDisplayName());
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
hover = new TextComponent('\n' + plugin.api.getLang("SubServers", "Interface.Proxy-Menu.Proxy-Master"));
hoverm.add(hover);
hover = new TextComponent('\n' + plugin.api.getLang("SubServers", "Interface.Proxy-Menu.Proxy-Player-Count").replace("$int$", new DecimalFormat("#,###").format(proxymaster.getPlayers().size())) + ChatColor.RESET);
hoverm.add(hover);
} else {
hover = new TextComponent('\n' + plugin.api.getLang("SubServers", "Interface.Proxy-Menu.Proxy-Master"));
hoverm.add(hover);
}
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()])));
msg.addExtra(message);
for (Proxy proxy : proxies.values()) {
hoverm = new LinkedList<TextComponent>();
message = new TextComponent(proxy.getDisplayName());
hover = new TextComponent(proxy.getDisplayName());
if (proxy.getSubData()[0] != null) {
message.setColor(ChatColor.AQUA);
hover.setColor(ChatColor.AQUA);
if (!proxy.getName().equals(proxy.getDisplayName())) {
hoverm.add(hover);
hover = new TextComponent('\n' + proxy.getName());
hover.setColor(ChatColor.GRAY);
}
hoverm.add(hover);
hover = new TextComponent('\n' + plugin.api.getLang("SubServers", "Interface.Proxy-Menu.Proxy-Player-Count").replace("$int$", new DecimalFormat("#,###").format(proxy.getPlayers().size())));
} else {
message.setColor(ChatColor.RED);
hover.setColor(ChatColor.RED);
hoverm.add(hover);
if (!proxy.getName().equals(proxy.getDisplayName())) {
hover = new TextComponent('\n' + proxy.getName());
hover.setColor(ChatColor.GRAY);
hoverm.add(hover);
}
hover = new TextComponent('\n' + plugin.api.getLang("SubServers", "Interface.Proxy-Menu.Proxy-Disconnected"));
}
hoverm.add(hover);
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()])));
msg.addExtra(div);
msg.addExtra(message);
}
((Player) sender).spigot().sendMessage(msg);
}
})))));
}
}