Choose fallback based on confidence score
The fallback server chosen when a server goes down is now chosen based on SubServers' confidence that the server can recieve the player in question. If there is a tie, the first server to achieve a high score is chosen. Servers meeting these requirements will get the highest score currently possible: -> Fallback servers should not be white-listed (`Restricted: false`) -> Fallback servers should be visible (`Hidden: false`) -> Fallback subservers should be running -> SubServers trusts that fallback servers connected to SubData are online
This commit is contained in:
parent
ba2a69a568
commit
52c6da2517
|
@ -1,12 +1,15 @@
|
|||
package net.ME1312.SubServers.Bungee.Host;
|
||||
|
||||
import net.ME1312.SubServers.Bungee.Event.SubEditServerEvent;
|
||||
import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent;
|
||||
import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent;
|
||||
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
|
||||
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
|
||||
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
|
||||
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
|
||||
import net.ME1312.SubServers.Bungee.Library.Util;
|
||||
import net.ME1312.SubServers.Bungee.Network.Client;
|
||||
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutRunEvent;
|
||||
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
|
||||
import net.ME1312.SubServers.Bungee.SubAPI;
|
||||
import net.ME1312.SubServers.Bungee.SubPlugin;
|
||||
|
@ -45,6 +48,12 @@ public class ServerContainer extends BungeeServerInfo implements Server {
|
|||
@Override
|
||||
public void setSubData(Client client) {
|
||||
this.client = client;
|
||||
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) {
|
||||
YAMLSection args = new YAMLSection();
|
||||
args.set("server", getName());
|
||||
if (client != null) args.set("address", client.getAddress().toString());
|
||||
proxy.getSubData().sendPacket(new PacketOutRunEvent((client != null)?SubNetworkConnectEvent.class:SubNetworkDisconnectEvent.class, args));
|
||||
}
|
||||
if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) client.setHandler(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# SubCreator Sponge Build Script
|
||||
# SubCreator Sponge Forge Script
|
||||
# Usage: "bash build.sh <forge version> <sponge version>"
|
||||
#
|
||||
#!/usr/bin/env bash
|
||||
|
|
|
@ -35,7 +35,7 @@ listeners:
|
|||
max_players: 1
|
||||
tab_size: 60
|
||||
ping_passthrough: false
|
||||
force_default_server: false
|
||||
force_default_server: true
|
||||
player_limit: -1
|
||||
online_mode: true
|
||||
log_commands: false
|
||||
|
|
|
@ -726,19 +726,47 @@ public final class SubPlugin extends BungeeCord implements Listener {
|
|||
@EventHandler(priority = Byte.MIN_VALUE)
|
||||
public void fallback(ServerKickEvent e) {
|
||||
if (e.getPlayer().getPendingConnection().getListener().isForceDefault()) {
|
||||
int i = 0;
|
||||
ServerInfo from = e.getKickedFrom();
|
||||
ServerInfo to = null;
|
||||
while (to == null || from == to) {
|
||||
if (e.getPlayer().getPendingConnection().getListener().getServerPriority().size() > i) {
|
||||
to = getServerInfo(e.getPlayer().getPendingConnection().getListener().getServerPriority().get(i));
|
||||
} else break;
|
||||
i++;
|
||||
ServerInfo next = null;
|
||||
for (String name : e.getPlayer().getPendingConnection().getListener().getServerPriority()) {
|
||||
if (!e.getKickedFrom().getName().equalsIgnoreCase(name)) {
|
||||
ServerInfo server = getServerInfo(name);
|
||||
if (server != null) {
|
||||
if (next == null) {
|
||||
next = server;
|
||||
} else {
|
||||
int current = 0;
|
||||
if (next instanceof Server) {
|
||||
if (!((Server) next).isHidden()) current++;
|
||||
if (!((Server) next).isRestricted()) current++;
|
||||
if (((Server) next).getSubData() != null) current++;
|
||||
|
||||
if (next instanceof SubServer) {
|
||||
if (((SubServer) next).isRunning()) current++;
|
||||
}
|
||||
}
|
||||
|
||||
int proposed = 0;
|
||||
if (server instanceof Server) {
|
||||
if (!((Server) server).isHidden()) proposed++;
|
||||
if (!((Server) server).isRestricted()) proposed++;
|
||||
if (((Server) server).getSubData() != null) proposed++;
|
||||
|
||||
if (server instanceof SubServer) {
|
||||
if (((SubServer) server).isRunning()) proposed++;
|
||||
}
|
||||
}
|
||||
|
||||
if (proposed > current)
|
||||
next = server;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (to != null && from != to) {
|
||||
e.setCancelServer(to);
|
||||
|
||||
if (next != null) {
|
||||
e.setCancelServer(next);
|
||||
e.setCancelled(true);
|
||||
e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Return").replace("$str$", (to instanceof Server)?((Server) to).getDisplayName():to.getName()).replace("$msg$", e.getKickReason()));
|
||||
e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Return").replace("$str$", (next instanceof Server)?((Server) next).getDisplayName():next.getName()).replace("$msg$", e.getKickReason()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ listeners:
|
|||
max_players: 1
|
||||
tab_size: 60
|
||||
ping_passthrough: false
|
||||
force_default_server: false
|
||||
force_default_server: true
|
||||
player_limit: -1
|
||||
online_mode: true
|
||||
log_commands: false
|
||||
|
|
|
@ -6,6 +6,7 @@ import net.ME1312.SubServers.Sync.Library.Config.YAMLSection;
|
|||
import net.ME1312.SubServers.Sync.Library.NamedContainer;
|
||||
import net.ME1312.SubServers.Sync.Library.Version.Version;
|
||||
import net.ME1312.SubServers.Sync.Network.PacketIn;
|
||||
import net.ME1312.SubServers.Sync.SubPlugin;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -22,7 +23,7 @@ public class PacketInRunEvent implements PacketIn {
|
|||
/**
|
||||
* New PacketInRunEvent
|
||||
*/
|
||||
public PacketInRunEvent() {
|
||||
public PacketInRunEvent(SubPlugin plugin) {
|
||||
callback("SubAddHostEvent", new Callback<YAMLSection>() {
|
||||
@Override
|
||||
public void run(YAMLSection data) {
|
||||
|
@ -73,6 +74,20 @@ public class PacketInRunEvent implements PacketIn {
|
|||
callback("SubStartEvent", this);
|
||||
}
|
||||
});
|
||||
callback("SubNetworkConnectEvent", new Callback<YAMLSection>() {
|
||||
@Override
|
||||
public void run(YAMLSection data) {
|
||||
plugin.connect(plugin.servers.get(data.getRawString("server").toLowerCase()), data.getRawString("address"));
|
||||
callback("SubNetworkConnectEvent", this);
|
||||
}
|
||||
});
|
||||
callback("SubNetworkDisconnectEvent", new Callback<YAMLSection>() {
|
||||
@Override
|
||||
public void run(YAMLSection data) {
|
||||
plugin.disconnect(plugin.servers.get(data.getRawString("server").toLowerCase()));
|
||||
callback("SubNetworkDisconnectEvent", this);
|
||||
}
|
||||
});
|
||||
callback("SubStopEvent", new Callback<YAMLSection>() {
|
||||
@Override
|
||||
public void run(YAMLSection data) {
|
||||
|
|
|
@ -146,7 +146,7 @@ public final class SubDataClient {
|
|||
registerPacket(new PacketDownloadPlayerList(), "SubServers", "DownloadPlayerList");
|
||||
registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo");
|
||||
registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo");
|
||||
registerPacket(new PacketInRunEvent(), "SubServers", "RunEvent");
|
||||
registerPacket(new PacketInRunEvent(plugin), "SubServers", "RunEvent");
|
||||
registerPacket(new PacketInReset(), "SubServers", "Reset");
|
||||
registerPacket(new PacketLinkProxy(plugin), "SubServers", "LinkProxy");
|
||||
registerPacket(new PacketStartServer(), "SubServers", "StartServer");
|
||||
|
|
|
@ -10,19 +10,39 @@ import java.net.InetSocketAddress;
|
|||
/**
|
||||
* Server Class
|
||||
*/
|
||||
public class Server extends BungeeServerInfo {
|
||||
public class ServerContainer extends BungeeServerInfo {
|
||||
private final String signature;
|
||||
private String nick = null;
|
||||
private String subdata;
|
||||
private boolean hidden;
|
||||
|
||||
public Server(String signature, String name, String display, InetSocketAddress address, String motd, boolean hidden, boolean restricted) {
|
||||
public ServerContainer(String signature, String name, String display, InetSocketAddress address, String subdata, String motd, boolean hidden, boolean restricted) {
|
||||
super(name, address, motd, restricted);
|
||||
if (Util.isNull(name, address, motd, hidden, restricted)) throw new NullPointerException();
|
||||
this.signature = signature;
|
||||
this.subdata = subdata;
|
||||
this.hidden = hidden;
|
||||
setDisplayName(display);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the SubData Client Address
|
||||
*
|
||||
* @return SubData Client Address (or null if not linked)
|
||||
*/
|
||||
public String getSubData() {
|
||||
return subdata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the SubData Client Address
|
||||
*
|
||||
* @param subdata SubData Client Address (null represents not linked)
|
||||
*/
|
||||
public void setSubData(String subdata) {
|
||||
this.subdata = subdata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Display Name of this Server
|
||||
*
|
|
@ -5,11 +5,11 @@ import java.net.InetSocketAddress;
|
|||
/**
|
||||
* SubServer Class
|
||||
*/
|
||||
public class SubServer extends Server {
|
||||
public class SubServerContainer extends ServerContainer {
|
||||
private boolean running;
|
||||
|
||||
public SubServer(String signature, String name, String display, InetSocketAddress address, String motd, boolean hidden, boolean restricted, boolean running) {
|
||||
super(signature, name, display, address, motd, hidden, restricted);
|
||||
public SubServerContainer(String signature, String name, String display, InetSocketAddress address, String subdata, String motd, boolean hidden, boolean restricted, boolean running) {
|
||||
super(signature, name, display, address, subdata, motd, hidden, restricted);
|
||||
this.running = running;
|
||||
}
|
||||
|
|
@ -8,6 +8,8 @@ import net.ME1312.SubServers.Sync.Library.Util;
|
|||
import net.ME1312.SubServers.Sync.Library.Version.Version;
|
||||
import net.ME1312.SubServers.Sync.Network.API.*;
|
||||
import net.ME1312.SubServers.Sync.Network.Packet.*;
|
||||
import net.ME1312.SubServers.Sync.Server.ServerContainer;
|
||||
import net.ME1312.SubServers.Sync.Server.SubServerContainer;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
|
@ -539,7 +541,7 @@ public final class SubCommand extends CommandX {
|
|||
for (String proxy : proxyCache) if (!list.contains(proxy)) list.add(proxy);
|
||||
for (String host : hostCache.keySet()) if (!list.contains(host)) list.add(host);
|
||||
for (String group : groupCache) if (!list.contains(group)) list.add(group);
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) if (!list.contains(server.getName())) list.add(server.getName());
|
||||
for (ServerContainer server : plugin.servers.values()) if (!list.contains(server.getName())) list.add(server.getName());
|
||||
} else {
|
||||
for (String command : subcommands) {
|
||||
if (!list.contains(command) && command.toLowerCase().startsWith(last))
|
||||
|
@ -557,7 +559,7 @@ public final class SubCommand extends CommandX {
|
|||
if (!list.contains(group) && group.toLowerCase().startsWith(last))
|
||||
list.add(last + group.substring(last.length()));
|
||||
}
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) {
|
||||
for (ServerContainer server : plugin.servers.values()) {
|
||||
if (!list.contains(server.getName()) && server.getName().toLowerCase().startsWith(last))
|
||||
list.add(last + server.getName().substring(last.length()));
|
||||
}
|
||||
|
@ -583,7 +585,7 @@ public final class SubCommand extends CommandX {
|
|||
case "s":
|
||||
case "server":
|
||||
case "subserver":
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) list.add(server.getName());
|
||||
for (ServerContainer server : plugin.servers.values()) list.add(server.getName());
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
|
@ -612,7 +614,7 @@ public final class SubCommand extends CommandX {
|
|||
case "s":
|
||||
case "server":
|
||||
case "subserver":
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) {
|
||||
for (ServerContainer server : plugin.servers.values()) {
|
||||
if (server.getName().toLowerCase().startsWith(last))
|
||||
list.add(last + server.getName().substring(last.length()));
|
||||
}
|
||||
|
@ -629,10 +631,10 @@ public final class SubCommand extends CommandX {
|
|||
List<String> list = new ArrayList<String>();
|
||||
if (args.length == 2) {
|
||||
if (last.length() == 0) {
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) if (server instanceof net.ME1312.SubServers.Sync.Server.SubServer) list.add(server.getName());
|
||||
for (ServerContainer server : plugin.servers.values()) if (server instanceof SubServerContainer) list.add(server.getName());
|
||||
} else {
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) {
|
||||
if (server instanceof net.ME1312.SubServers.Sync.Server.SubServer && server.getName().toLowerCase().startsWith(last))
|
||||
for (ServerContainer server : plugin.servers.values()) {
|
||||
if (server instanceof SubServerContainer && server.getName().toLowerCase().startsWith(last))
|
||||
list.add(last + server.getName().substring(last.length()));
|
||||
}
|
||||
}
|
||||
|
@ -644,10 +646,10 @@ public final class SubCommand extends CommandX {
|
|||
if (args.length == 2) {
|
||||
List<String> list = new ArrayList<String>();
|
||||
if (last.length() == 0) {
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) if (server instanceof net.ME1312.SubServers.Sync.Server.SubServer) list.add(server.getName());
|
||||
for (ServerContainer server : plugin.servers.values()) if (server instanceof SubServerContainer) list.add(server.getName());
|
||||
} else {
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) {
|
||||
if (server instanceof net.ME1312.SubServers.Sync.Server.SubServer && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length()));
|
||||
for (ServerContainer server : plugin.servers.values()) {
|
||||
if (server instanceof SubServerContainer && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length()));
|
||||
}
|
||||
}
|
||||
return new NamedContainer<>((list.size() <= 0)?plugin.api.getLang("SubServers", "Command.Generic.Unknown-SubServer").replace("$str$", args[0]):null, list);
|
||||
|
@ -765,7 +767,7 @@ public final class SubCommand extends CommandX {
|
|||
public void execute(CommandSender sender, String[] args) {
|
||||
if (sender instanceof ProxiedPlayer) {
|
||||
if (args.length > 0) {
|
||||
Map<String, net.ME1312.SubServers.Sync.Server.Server> servers = plugin.servers;
|
||||
Map<String, ServerContainer> servers = plugin.servers;
|
||||
if (servers.keySet().contains(args[0].toLowerCase())) {
|
||||
((ProxiedPlayer) sender).connect(servers.get(args[0].toLowerCase()));
|
||||
} else {
|
||||
|
@ -775,8 +777,8 @@ public final class SubCommand extends CommandX {
|
|||
int i = 0;
|
||||
TextComponent serverm = new TextComponent(ChatColor.RESET.toString());
|
||||
TextComponent div = new TextComponent(plugin.api.getLang("SubServers", "Bungee.Server.Divider"));
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) {
|
||||
if (!server.isHidden() && (!(server instanceof net.ME1312.SubServers.Sync.Server.SubServer) || ((net.ME1312.SubServers.Sync.Server.SubServer) server).isRunning())) {
|
||||
for (ServerContainer server : plugin.servers.values()) {
|
||||
if (!server.isHidden() && (!(server instanceof SubServerContainer) || ((SubServerContainer) server).isRunning())) {
|
||||
if (i != 0) serverm.addExtra(div);
|
||||
TextComponent message = new TextComponent(plugin.api.getLang("SubServers", "Bungee.Server.List").replace("$str$", server.getDisplayName()));
|
||||
try {
|
||||
|
@ -846,7 +848,7 @@ public final class SubCommand extends CommandX {
|
|||
public void execute(CommandSender sender, String[] args) {
|
||||
List<String> messages = new LinkedList<String>();
|
||||
int players = 0;
|
||||
for (net.ME1312.SubServers.Sync.Server.Server server : plugin.servers.values()) {
|
||||
for (ServerContainer server : plugin.servers.values()) {
|
||||
List<String> playerlist = new ArrayList<String>();
|
||||
if (plugin.redis) {
|
||||
try {
|
||||
|
@ -860,7 +862,7 @@ public final class SubCommand extends CommandX {
|
|||
Collections.sort(playerlist);
|
||||
|
||||
players += playerlist.size();
|
||||
if (!server.isHidden() && (!(server instanceof net.ME1312.SubServers.Sync.Server.SubServer) || ((net.ME1312.SubServers.Sync.Server.SubServer) server).isRunning())) {
|
||||
if (!server.isHidden() && (!(server instanceof SubServerContainer) || ((SubServerContainer) server).isRunning())) {
|
||||
int i = 0;
|
||||
String message = plugin.api.getLang("SubServers", "Bungee.List.Format").replace("$str$", server.getDisplayName()).replace("$int$", Integer.toString(playerlist.size()));
|
||||
for (String player : playerlist) {
|
||||
|
|
|
@ -10,12 +10,10 @@ import net.ME1312.SubServers.Sync.Library.NamedContainer;
|
|||
import net.ME1312.SubServers.Sync.Library.UniversalFile;
|
||||
import net.ME1312.SubServers.Sync.Library.Util;
|
||||
import net.ME1312.SubServers.Sync.Library.Version.Version;
|
||||
import net.ME1312.SubServers.Sync.Library.Version.VersionType;
|
||||
import net.ME1312.SubServers.Sync.Network.Cipher;
|
||||
import net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadServerInfo;
|
||||
import net.ME1312.SubServers.Sync.Network.SubDataClient;
|
||||
import net.ME1312.SubServers.Sync.Server.Server;
|
||||
import net.ME1312.SubServers.Sync.Server.SubServer;
|
||||
import net.ME1312.SubServers.Sync.Server.ServerContainer;
|
||||
import net.ME1312.SubServers.Sync.Server.SubServerContainer;
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.api.config.ListenerInfo;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
|
@ -23,16 +21,10 @@ import net.md_5.bungee.api.event.ServerConnectEvent;
|
|||
import net.md_5.bungee.api.event.ServerKickEvent;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import java.io.*;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.Files;
|
||||
|
@ -44,7 +36,7 @@ import java.util.concurrent.TimeUnit;
|
|||
*/
|
||||
public final class SubPlugin extends BungeeCord implements Listener {
|
||||
protected NamedContainer<Long, Map<String, Map<String, String>>> lang = null;
|
||||
public final Map<String, Server> servers = new TreeMap<String, Server>();
|
||||
public final Map<String, ServerContainer> servers = new TreeMap<String, ServerContainer>();
|
||||
|
||||
public final PrintStream out;
|
||||
public final UniversalFile dir = new UniversalFile(new File(System.getProperty("user.dir")));
|
||||
|
@ -263,19 +255,47 @@ public final class SubPlugin extends BungeeCord implements Listener {
|
|||
@EventHandler(priority = Byte.MIN_VALUE)
|
||||
public void fallback(ServerKickEvent e) {
|
||||
if (e.getPlayer().getPendingConnection().getListener().isForceDefault()) {
|
||||
int i = 0;
|
||||
ServerInfo from = e.getKickedFrom();
|
||||
ServerInfo to = null;
|
||||
while (to == null || from == to) {
|
||||
if (e.getPlayer().getPendingConnection().getListener().getServerPriority().size() > i) {
|
||||
to = getServerInfo(e.getPlayer().getPendingConnection().getListener().getServerPriority().get(i));
|
||||
} else break;
|
||||
i++;
|
||||
ServerInfo next = null;
|
||||
for (String name : e.getPlayer().getPendingConnection().getListener().getServerPriority()) {
|
||||
if (!e.getKickedFrom().getName().equalsIgnoreCase(name)) {
|
||||
ServerInfo server = getServerInfo(name);
|
||||
if (server != null) {
|
||||
if (next == null) {
|
||||
next = server;
|
||||
} else {
|
||||
int current = 0;
|
||||
if (next instanceof ServerContainer) {
|
||||
if (!((ServerContainer) next).isHidden()) current++;
|
||||
if (!((ServerContainer) next).isRestricted()) current++;
|
||||
if (((ServerContainer) next).getSubData() != null) current++;
|
||||
|
||||
if (next instanceof SubServerContainer) {
|
||||
if (((SubServerContainer) next).isRunning()) current++;
|
||||
}
|
||||
}
|
||||
|
||||
int proposed = 0;
|
||||
if (server instanceof ServerContainer) {
|
||||
if (!((ServerContainer) server).isHidden()) proposed++;
|
||||
if (!((ServerContainer) server).isRestricted()) proposed++;
|
||||
if (((ServerContainer) server).getSubData() != null) proposed++;
|
||||
|
||||
if (server instanceof SubServerContainer) {
|
||||
if (((SubServerContainer) server).isRunning()) proposed++;
|
||||
}
|
||||
}
|
||||
|
||||
if (proposed > current)
|
||||
next = server;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (to != null && from != to) {
|
||||
e.setCancelServer(to);
|
||||
|
||||
if (next != null) {
|
||||
e.setCancelServer(next);
|
||||
e.setCancelled(true);
|
||||
e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Return").replace("$str$", (to instanceof Server)?((Server) to).getDisplayName():to.getName()).replace("$msg$", e.getKickReason()));
|
||||
e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Return").replace("$str$", (next instanceof ServerContainer)?((ServerContainer) next).getDisplayName():next.getName()).replace("$msg$", e.getKickReason()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -285,42 +305,36 @@ public final class SubPlugin extends BungeeCord implements Listener {
|
|||
api.getServer(e.getServer(), server -> {
|
||||
if (server != null) {
|
||||
if (server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer) {
|
||||
servers.put(server.getName().toLowerCase(), new SubServer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
|
||||
server.getMotd(), server.isHidden(), server.isRestricted(), ((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning()));
|
||||
servers.put(server.getName().toLowerCase(), new SubServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
|
||||
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted(), ((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning()));
|
||||
System.out.println("SubServers > Added SubServer: " + e.getServer());
|
||||
} else {
|
||||
servers.put(server.getName().toLowerCase(), new Server(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
|
||||
server.getMotd(), server.isHidden(), server.isRestricted()));
|
||||
servers.put(server.getName().toLowerCase(), new ServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
|
||||
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted()));
|
||||
System.out.println("SubServers > Added Server: " + e.getServer());
|
||||
}
|
||||
} else System.out.println("PacketDownloadServerInfo(" + e.getServer() + ") returned with an invalid response");
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(priority = Byte.MIN_VALUE)
|
||||
public void start(SubStartEvent e) {
|
||||
if (servers.keySet().contains(e.getServer().toLowerCase()) && servers.get(e.getServer().toLowerCase()) instanceof SubServer)
|
||||
((SubServer) servers.get(e.getServer().toLowerCase())).setRunning(true);
|
||||
}
|
||||
|
||||
public Boolean merge(net.ME1312.SubServers.Sync.Network.API.Server server) {
|
||||
Server current = servers.get(server.getName().toLowerCase());
|
||||
if (current == null || server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer || !(current instanceof SubServer)) {
|
||||
ServerContainer current = servers.get(server.getName().toLowerCase());
|
||||
if (current == null || server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer || !(current instanceof SubServerContainer)) {
|
||||
if (current == null || !current.getSignature().equals(server.getSignature())) {
|
||||
if (server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer) {
|
||||
servers.put(server.getName().toLowerCase(), new SubServer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
|
||||
server.getMotd(), server.isHidden(), server.isRestricted(), ((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning()));
|
||||
servers.put(server.getName().toLowerCase(), new SubServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
|
||||
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted(), ((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning()));
|
||||
} else {
|
||||
servers.put(server.getName().toLowerCase(), new Server(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
|
||||
server.getMotd(), server.isHidden(), server.isRestricted()));
|
||||
servers.put(server.getName().toLowerCase(), new ServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
|
||||
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted()));
|
||||
}
|
||||
|
||||
System.out.println("SubServers > Added "+((server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer)?"Sub":"")+"Server: " + server.getName());
|
||||
return true;
|
||||
} else {
|
||||
if (server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer) {
|
||||
if (((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning() != ((SubServer) current).isRunning())
|
||||
((SubServer) current).setRunning(((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning());
|
||||
if (((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning() != ((SubServerContainer) current).isRunning())
|
||||
((SubServerContainer) current).setRunning(((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning());
|
||||
}
|
||||
if (!server.getMotd().equals(current.getMotd()))
|
||||
current.setMotd(server.getMotd());
|
||||
|
@ -341,7 +355,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
|
|||
@EventHandler(priority = Byte.MIN_VALUE)
|
||||
public void edit(SubEditServerEvent e) {
|
||||
if (servers.keySet().contains(e.getServer().toLowerCase())) {
|
||||
Server server = servers.get(e.getServer().toLowerCase());
|
||||
ServerContainer server = servers.get(e.getServer().toLowerCase());
|
||||
switch (e.getEdit().name().toLowerCase()) {
|
||||
case "display":
|
||||
server.setDisplayName(e.getEdit().get().asString());
|
||||
|
@ -359,10 +373,26 @@ public final class SubPlugin extends BungeeCord implements Listener {
|
|||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = Byte.MIN_VALUE)
|
||||
public void start(SubStartEvent e) {
|
||||
if (servers.keySet().contains(e.getServer().toLowerCase()) && servers.get(e.getServer().toLowerCase()) instanceof SubServerContainer)
|
||||
((SubServerContainer) servers.get(e.getServer().toLowerCase())).setRunning(true);
|
||||
}
|
||||
|
||||
public void connect(ServerContainer server, String address) {
|
||||
System.out.println("SubServers > Networked Server: " + server.getName());
|
||||
server.setSubData(address);
|
||||
}
|
||||
|
||||
public void disconnect(ServerContainer server) {
|
||||
System.out.println("SubServers > Unnetworked Server: " + server.getName());
|
||||
server.setSubData(null);
|
||||
}
|
||||
|
||||
@EventHandler(priority = Byte.MIN_VALUE)
|
||||
public void stop(SubStoppedEvent e) {
|
||||
if (servers.keySet().contains(e.getServer().toLowerCase()) && servers.get(e.getServer().toLowerCase()) instanceof SubServer)
|
||||
((SubServer) servers.get(e.getServer().toLowerCase())).setRunning(false);
|
||||
if (servers.keySet().contains(e.getServer().toLowerCase()) && servers.get(e.getServer().toLowerCase()) instanceof SubServerContainer)
|
||||
((SubServerContainer) servers.get(e.getServer().toLowerCase())).setRunning(false);
|
||||
}
|
||||
|
||||
@EventHandler(priority = Byte.MIN_VALUE)
|
||||
|
|
Loading…
Reference in New Issue