Expand on the API for restricted servers
This commit is contained in:
parent
16480af130
commit
6218b873ca
|
@ -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() {}
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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() {}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in New Issue