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; import java.lang.reflect.Field;
/** /**
* Executable String Handler Class * Executable Handler Class
*/ */
public class Executable { public class Executable {
private 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.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Network.ClientHandler; import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -98,6 +99,57 @@ public interface Server extends ServerInfo, ClientHandler, ExtraDataHandler {
*/ */
void setRestricted(boolean value); 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 * 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.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util; import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Client; 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.Packet.PacketOutRunEvent;
import net.ME1312.SubServers.Bungee.Network.SubDataServer; import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.ME1312.SubServers.Bungee.SubAPI; import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubPlugin; import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.BungeeServerInfo; import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@ -25,11 +27,12 @@ import java.util.*;
*/ */
public class ServerContainer extends BungeeServerInfo implements Server { public class ServerContainer extends BungeeServerInfo implements Server {
private YAMLSection extra = new YAMLSection(); private YAMLSection extra = new YAMLSection();
private final String signature;
private Client client = null; private Client client = null;
private List<String> groups = new ArrayList<String>();
private String nick = null; private String nick = null;
private List<String> groups = new ArrayList<String>();
private List<UUID> whitelist = new ArrayList<UUID>();
private boolean hidden; private boolean hidden;
private final String signature;
public ServerContainer(String name, InetSocketAddress address, String motd, boolean hidden, boolean restricted) throws InvalidServerException { public ServerContainer(String name, InetSocketAddress address, String motd, boolean hidden, boolean restricted) throws InvalidServerException {
super(name, address, motd, restricted); 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 @Override
public final String getSignature() { public final String getSignature() {
return signature; return signature;
@ -196,6 +249,7 @@ public class ServerContainer extends BungeeServerInfo implements Server {
info.set("group", getGroups()); info.set("group", getGroups());
info.set("address", getAddress().getAddress().getHostAddress() + ':' + getAddress().getPort()); info.set("address", getAddress().getAddress().getHostAddress() + ':' + getAddress().getPort());
info.set("motd", getMotd()); info.set("motd", getMotd());
info.set("whitelist", whitelist);
info.set("restricted", isRestricted()); info.set("restricted", isRestricted());
info.set("hidden", isHidden()); info.set("hidden", isHidden());
if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString()); if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString());

View File

@ -9,48 +9,50 @@ import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
/** /**
* Load JNA Library * JNA Library Loader Class
*/ */
public class JNA { public class JNA {
private JNA() {}
private static ClassLoader JNA = null; private static ClassLoader JNA = null;
private static final String JNA_VERSION = "5.2.0"; 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"; 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") @SuppressWarnings("deprecation")
public static ClassLoader get() { public static ClassLoader get() {
if (JNA == null) { if (JNA == null) {
boolean announced = false; boolean announced = false;
UniversalFile library = new UniversalFile(SubAPI.getInstance().getInternals().dir, "SubServers:Cache:Libraries"); UniversalFile library = new UniversalFile(SubAPI.getInstance().getInternals().dir, "SubServers:Cache:Libraries");
library.mkdirs();
UniversalFile jna = new UniversalFile(library, "jna-" + JNA_VERSION + ".jar"); UniversalFile jna = new UniversalFile(library, "jna-" + JNA_VERSION + ".jar");
jna.getParentFile().mkdirs();
if (!jna.exists()) { if (!jna.exists()) {
jna.getParentFile().mkdirs(); announced = true;
if (!jna.exists()) { System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
System.out.println(">> Downloading JNA Library v" + JNA_VERSION); try (FileOutputStream fin = new FileOutputStream(jna)) {
try (FileOutputStream fin = new FileOutputStream(jna)) { Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna")), fin);
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna")), fin); } catch (Throwable e) {
} catch (Throwable e) { jna.delete();
jna.delete(); e.printStackTrace();
e.printStackTrace();
}
announced = true;
} }
} }
UniversalFile platform = new UniversalFile(library, "jna-platform-" + JNA_VERSION + ".jar"); UniversalFile platform = new UniversalFile(library, "jna-platform-" + JNA_VERSION + ".jar");
platform.getParentFile().mkdirs();
if (!platform.exists()) { if (!platform.exists()) {
platform.getParentFile().mkdirs(); if (!announced) System.out.println(">> Downloading JNA Library v" + JNA_VERSION);
if (!platform.exists()) { announced = true;
if (!announced) System.out.println(">> Downloading JNA Library v" + JNA_VERSION); try (FileOutputStream fin = new FileOutputStream(platform)) {
try (FileOutputStream fin = new FileOutputStream(platform)) { Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna-platform")), fin);
Resources.copy(new URL(JNA_DOWNLOAD.replace("$1", "jna-platform")), fin); } catch (Throwable e) {
} catch (Throwable e) { platform.delete();
platform.delete(); e.printStackTrace();
e.printStackTrace();
}
} }
} }
if (jna.exists()) { if (jna.exists()) {
System.out.println(">> Loading JNA Library"); if (announced) System.out.println(">> Loading JNA Library");
try { try {
JNA = new URLClassLoader(new URL[]{jna.toURI().toURL(), platform.toURI().toURL()}); JNA = new URLClassLoader(new URL[]{jna.toURI().toURL(), platform.toURI().toURL()});
} catch (Throwable e) { } 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; package net.ME1312.SubServers.Bungee.Network;
import com.dosse.upnp.UPnP; import com.dosse.upnp.UPnP;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent; import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent;
import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent; import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; 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.Encryption.AES;
import net.ME1312.SubServers.Bungee.Network.Packet.*; import net.ME1312.SubServers.Bungee.Network.Packet.*;
import net.ME1312.SubServers.Bungee.SubPlugin; import net.ME1312.SubServers.Bungee.SubPlugin;
import org.msgpack.core.MessagePack;
import org.msgpack.value.Value; import org.msgpack.value.Value;
import org.msgpack.value.ValueFactory;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.net.*; import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -130,6 +126,7 @@ public final class SubDataServer {
registerPacket(PacketExDeleteServer.class, "SubServers", "ExDeleteServer"); registerPacket(PacketExDeleteServer.class, "SubServers", "ExDeleteServer");
registerPacket(PacketExRemoveServer.class, "SubServers", "ExRemoveServer"); registerPacket(PacketExRemoveServer.class, "SubServers", "ExRemoveServer");
registerPacket(PacketExUpdateServer.class, "SubServers", "ExUpdateServer"); registerPacket(PacketExUpdateServer.class, "SubServers", "ExUpdateServer");
registerPacket(PacketOutExUpdateWhitelist.class, "SubServers", "ExUpdateWhitelist");
registerPacket(PacketLinkExHost.class, "SubServers", "LinkExHost"); registerPacket(PacketLinkExHost.class, "SubServers", "LinkExHost");
registerPacket(PacketLinkProxy.class, "SubServers", "LinkProxy"); registerPacket(PacketLinkProxy.class, "SubServers", "LinkProxy");
registerPacket(PacketLinkServer.class, "SubServers", "LinkServer"); 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.Library.NamedContainer;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadServerInfo; import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadServerInfo;
import net.ME1312.SubServers.Client.Bukkit.SubAPI; import net.ME1312.SubServers.Client.Bukkit.SubAPI;
import org.bukkit.OfflinePlayer;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.*; import java.util.*;
@ -123,6 +124,35 @@ public class Server {
return raw.getBoolean("restricted"); 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 * 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.Library.NamedContainer;
import net.ME1312.SubServers.Client.Sponge.Network.Packet.PacketDownloadServerInfo; import net.ME1312.SubServers.Client.Sponge.Network.Packet.PacketDownloadServerInfo;
import net.ME1312.SubServers.Client.Sponge.SubAPI; import net.ME1312.SubServers.Client.Sponge.SubAPI;
import org.spongepowered.api.entity.living.player.User;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.*; import java.util.*;
@ -123,6 +124,35 @@ public class Server {
return raw.getBoolean("restricted"); 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 * Get the Signature of this Object
* *

View File

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

View File

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

View File

@ -123,6 +123,25 @@ public class Server {
return raw.getBoolean("restricted"); 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 * 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.Library.NamedContainer;
import net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadServerInfo; import net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadServerInfo;
import net.ME1312.SubServers.Sync.SubAPI; import net.ME1312.SubServers.Sync.SubAPI;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.*; import java.util.*;
@ -123,6 +124,35 @@ public class Server {
return raw.getBoolean("restricted"); 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 * 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 PacketDownloadPlayerList(), "SubServers", "DownloadPlayerList");
registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo"); registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo");
registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo"); registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo");
registerPacket(new PacketInExUpdateWhitelist(plugin), "SubServers", "ExUpdateWhitelist");
registerPacket(new PacketInRunEvent(plugin), "SubServers", "RunEvent"); registerPacket(new PacketInRunEvent(plugin), "SubServers", "RunEvent");
registerPacket(new PacketInReset(), "SubServers", "Reset"); registerPacket(new PacketInReset(), "SubServers", "Reset");
registerPacket(new PacketLinkProxy(plugin), "SubServers", "LinkProxy"); 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.ME1312.SubServers.Sync.Library.Util;
import net.md_5.bungee.BungeeServerInfo; 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.lang.reflect.Field;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
/** /**
* Server Class * Server Class
*/ */
public class ServerContainer extends BungeeServerInfo { public class ServerContainer extends BungeeServerInfo {
private final String signature;
private String nick = null;
private String subdata; private String subdata;
private List<UUID> whitelist = new ArrayList<UUID>();
private String nick = null;
private boolean hidden; 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); super(name, address, motd, restricted);
if (Util.isNull(name, address, motd, hidden, restricted)) throw new NullPointerException(); if (Util.isNull(name, address, motd, hidden, restricted)) throw new NullPointerException();
this.signature = signature; this.signature = signature;
this.subdata = subdata; this.subdata = subdata;
this.whitelist.addAll(whitelist);
this.hidden = hidden; this.hidden = hidden;
setDisplayName(display); 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 * If the server is hidden from players
* *

View File

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

View File

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