Expand on the API for restricted servers

This commit is contained in:
ME1312 2019-01-10 15:52:38 -05:00
parent 16480af130
commit 6218b873ca
No known key found for this signature in database
GPG Key ID: FEFFE2F698E88FA8
17 changed files with 395 additions and 62 deletions

View File

@ -6,7 +6,7 @@ import java.io.File;
import java.lang.reflect.Field;
/**
* Executable String Handler Class
* Executable Handler Class
*/
public class Executable {
private Executable() {}

View File

@ -4,6 +4,7 @@ import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.Collection;
import java.util.List;
@ -98,6 +99,57 @@ public interface Server extends ServerInfo, ClientHandler, ExtraDataHandler {
*/
void setRestricted(boolean value);
/**
* Get a copy of the current whitelist
*
* @return Player Whitelist
*/
Collection<UUID> getWhitelist();
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
boolean isWhitelisted(ProxiedPlayer player);
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
boolean isWhitelisted(UUID player);
/**
* Add a player to the whitelist (for use with restricted servers)
*
* @param player Player to add
*/
void whitelist(ProxiedPlayer player);
/**
* Add a player to the whitelist (for use with restricted servers)
*
* @param player Player to add
*/
void whitelist(UUID player);
/**
* Remove a player to the whitelist
*
* @param player Player to remove
*/
void unwhitelist(ProxiedPlayer player);
/**
* Remove a player to the whitelist
*
* @param player Player to remove
*/
void unwhitelist(UUID player);
/**
* Get the Signature of this Object
*

View File

@ -9,11 +9,13 @@ 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.PacketOutExUpdateWhitelist;
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;
import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.lang.reflect.Field;
@ -25,11 +27,12 @@ import java.util.*;
*/
public class ServerContainer extends BungeeServerInfo implements Server {
private YAMLSection extra = new YAMLSection();
private final String signature;
private Client client = null;
private List<String> groups = new ArrayList<String>();
private String nick = null;
private List<String> groups = new ArrayList<String>();
private List<UUID> whitelist = new ArrayList<UUID>();
private boolean hidden;
private final String signature;
public ServerContainer(String name, InetSocketAddress address, String motd, boolean hidden, boolean restricted) throws InvalidServerException {
super(name, address, motd, restricted);
@ -153,6 +156,56 @@ public class ServerContainer extends BungeeServerInfo implements Server {
}
}
@Override
public Collection<UUID> getWhitelist() {
return new ArrayList<UUID>(whitelist);
}
/**
* See if a player can access this server
*
* @param player Player
* @return Whitelisted Status
*/
@Override
public boolean canAccess(CommandSender player) {
return (player instanceof ProxiedPlayer && whitelist.contains(((ProxiedPlayer) player).getUniqueId())) || super.canAccess(player);
}
@Override
public boolean isWhitelisted(ProxiedPlayer player) {
return isWhitelisted(player.getUniqueId());
}
@Override
public boolean isWhitelisted(UUID player) {
return whitelist.contains(player);
}
@Override
public void whitelist(ProxiedPlayer player) {
whitelist(player.getUniqueId());
}
@Override
public void whitelist(UUID player) {
if (Util.isNull(player)) throw new NullPointerException();
whitelist.add(player);
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) proxy.getSubData().sendPacket(new PacketOutExUpdateWhitelist(getName(), true, player));
}
@Override
public void unwhitelist(ProxiedPlayer player) {
unwhitelist(player.getUniqueId());
}
@Override
public void unwhitelist(UUID player) {
if (Util.isNull(player)) throw new NullPointerException();
whitelist.remove(player);
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) proxy.getSubData().sendPacket(new PacketOutExUpdateWhitelist(getName(), false, player));
}
@Override
public final String getSignature() {
return signature;
@ -196,6 +249,7 @@ public class ServerContainer extends BungeeServerInfo implements Server {
info.set("group", getGroups());
info.set("address", getAddress().getAddress().getHostAddress() + ':' + getAddress().getPort());
info.set("motd", getMotd());
info.set("whitelist", whitelist);
info.set("restricted", isRestricted());
info.set("hidden", isHidden());
if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString());

View File

@ -9,48 +9,50 @@ import java.net.URL;
import java.net.URLClassLoader;
/**
* Load JNA Library
* JNA Library Loader Class
*/
public class JNA {
private JNA() {}
private static ClassLoader JNA = null;
private static final String JNA_VERSION = "5.2.0";
private static final String JNA_DOWNLOAD = "https://oss.sonatype.org/service/local/repositories/releases/content/net/java/dev/jna/$1/" + JNA_VERSION + "/$1-" + JNA_VERSION + ".jar";
/**
* Get/Load JNA Library
*
* @return JNA ClassLoader
*/
@SuppressWarnings("deprecation")
public static ClassLoader get() {
if (JNA == null) {
boolean announced = false;
UniversalFile library = new UniversalFile(SubAPI.getInstance().getInternals().dir, "SubServers:Cache:Libraries");
library.mkdirs();
UniversalFile jna = new UniversalFile(library, "jna-" + JNA_VERSION + ".jar");
jna.getParentFile().mkdirs();
if (!jna.exists()) {
jna.getParentFile().mkdirs();
if (!jna.exists()) {
System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
try (FileOutputStream fin = new FileOutputStream(jna)) {
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna")), fin);
} catch (Throwable e) {
jna.delete();
e.printStackTrace();
}
announced = true;
announced = true;
System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
try (FileOutputStream fin = new FileOutputStream(jna)) {
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna")), fin);
} catch (Throwable e) {
jna.delete();
e.printStackTrace();
}
}
UniversalFile platform = new UniversalFile(library, "jna-platform-" + JNA_VERSION + ".jar");
platform.getParentFile().mkdirs();
if (!platform.exists()) {
platform.getParentFile().mkdirs();
if (!platform.exists()) {
if (!announced) System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
try (FileOutputStream fin = new FileOutputStream(platform)) {
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna-platform")), fin);
} catch (Throwable e) {
platform.delete();
e.printStackTrace();
}
if (!announced) System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
announced = true;
try (FileOutputStream fin = new FileOutputStream(platform)) {
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna-platform")), fin);
} catch (Throwable e) {
platform.delete();
e.printStackTrace();
}
}
if (jna.exists()) {
System.out.println(">> Loading JNA Library");
if (announced) System.out.println(">> Loading JNA Library");
try {
JNA = new URLClassLoader(new URL[]{jna.toURI().toURL(), platform.toURI().toURL()});
} catch (Throwable e) {

View File

@ -0,0 +1,44 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import java.util.UUID;
/**
* Update External Whitelist Packet
*/
public class PacketOutExUpdateWhitelist implements PacketOut {
private String name;
private boolean mode;
private UUID value;
/**
* New PacketOutExUpdateWhitelist
*
* @param name Server Name
* @param mode Update Mode (true for add, false for remove)
* @param value Whitelist Value
*/
public PacketOutExUpdateWhitelist(String name, boolean mode, UUID value) {
if (Util.isNull(name, mode, value)) throw new NullPointerException();
this.name = name;
this.mode = mode;
this.value = value;
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("server", name);
data.set("mode", mode);
data.set("value", value);
return data;
}
@Override
public Version getVersion() {
return new Version("2.13.2c");
}
}

View File

@ -1,7 +1,6 @@
package net.ME1312.SubServers.Bungee.Network;
import com.dosse.upnp.UPnP;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent;
import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
@ -12,14 +11,11 @@ import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Encryption.AES;
import net.ME1312.SubServers.Bungee.Network.Packet.*;
import net.ME1312.SubServers.Bungee.SubPlugin;
import org.msgpack.core.MessagePack;
import org.msgpack.value.Value;
import org.msgpack.value.ValueFactory;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -130,6 +126,7 @@ public final class SubDataServer {
registerPacket(PacketExDeleteServer.class, "SubServers", "ExDeleteServer");
registerPacket(PacketExRemoveServer.class, "SubServers", "ExRemoveServer");
registerPacket(PacketExUpdateServer.class, "SubServers", "ExUpdateServer");
registerPacket(PacketOutExUpdateWhitelist.class, "SubServers", "ExUpdateWhitelist");
registerPacket(PacketLinkExHost.class, "SubServers", "LinkExHost");
registerPacket(PacketLinkProxy.class, "SubServers", "LinkProxy");
registerPacket(PacketLinkServer.class, "SubServers", "LinkServer");

View File

@ -4,6 +4,7 @@ import net.ME1312.SubServers.Client.Bukkit.Library.Config.YAMLSection;
import net.ME1312.SubServers.Client.Bukkit.Library.NamedContainer;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadServerInfo;
import net.ME1312.SubServers.Client.Bukkit.SubAPI;
import org.bukkit.OfflinePlayer;
import java.net.InetSocketAddress;
import java.util.*;
@ -123,6 +124,35 @@ public class Server {
return raw.getBoolean("restricted");
}
/**
* Get a copy of the current whitelist
*
* @return Player Whitelist
*/
public Collection<UUID> getWhitelist() {
return raw.getUUIDList("whitelist");
}
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(OfflinePlayer player) {
return isWhitelisted(player.getUniqueId());
}
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(UUID player) {
return getWhitelist().contains(player);
}
/**
* Get the Signature of this Object
*

View File

@ -4,6 +4,7 @@ import net.ME1312.SubServers.Client.Sponge.Library.Config.YAMLSection;
import net.ME1312.SubServers.Client.Sponge.Library.NamedContainer;
import net.ME1312.SubServers.Client.Sponge.Network.Packet.PacketDownloadServerInfo;
import net.ME1312.SubServers.Client.Sponge.SubAPI;
import org.spongepowered.api.entity.living.player.User;
import java.net.InetSocketAddress;
import java.util.*;
@ -123,6 +124,35 @@ public class Server {
return raw.getBoolean("restricted");
}
/**
* Get a copy of the current whitelist
*
* @return Player Whitelist
*/
public Collection<UUID> getWhitelist() {
return raw.getUUIDList("whitelist");
}
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(User player) {
return isWhitelisted(player.getUniqueId());
}
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(UUID player) {
return getWhitelist().contains(player);
}
/**
* Get the Signature of this Object
*

View File

@ -6,7 +6,7 @@ import java.io.File;
import java.lang.reflect.Field;
/**
* Executable String Handler Class
* Executable Handler Class
*/
public class Executable {
private Executable() {}

View File

@ -11,49 +11,51 @@ import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
/**
* Load JNA Library
* JNA Library Loader Class
*/
public class JNA {
private JNA() {}
private static ClassLoader JNA = null;
private static final String JNA_VERSION = "5.2.0";
private static final String JNA_DOWNLOAD = "https://oss.sonatype.org/service/local/repositories/releases/content/net/java/dev/jna/$1/" + JNA_VERSION + "/$1-" + JNA_VERSION + ".jar";
/**
* Get/Load JNA Library
*
* @return JNA ClassLoader
*/
@SuppressWarnings("deprecation")
public static ClassLoader get() {
if (JNA == null) {
boolean announced = false;
Logger log = new Logger("JNA");
UniversalFile library = new UniversalFile(Galaxi.getInstance().getRuntimeDirectory(), "Cache:Libraries");
library.mkdirs();
UniversalFile jna = new UniversalFile(library, "jna-" + JNA_VERSION + ".jar");
jna.getParentFile().mkdirs();
if (!jna.exists()) {
jna.getParentFile().mkdirs();
if (!jna.exists()) {
announced = true;
log.info.println("Downloading JNA Library v" + JNA_VERSION);
try (InputStream in = new URL(JNA_DOWNLOAD.replace("$1", "jna")).openStream()) {
Files.copy(in, jna.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Throwable e) {
jna.delete();
log.error.println(e);
}
log.info.println("Downloading JNA Library v" + JNA_VERSION);
announced = true;
try (InputStream in = new URL(JNA_DOWNLOAD.replace("$1", "jna")).openStream()) {
Files.copy(in, jna.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Throwable e) {
jna.delete();
log.error.println(e);
}
}
UniversalFile platform = new UniversalFile(library, "jna-platform-" + JNA_VERSION + ".jar");
platform.getParentFile().mkdirs();
if (!platform.exists()) {
platform.getParentFile().mkdirs();
if (!platform.exists()) {
if (!announced) log.info.println("Downloading JNA Library v" + JNA_VERSION);
try (InputStream in = new URL(JNA_DOWNLOAD.replace("$1", "jna-platform")).openStream()) {
Files.copy(in, platform.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Throwable e) {
platform.delete();
log.error.println(e);
}
if (!announced) log.info.println("Downloading JNA Library v" + JNA_VERSION);
announced = true;
try (InputStream in = new URL(JNA_DOWNLOAD.replace("$1", "jna-platform")).openStream()) {
Files.copy(in, platform.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Throwable e) {
platform.delete();
log.error.println(e);
}
}
if (jna.exists()) {
log.info.println("Loading JNA Library");
if (announced) log.info.println("Loading JNA Library");
try {
JNA = new URLClassLoader(new URL[]{jna.toURI().toURL(), platform.toURI().toURL()});
} catch (Throwable e) {

View File

@ -123,6 +123,25 @@ public class Server {
return raw.getBoolean("restricted");
}
/**
* Get a copy of the current whitelist
*
* @return Player Whitelist
*/
public Collection<UUID> getWhitelist() {
return raw.getUUIDList("whitelist");
}
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(UUID player) {
return getWhitelist().contains(player);
}
/**
* Get the Signature of this Object
*

View File

@ -4,6 +4,7 @@ import net.ME1312.SubServers.Sync.Library.Config.YAMLSection;
import net.ME1312.SubServers.Sync.Library.NamedContainer;
import net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadServerInfo;
import net.ME1312.SubServers.Sync.SubAPI;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.net.InetSocketAddress;
import java.util.*;
@ -123,6 +124,35 @@ public class Server {
return raw.getBoolean("restricted");
}
/**
* Get a copy of the current whitelist
*
* @return Player Whitelist
*/
public Collection<UUID> getWhitelist() {
return raw.getUUIDList("whitelist");
}
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(ProxiedPlayer player) {
return isWhitelisted(player.getUniqueId());
}
/**
* See if a player is whitelisted
*
* @param player Player to check
* @return Whitelisted Status
*/
public boolean isWhitelisted(UUID player) {
return getWhitelist().contains(player);
}
/**
* Get the Signature of this Object
*

View File

@ -0,0 +1,34 @@
package net.ME1312.SubServers.Sync.Network.Packet;
import net.ME1312.SubServers.Sync.Library.Config.YAMLSection;
import net.ME1312.SubServers.Sync.Library.Version.Version;
import net.ME1312.SubServers.Sync.Network.PacketIn;
import net.ME1312.SubServers.Sync.SubPlugin;
/**
* Update External Whitelist Packet
*/
public class PacketInExUpdateWhitelist implements PacketIn {
private SubPlugin plugin;
/**
* New PacketInExUpdateWhitelist
*/
public PacketInExUpdateWhitelist(SubPlugin plugin) {
this.plugin = plugin;
}
@Override
public void execute(YAMLSection data) throws Throwable {
if (data.getBoolean("mode")) {
plugin.servers.get(data.getRawString("name")).whitelist(data.getUUID("value"));
} else {
plugin.servers.get(data.getRawString("name")).unwhitelist(data.getUUID("value"));
}
}
@Override
public Version getVersion() {
return new Version("2.13.2c");
}
}

View File

@ -146,6 +146,7 @@ public final class SubDataClient {
registerPacket(new PacketDownloadPlayerList(), "SubServers", "DownloadPlayerList");
registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo");
registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo");
registerPacket(new PacketInExUpdateWhitelist(plugin), "SubServers", "ExUpdateWhitelist");
registerPacket(new PacketInRunEvent(plugin), "SubServers", "RunEvent");
registerPacket(new PacketInReset(), "SubServers", "Reset");
registerPacket(new PacketLinkProxy(plugin), "SubServers", "LinkProxy");

View File

@ -2,25 +2,32 @@ package net.ME1312.SubServers.Sync.Server;
import net.ME1312.SubServers.Sync.Library.Util;
import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.lang.reflect.Field;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
/**
* Server Class
*/
public class ServerContainer extends BungeeServerInfo {
private final String signature;
private String nick = null;
private String subdata;
private List<UUID> whitelist = new ArrayList<UUID>();
private String nick = null;
private boolean hidden;
private final String signature;
public ServerContainer(String signature, String name, String display, InetSocketAddress address, String subdata, String motd, boolean hidden, boolean restricted) {
public ServerContainer(String signature, String name, String display, InetSocketAddress address, String subdata, String motd, boolean hidden, boolean restricted, Collection<UUID> whitelist) {
super(name, address, motd, restricted);
if (Util.isNull(name, address, motd, hidden, restricted)) throw new NullPointerException();
this.signature = signature;
this.subdata = subdata;
this.whitelist.addAll(whitelist);
this.hidden = hidden;
setDisplayName(display);
}
@ -65,6 +72,35 @@ public class ServerContainer extends BungeeServerInfo {
}
}
/**
* See if a player is whitelisted
*
* @param player Player
* @return Whitelisted Status
*/
public boolean canAccess(CommandSender player) {
return (player instanceof ProxiedPlayer && whitelist.contains(((ProxiedPlayer) player).getUniqueId())) || super.canAccess(player);
}
/**
* Add a player to the whitelist (for use with restricted servers)
*
* @param player Player to add
*/
public void whitelist(UUID player) {
if (Util.isNull(player)) throw new NullPointerException();
whitelist.add(player);
}
/**
* Remove a player to the whitelist
*
* @param player Player to remove
*/
public void unwhitelist(UUID player) {
whitelist.remove(player);
}
/**
* If the server is hidden from players
*

View File

@ -1,6 +1,8 @@
package net.ME1312.SubServers.Sync.Server;
import java.net.InetSocketAddress;
import java.util.Collection;
import java.util.UUID;
/**
* SubServer Class
@ -8,8 +10,8 @@ import java.net.InetSocketAddress;
public class SubServerContainer extends ServerContainer {
private boolean running;
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);
public SubServerContainer(String signature, String name, String display, InetSocketAddress address, String subdata, String motd, boolean hidden, boolean restricted, Collection<UUID> whitelist, boolean running) {
super(signature, name, display, address, subdata, motd, hidden, restricted, whitelist);
this.running = running;
}

View File

@ -298,11 +298,11 @@ public final class SubPlugin extends BungeeCord implements Listener {
if (server != null) {
if (server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer) {
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()));
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted(), server.getWhitelist(), ((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning()));
System.out.println("SubServers > Added SubServer: " + e.getServer());
} else {
servers.put(server.getName().toLowerCase(), new ServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted()));
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted(), server.getWhitelist()));
System.out.println("SubServers > Added Server: " + e.getServer());
}
} else System.out.println("PacketDownloadServerInfo(" + e.getServer() + ") returned with an invalid response");
@ -315,10 +315,10 @@ public final class SubPlugin extends BungeeCord implements Listener {
if (current == null || !current.getSignature().equals(server.getSignature())) {
if (server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer) {
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()));
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted(), server.getWhitelist(), ((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning()));
} else {
servers.put(server.getName().toLowerCase(), new ServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(),
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted()));
server.getSubData(), server.getMotd(), server.isHidden(), server.isRestricted(), server.getWhitelist()));
}
System.out.println("SubServers > Added "+((server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer)?"Sub":"")+"Server: " + server.getName());