diff --git a/SubServers.Bungee/common/pom.xml b/SubServers.Bungee/common/pom.xml
index 38f15076..30390b60 100644
--- a/SubServers.Bungee/common/pom.xml
+++ b/SubServers.Bungee/common/pom.xml
@@ -31,7 +31,7 @@
net.ME1312.Galaxi
GalaxiUtil
20w33a
- compile
+ provided
net.ME1312.Galaxi
diff --git a/SubServers.Client/Bukkit/pom.xml b/SubServers.Client/Bukkit/pom.xml
index 71d9d943..7575ab51 100644
--- a/SubServers.Client/Bukkit/pom.xml
+++ b/SubServers.Client/Bukkit/pom.xml
@@ -52,6 +52,13 @@
compile
true
+
+ net.ME1312.SubServers
+ SubServers.Client.Common
+ -PLACEHOLDER
+ compile
+ true
+
net.ME1312.SubData
Client
@@ -160,6 +167,10 @@
https://dev.me1312.net/jenkins/job/SubData/javadoc/Client/
https://hub.spigotmc.org/javadocs/spigot/
+ true
+
+ net.ME1312.SubServers:SubServers.Client.Common:*
+
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubCreateEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubCreateEvent.java
index be293c3c..d53cd2a4 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubCreateEvent.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubCreateEvent.java
@@ -4,7 +4,7 @@ import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.SubServer;
+import net.ME1312.SubServers.Client.Common.Network.API.SubServer;
import net.ME1312.SubServers.Client.Bukkit.SubAPI;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubCreatedEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubCreatedEvent.java
index 8950173f..ea553ada 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubCreatedEvent.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubCreatedEvent.java
@@ -3,8 +3,8 @@ package net.ME1312.SubServers.Client.Bukkit.Event;
import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
+import net.ME1312.SubServers.Client.Common.Network.API.SubServer;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.SubServer;
import net.ME1312.SubServers.Client.Bukkit.SubAPI;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java
index e8448e6e..432d44c0 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIHandler.java
@@ -7,10 +7,12 @@ import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Client.SubDataClient;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.Host;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.SubServer;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.*;
import net.ME1312.SubServers.Client.Bukkit.SubPlugin;
+import net.ME1312.SubServers.Client.Common.Network.API.Host;
+import net.ME1312.SubServers.Client.Common.Network.API.SubServer;
+import net.ME1312.SubServers.Client.Common.Network.Packet.PacketCreateServer;
+import net.ME1312.SubServers.Client.Common.Network.Packet.PacketUpdateServer;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@@ -26,6 +28,8 @@ import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap;
import java.util.UUID;
+import static net.ME1312.SubServers.Client.Bukkit.Library.ObjectPermission.*;
+
/**
* Default GUI Listener
*/
@@ -111,7 +115,8 @@ public class DefaultUIHandler implements UIHandler, Listener {
if (player.hasPermission("subservers.host.*.*") || player.hasPermission("subservers.host.*.create") || player.hasPermission("subservers.host." + host + ".*") || player.hasPermission("subservers.host." + host + ".create")) {
player.closeInventory();
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
- ((SubDataClient) plugin.api.getSubDataNetwork()[0]).sendPacket(new PacketCreateServer(player.getUniqueId(), ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]), data -> {
+ UIRenderer.CreatorOptions options = ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
+ ((SubDataClient) plugin.api.getSubDataNetwork()[0]).sendPacket(new PacketCreateServer(player.getUniqueId(), options.getName(), options.getHost(), options.getTemplate(), options.getVersion(), options.getPort(), data -> {
gui.back();
}));
} else {
@@ -319,7 +324,7 @@ public class DefaultUIHandler implements UIHandler, Listener {
gui.back();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update"))) {
player.closeInventory();
- if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.update")) {
+ if (permits((SubServer) gui.lastVisitedObjects[0], player, "subservers.subserver.%.*", "subservers.subserver.%.update")) {
if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update.Title"), 4 * 20))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update.Message"));
input.put(player.getUniqueId(), m -> {
@@ -332,7 +337,7 @@ public class DefaultUIHandler implements UIHandler, Listener {
} else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Start"))) {
player.closeInventory();
- if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.start")) {
+ if (permits((SubServer) gui.lastVisitedObjects[0], player, "subservers.subserver.%.*", "subservers.subserver.%.start")) {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
((SubServer) gui.lastVisitedObjects[0]).start(player.getUniqueId(), response -> {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Start.Title"));
@@ -341,7 +346,7 @@ public class DefaultUIHandler implements UIHandler, Listener {
} else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Stop"))) {
player.closeInventory();
- if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.stop")) {
+ if (permits((SubServer) gui.lastVisitedObjects[0], player, "subservers.subserver.%.*", "subservers.subserver.%.stop")) {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
final Container listening = new Container(true);
PacketInExRunEvent.callback("SubStoppedEvent", new Callback>() {
@@ -365,7 +370,7 @@ public class DefaultUIHandler implements UIHandler, Listener {
} else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Terminate"))) {
player.closeInventory();
- if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.terminate")) {
+ if (permits((SubServer) gui.lastVisitedObjects[0], player, "subservers.subserver.%.*", "subservers.subserver.%.terminate")) {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
final Container listening = new Container(true);
PacketInExRunEvent.callback("SubStoppedEvent", new Callback>() {
@@ -389,7 +394,7 @@ public class DefaultUIHandler implements UIHandler, Listener {
} else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command"))) {
player.closeInventory();
- if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.command")) {
+ if (permits((SubServer) gui.lastVisitedObjects[0], player, "subservers.subserver.%.*", "subservers.subserver.%.command")) {
if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command.Title"), 4 * 20))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command.Message"));
input.put(player.getUniqueId(), m -> {
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java
index d56a56b4..3b43ed6c 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/DefaultUIRenderer.java
@@ -3,10 +3,10 @@ package net.ME1312.SubServers.Client.Bukkit.Graphic;
import net.ME1312.Galaxi.Library.Container.Container;
import net.ME1312.Galaxi.Library.Container.NamedContainer;
import net.ME1312.Galaxi.Library.Version.Version;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.Host;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.Server;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.SubCreator;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.SubServer;
+import net.ME1312.SubServers.Client.Common.Network.API.Host;
+import net.ME1312.SubServers.Client.Common.Network.API.Server;
+import net.ME1312.SubServers.Client.Common.Network.API.SubCreator;
+import net.ME1312.SubServers.Client.Common.Network.API.SubServer;
import net.ME1312.SubServers.Client.Bukkit.SubPlugin;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -19,6 +19,8 @@ import org.bukkit.inventory.meta.ItemMeta;
import java.text.DecimalFormat;
import java.util.*;
+import static net.ME1312.SubServers.Client.Bukkit.Library.ObjectPermission.*;
+
/**
* Default GUI Renderer Class
*/
@@ -1003,7 +1005,7 @@ public class DefaultUIRenderer extends UIRenderer {
Player player = Bukkit.getPlayer(this.player);
if (subserver.isRunning()) {
- if (!subserver.permits(player, "subservers.subserver.%.*", "subservers.subserver.%.terminate")) {
+ if (!permits(subserver, player, "subservers.subserver.%.*", "subservers.subserver.%.terminate")) {
block = createItem("STAINED_GLASS_PANE", "GRAY_STAINED_GLASS_PANE", (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Terminate")));
@@ -1018,7 +1020,7 @@ public class DefaultUIRenderer extends UIRenderer {
inv.setItem(1, block);
inv.setItem(10, block);
- if (!subserver.permits(player, "subservers.subserver.%.*", "subservers.subserver.%.stop")) {
+ if (!permits(subserver, player, "subservers.subserver.%.*", "subservers.subserver.%.stop")) {
block = createItem("STAINED_GLASS_PANE", "GRAY_STAINED_GLASS_PANE", (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Stop")));
@@ -1034,7 +1036,7 @@ public class DefaultUIRenderer extends UIRenderer {
inv.setItem(11, block);
inv.setItem(12, block);
- if (!subserver.permits(player, "subservers.subserver.%.*", "subservers.subserver.%.command")) {
+ if (!permits(subserver, player, "subservers.subserver.%.*", "subservers.subserver.%.command")) {
block = createItem("STAINED_GLASS_PANE", "GRAY_STAINED_GLASS_PANE", (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command")));
@@ -1052,7 +1054,7 @@ public class DefaultUIRenderer extends UIRenderer {
inv.setItem(15, block);
inv.setItem(16, block);
} else {
- if (!subserver.permits(player, "subservers.subserver.%.*", "subservers.subserver.%.start")) {
+ if (!permits(subserver, player, "subservers.subserver.%.*", "subservers.subserver.%.start")) {
block = createItem("STAINED_GLASS_PANE", "GRAY_STAINED_GLASS_PANE", (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Start")));
@@ -1083,7 +1085,7 @@ public class DefaultUIRenderer extends UIRenderer {
inv.setItem(11, block);
inv.setItem(12, block);
- if (!subserver.permits(player, "subservers.subserver.%.*", "subservers.subserver.%.update")) {
+ if (!permits(subserver, player, "subservers.subserver.%.*", "subservers.subserver.%.update")) {
block = createItem("STAINED_GLASS_PANE", "GRAY_STAINED_GLASS_PANE", (short) 7);
blockMeta = block.getItemMeta();
blockMeta.setDisplayName(ChatColor.GRAY+ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update")));
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java
index 8c5d706d..19a78d4e 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Graphic/UIRenderer.java
@@ -4,8 +4,8 @@ import net.ME1312.Galaxi.Library.Container.Container;
import net.ME1312.Galaxi.Library.Container.NamedContainer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.Host;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.SubServer;
+import net.ME1312.SubServers.Client.Common.Network.API.Host;
+import net.ME1312.SubServers.Client.Common.Network.API.SubServer;
import net.ME1312.SubServers.Client.Bukkit.SubPlugin;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java
index 76cb52d9..34535d9d 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java
@@ -1,9 +1,6 @@
package net.ME1312.SubServers.Client.Bukkit.Library.Compatibility;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.Host;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.Proxy;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.Server;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.SubServer;
+import net.ME1312.SubServers.Client.Common.Network.API.*;
import net.ME1312.SubServers.Client.Bukkit.SubPlugin;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/PlaceholderImpl.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/PlaceholderImpl.java
index ae046da6..1436b20c 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/PlaceholderImpl.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/PlaceholderImpl.java
@@ -6,8 +6,8 @@ import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import me.clip.placeholderapi.expansion.Taskable;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
+import net.ME1312.SubServers.Client.Common.Network.API.*;
import net.ME1312.SubServers.Client.Bukkit.Event.*;
-import net.ME1312.SubServers.Client.Bukkit.Network.API.*;
import net.ME1312.SubServers.Client.Bukkit.SubAPI;
import net.ME1312.SubServers.Client.Bukkit.SubPlugin;
import org.bukkit.Bukkit;
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/ObjectPermission.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/ObjectPermission.java
new file mode 100644
index 00000000..e51f1b3b
--- /dev/null
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/ObjectPermission.java
@@ -0,0 +1,104 @@
+package net.ME1312.SubServers.Client.Bukkit.Library;
+
+import net.ME1312.Galaxi.Library.Util;
+import net.ME1312.SubServers.Client.Common.Network.API.Host;
+import net.ME1312.SubServers.Client.Common.Network.API.Proxy;
+import net.ME1312.SubServers.Client.Common.Network.API.Server;
+import net.ME1312.SubServers.Client.Common.Network.API.SubServer;
+import org.bukkit.permissions.Permissible;
+
+import java.util.List;
+
+/**
+ * Object Permissions Class
+ */
+public class ObjectPermission {
+ private ObjectPermission() {}
+
+ /**
+ * Determine if an object can perform some action on this proxy using possible permissions
+ *
+ * @param proxy Proxy to check against
+ * @param object Object to check against
+ * @param permissions Permissions to check (use % as a placeholder for the proxy name)
+ * @return Permission Check Result
+ */
+ public static boolean permits(Proxy proxy, Permissible object, String... permissions) {
+ return permits(proxy.getName(), object, permissions);
+ }
+
+ /**
+ * Determine if an object can perform some action on a host using possible permissions
+ *
+ * @param host Host to check against
+ * @param object Object to check against
+ * @param permissions Permissions to check (use % as a placeholder for the host name)
+ * @return Permission Check Result
+ */
+ public static boolean permits(Host host, Permissible object, String... permissions) {
+ return permits(host.getName(), object, permissions);
+ }
+
+ /**
+ * Determine if an object can perform some action on another object using possible permissions
+ *
+ * @param string String to check against
+ * @param object Object to check against
+ * @param permissions Permissions to check (use % as a placeholder for the object name)
+ * @return Permission Check Result
+ */
+ private static boolean permits(String string, Permissible object, String... permissions) {
+ if (Util.isNull(object)) throw new NullPointerException();
+ boolean permitted = false;
+
+ for (int p = 0; !permitted && p < permissions.length; p++) {
+ String perm = permissions[p];
+ if (perm != null) {
+ // Check all proxies & individual proxies permission
+ permitted = object.hasPermission(perm.replace("%", "*"))
+ || object.hasPermission(perm.replace("%", string.toLowerCase()));
+ }
+ }
+
+ return permitted;
+ }
+
+ /**
+ * Determine if an object can perform some action on a server using possible permissions
+ *
+ * @param server Server to check against
+ * @param object Object to check against
+ * @param permissions Permissions to check (use % as a placeholder for the server name)
+ * @return Permission Check Result
+ */
+ public static boolean permits(Server server, Permissible object, String... permissions) {
+ if (Util.isNull(object)) throw new NullPointerException();
+ boolean permitted = false;
+
+ for (int p = 0; !permitted && p < permissions.length; p++) {
+ String perm = permissions[p];
+ if (perm != null) {
+ // Check all servers & individual servers permission
+ permitted = object.hasPermission(perm.replace("%", "*"))
+ || object.hasPermission(perm.replace("%", server.getName().toLowerCase()));
+
+ // Check all hosts & individual hosts permission
+ if (server instanceof SubServer) {
+ permitted = permitted || object.hasPermission(perm.replace("%", "::*"))
+ || object.hasPermission(perm.replace("%", "::" + ((SubServer) server).getHost().toLowerCase()));
+ }
+
+ // Check all groups & individual groups permission
+ List groups = server.getGroups();
+ if (groups.size() > 0) {
+ permitted = permitted || object.hasPermission(perm.replace("%", ":*"));
+ for (int g = 0; !permitted && g < groups.size(); g++) {
+ permitted = object.hasPermission(perm.replace("%", ":" + groups.get(g).toLowerCase()));
+ }
+ }
+ }
+ }
+
+ return permitted;
+ }
+}
\ No newline at end of file
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java
deleted file mode 100644
index ebb92590..00000000
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java
+++ /dev/null
@@ -1,777 +0,0 @@
-package net.ME1312.SubServers.Client.Bukkit.Network.API;
-
-import net.ME1312.Galaxi.Library.Callback.Callback;
-import net.ME1312.Galaxi.Library.Container.NamedContainer;
-import net.ME1312.Galaxi.Library.Map.ObjectMap;
-import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
-import net.ME1312.Galaxi.Library.Util;
-import net.ME1312.SubData.Client.DataClient;
-import net.ME1312.SubData.Client.DataSender;
-import net.ME1312.SubData.Client.Library.ForwardedDataSender;
-import net.ME1312.SubData.Client.SubDataClient;
-import net.ME1312.SubData.Client.SubDataSender;
-import net.ME1312.SubServers.Client.Bukkit.Network.Packet.*;
-import net.ME1312.SubServers.Client.Bukkit.SubAPI;
-import org.bukkit.permissions.Permissible;
-
-import java.lang.reflect.InvocationTargetException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.*;
-
-/**
- * Simplified Host Data Class
- */
-public class Host {
- HashMap servers = new HashMap();
- private SubCreator creator;
- private List players = null;
- ObjectMap raw;
- DataClient client;
- long timestamp;
-
- /**
- * Create an API representation of a Host
- *
- * @param raw Raw representation of the Host
- */
- public Host(ObjectMap raw) {
- this(null, raw);
- }
-
- /**
- * Create an API representation of a Host
- *
- * @param client SubData connection
- * @param raw Raw representation of the Host
- */
- Host(DataClient client, ObjectMap raw) {
- this.client = client;
- load(raw);
- }
-
- @Override
- public boolean equals(Object obj) {
- return obj instanceof Host && getSignature().equals(((Host) obj).getSignature());
- }
-
- private void load(ObjectMap raw) {
- this.raw = raw;
- this.players = null;
- this.timestamp = Calendar.getInstance().getTime().getTime();
-
- servers.clear();
- this.creator = new SubCreator(this, raw.getMap("creator"));
- for (String server : raw.getMap("servers").getKeys()) {
- servers.put(server.toLowerCase(), new SubServer(this, raw.getMap("servers").getMap(server)));
- }
- }
-
- private SubDataClient client() {
- return SimplifiedData.client(client);
- }
-
- /**
- * Download a new copy of the data from SubData
- */
- public void refresh() {
- String name = getName();
- client().sendPacket(new PacketDownloadHostInfo(Collections.singletonList(name), data -> load(data.getMap(name))));
- }
-
- /**
- * Gets the SubData Client Channel IDs
- *
- * @return SubData Client Channel ID Array (may be empty if unsupported)
- */
- @SuppressWarnings("unchecked")
- public DataSender[] getSubData() {
- if (raw.contains("subdata")) {
- ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata"));
- LinkedList keys = new LinkedList(subdata.getKeys());
- LinkedList channels = new LinkedList();
- Collections.sort(keys);
- for (Integer channel : keys) channels.add((subdata.isNull(channel))?null:new ForwardedDataSender((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(channel)));
- return channels.toArray(new SubDataSender[0]);
- } else {
- return new SubDataSender[0];
- }
- }
-
- /**
- * Determine if an object can perform some action on this host using possible permissions
- *
- * @param object Object to check against
- * @param permissions Permissions to check (use % as a placeholder for the host name)
- * @return Permission Check Result
- */
- public boolean permits(Permissible object, String... permissions) {
- if (Util.isNull(object)) throw new NullPointerException();
- boolean permitted = false;
-
- for (int p = 0; !permitted && p < permissions.length; p++) {
- String perm = permissions[p];
- if (perm != null) {
- // Check all proxies & individual proxies permission
- permitted = object.hasPermission(perm.replace("%", "*"))
- || object.hasPermission(perm.replace("%", this.getName().toLowerCase()));
- }
- }
-
- return permitted;
- }
-
- /**
- * Is this Host Available?
- *
- * @return Availability Status
- */
- public boolean isAvailable() {
- return raw.getBoolean("available");
- }
-
- /**
- * Is this Host Enabled?
- *
- * @return Enabled Status
- */
- public boolean isEnabled() {
- return raw.getBoolean("enabled");
- }
-
- /**
- * Get the Address of this Host
- *
- * @return Host Address
- */
- public InetAddress getAddress() {
- try {
- return InetAddress.getByName(raw.getRawString("address"));
- } catch (UnknownHostException e) {
- throw new IllegalStateException("Invalid address response from raw data key: address");
- }
- }
-
- /**
- * Get the host Directory Path
- *
- * @return Host Directory Path
- */
- public String getPath() {
- return raw.getRawString("dir");
- }
-
- /**
- * Get the Name of this Host
- *
- * @return Host Name
- */
- public String getName() {
- return raw.getRawString("name");
- }
-
- /**
- * Get the Display Name of this Host
- *
- * @return Display Name
- */
- public String getDisplayName() {
- return raw.getRawString("display");
- }
-
- /**
- * Get players on servers provided by this host across all known proxies
- *
- * @return Remote Player Collection
- */
- public Collection> getGlobalPlayers() {
- List> players = new ArrayList>();
- for (String id : raw.getMap("players").getKeys()) {
- players.add(new NamedContainer(raw.getMap("players").getRawString(id), UUID.fromString(id)));
- }
- return players;
- }
-
- /**
- * Get the players on servers provided by this host across all known proxies
- *
- * @param callback Remote Player Collection
- */
- public void getGlobalPlayers(Callback> callback) {
- if (Util.isNull(callback)) throw new NullPointerException();
- StackTraceElement[] origin = new Exception().getStackTrace();
- Runnable run = () -> {
- try {
- callback.run(players);
- } catch (Throwable e) {
- Throwable ew = new InvocationTargetException(e);
- ew.setStackTrace(origin);
- ew.printStackTrace();
- }
- };
-
- if (players == null) {
- LinkedList ids = new LinkedList();
- for (SubServer server : getSubServers().values()) for (NamedContainer player : server.getGlobalPlayers()) ids.add(player.get());
- client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
- LinkedList players = new LinkedList();
- for (String player : data.getKeys()) {
- players.add(new RemotePlayer(data.getMap(player)));
- }
-
- this.players = players;
- run.run();
- }));
- } else {
- run.run();
- }
- }
-
- /**
- * Starts the Servers Specified
- *
- * @param servers Servers
- */
- public void start(String... servers) {
- start(null, servers);
- }
-
- /**
- * Starts the Servers Specified
- *
- * @param player Player who started
- * @param servers Servers
- */
- public void start(UUID player, String... servers) {
- for (String server : servers) {
- getSubServer(server.toLowerCase()).start(player);
- }
- }
-
- /**
- * Stops the Servers Specified
- *
- * @param servers Servers
- */
- public void stop(String... servers) {
- stop(null, servers);
- }
-
- /**
- * Stops the Servers Specified
- *
- * @param player Player who started
- * @param servers Servers
- */
- public void stop(UUID player, String... servers) {
- for (String server : servers) {
- getSubServer(server.toLowerCase()).stop(player);
- }
- }
-
- /**
- * Terminates the Servers Specified
- *
- * @param servers Servers
- */
- public void terminate(String... servers) {
- terminate(null, servers);
- }
-
- /**
- * Terminates the Servers Specified
- *
- * @param player Player who started
- * @param servers Servers
- */
- public void terminate(UUID player, String... servers) {
- for (String server : servers) {
- getSubServer(server.toLowerCase()).terminate(player);
- }
- }
-
- /**
- * Commands the Servers Specified
- *
- * @param command Command to send
- * @param servers Servers
- */
- public void command(String command, String... servers) {
- command(null, command, servers);
- }
-
- /**
- * Commands the Servers Specified
- *
- * @param player Player who started
- * @param command Command to send
- * @param servers Servers
- * @return Success Status
- */
- public void command(UUID player, String command, String... servers) {
- for (String server : servers) {
- getSubServer(server.toLowerCase()).command(player, command);
- }
- }
-
- /**
- * Gets the SubCreator Instance for this Host
- *
- * @return SubCreator
- */
- public SubCreator getCreator() {
- return creator;
- }
-
- /**
- * Gets the SubServers on this Host
- *
- * @return SubServer Map
- */
- public Map getSubServers() {
- return new TreeMap(servers);
- }
-
- /**
- * Gets a SubServer
- *
- * @param name SubServer Name
- * @return a SubServer
- */
- public SubServer getSubServer(String name) {
- if (Util.isNull(name)) throw new NullPointerException();
- return getSubServers().get(name.toLowerCase());
- }
-
- /**
- * Adds a SubServer
- *
- * @param name Name of Server
- * @param enabled Enabled Status
- * @param port Port Number
- * @param motd Motd of the Server
- * @param log Logging Status
- * @param directory Directory
- * @param executable Executable String
- * @param stopcmd Command to Stop the Server
- * @param hidden if the server should be hidden from players
- * @param restricted Players will need a permission to join if true
- * @param response Response Code
- * @return The SubServer
- */
- public void addSubServer(String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted, Callback response) {
- addSubServer(null, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted, response);
- }
-
- /**
- * Adds a SubServer
- *
- * @param player Player adding
- * @param name Name of Server
- * @param enabled Enabled Status
- * @param port Port Number
- * @param motd Motd of the Server
- * @param log Logging Status
- * @param directory Directory
- * @param executable Executable String
- * @param stopcmd Command to Stop the Server
- * @param hidden if the server should be hidden from players
- * @param restricted Players will need a permission to join if true
- * @param response Response Code
- * @return The SubServer
- */
- public void addSubServer(UUID player, String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted, Callback response) {
- if (Util.isNull(response)) throw new NullPointerException();
- StackTraceElement[] origin = new Exception().getStackTrace();
- client().sendPacket(new PacketAddServer(player, name, enabled, getName(), port, motd, log, directory, executable, stopcmd, hidden, restricted, data -> {
- try {
- response.run(data.getInt(0x0001));
- } catch (Throwable e) {
- Throwable ew = new InvocationTargetException(e);
- ew.setStackTrace(origin);
- ew.printStackTrace();
- }
- }));
- }
-
- /**
- * Adds a SubServer
- *
- * @param name Name of Server
- * @param enabled Enabled Status
- * @param port Port Number
- * @param motd Motd of the Server
- * @param log Logging Status
- * @param directory Directory
- * @param executable Executable String
- * @param stopcmd Command to Stop the Server
- * @param hidden if the server should be hidden from players
- * @param restricted Players will need a permission to join if true
- * @return The SubServer
- */
- public void addSubServer(String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted) {
- addSubServer(null, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted);
- }
-
- /**
- * Adds a SubServer
- *
- * @param player Player adding
- * @param name Name of Server
- * @param enabled Enabled Status
- * @param port Port Number
- * @param motd Motd of the Server
- * @param log Logging Status
- * @param directory Directory
- * @param executable Executable String
- * @param stopcmd Command to Stop the Server
- * @param hidden if the server should be hidden from players
- * @param restricted Players will need a permission to join if true
- * @return The SubServer
- */
- public void addSubServer(UUID player, String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted) {
- addSubServer(player, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted, i -> {});
- }
-
- /**
- * Removes a SubServer
- *
- * @param name SubServer Name
- */
- public void removeSubServer(String name) {
- removeSubServer(null, name);
- }
-
- /**
- * Removes a SubServer
- *
- * @param player Player Removing
- * @param name SubServer Name
- */
- public void removeSubServer(UUID player, String name) {
- if (Util.isNull(name)) throw new NullPointerException();
- removeSubServer(player, name, false, i -> {});
- }
-
- /**
- * Forces the Removal of a SubServer
- *
- * @param name SubServer Name
- */
- public void forceRemoveSubServer(String name) {
- forceRemoveSubServer(null, name);
- }
-
- /**
- * Forces the Removal of a SubServer
- *
- * @param player Player Removing
- * @param name SubServer Name
- */
- public void forceRemoveSubServer(UUID player, String name) {
- if (Util.isNull(name)) throw new NullPointerException();
- removeSubServer(player, name, true, i -> {});
- }
-
- /**
- * Removes a SubServer
- *
- * @param name SubServer Name
- * @param response Response Code
- */
- public void removeSubServer(String name, Callback response) {
- removeSubServer(null, name, response);
- }
-
- /**
- * Removes a SubServer
- *
- * @param player Player Removing
- * @param name SubServer Name
- * @param response Response Code
- */
- public void removeSubServer(UUID player, String name, Callback response) {
- if (Util.isNull(name)) throw new NullPointerException();
- removeSubServer(player, name, false, response);
- }
-
- /**
- * Forces the Removal of a SubServer
- *
- * @param name SubServer Name
- * @param response Response Code
- */
- public void forceRemoveSubServer(String name, Callback response) {
- forceRemoveSubServer(null, name, response);
- }
-
- /**
- * Forces the Removal of a SubServer
- *
- * @param player Player Removing
- * @param name SubServer Name
- * @param response Response Code
- */
- public void forceRemoveSubServer(UUID player, String name, Callback response) {
- if (Util.isNull(name)) throw new NullPointerException();
- removeSubServer(player, name, true, response);
- }
-
- private void removeSubServer(UUID player, String name, boolean force, Callback response) {
- if (Util.isNull(response)) throw new NullPointerException();
- StackTraceElement[] origin = new Exception().getStackTrace();
- client().sendPacket(new PacketRemoveServer(player, name, force, data -> {
- try {
- response.run(data.getInt(0x0001));
- } catch (Throwable e) {
- Throwable ew = new InvocationTargetException(e);
- ew.setStackTrace(origin);
- ew.printStackTrace();
- }
- }));
- }
-
- /**
- * Deletes a SubServer (will move to 'Recently Deleted')
- *
- * @param name SubServer Name
- */
- public void recycleSubServer(String name) {
- recycleSubServer(null, name);
- }
-
- /**
- * Deletes a SubServer (will move to 'Recently Deleted')
- *
- * @param player Player Deleting
- * @param name SubServer Name
- */
- public void recycleSubServer(UUID player, String name) {
- if (Util.isNull(name)) throw new NullPointerException();
- deleteSubServer(player, name, true, false, i -> {});
- }
-
- /**
- * Forces the Deletion of a SubServer (will move to 'Recently Deleted')
- *
- * @param name SubServer Name
- */
- public void forceRecycleSubServer(String name) {
- forceRecycleSubServer(null, name);
- }
-
- /**
- * Forces the Deletion of a SubServer (will move to 'Recently Deleted')
- *
- * @param player Player Deleting
- * @param name SubServer Name
- */
- public void forceRecycleSubServer(UUID player, String name) {
- if (Util.isNull(name)) throw new NullPointerException();
- deleteSubServer(player, name, true, true, i -> {});
- }
-
- /**
- * Deletes a SubServer (will move to 'Recently Deleted')
- *
- * @param name SubServer Name
- * @param response Response Code
- */
- public void recycleSubServer(String name, Callback response) {
- recycleSubServer(null, name, response);
- }
-
- /**
- * Deletes a SubServer (will move to 'Recently Deleted')
- *
- * @param player Player Deleting
- * @param name SubServer Name
- * @param response Response Code
- */
- public void recycleSubServer(UUID player, String name, Callback response) {
- if (Util.isNull(name)) throw new NullPointerException();
- deleteSubServer(player, name, true, false, response);
- }
-
- /**
- * Forces the Deletion of a SubServer (will move to 'Recently Deleted')
- *
- * @param name SubServer Name
- * @param response Response Code
- */
- public void forceRecycleSubServer(String name, Callback response) {
- forceRecycleSubServer(null, name, response);
- }
-
- /**
- * Forces the Deletion of a SubServer (will move to 'Recently Deleted')
- *
- * @param player Player Deleting
- * @param name SubServer Name
- * @param response Response Code
- */
- public void forceRecycleSubServer(UUID player, String name, Callback response) {
- if (Util.isNull(name)) throw new NullPointerException();
- deleteSubServer(player, name, true, true, response);
- }
-
- /**
- * Deletes a SubServer
- *
- * @param name SubServer Name
- * @return Success Status
- */
- public void deleteSubServer(String name) {
- deleteSubServer(null, name);
- }
-
- /**
- * Deletes a SubServer
- *
- * @param player Player Deleting
- * @param name SubServer Name
- * @return Success Status
- */
- public void deleteSubServer(UUID player, String name) {
- if (Util.isNull(name)) throw new NullPointerException();
- deleteSubServer(player, name, false, false, i -> {});
- }
-
- /**
- * Forces the Deletion of a SubServer
- *
- * @param name SubServer Name
- * @return Success Status
- */
- public void forceDeleteSubServer(String name) {
- forceDeleteSubServer(null, name);
- }
-
- /**
- * Forces the Deletion of a SubServer
- *
- * @param player Player Deleting
- * @param name SubServer Name
- * @return Success Status
- */
- public void forceDeleteSubServer(UUID player, String name) {
- if (Util.isNull(name)) throw new NullPointerException();
- deleteSubServer(player, name, false, true, i -> {});
- }
-
- /**
- * Deletes a SubServer
- *
- * @param name SubServer Name
- * @return Success Status
- */
- public void deleteSubServer(String name, Callback response) {
- deleteSubServer(null, name, response);
- }
-
- /**
- * Deletes a SubServer
- *
- * @param player Player Deleting
- * @param name SubServer Name
- * @return Success Status
- */
- public void deleteSubServer(UUID player, String name, Callback response) {
- if (Util.isNull(name)) throw new NullPointerException();
- deleteSubServer(player, name, false, false, response);
- }
-
- /**
- * Forces the Deletion of a SubServer
- *
- * @param name SubServer Name
- * @return Success Status
- */
- public void forceDeleteSubServer(String name, Callback response) {
- forceDeleteSubServer(null, name, response);
- }
-
- /**
- * Forces the Deletion of a SubServer
- *
- * @param player Player Deleting
- * @param name SubServer Name
- * @return Success Status
- */
- public void forceDeleteSubServer(UUID player, String name, Callback response) {
- if (Util.isNull(name)) throw new NullPointerException();
- deleteSubServer(player, name, false, true, response);
- }
-
- private void deleteSubServer(UUID player, String name, boolean recycle, boolean force, Callback response) {
- if (Util.isNull(response)) throw new NullPointerException();
- StackTraceElement[] origin = new Exception().getStackTrace();
- client().sendPacket(new PacketDeleteServer(player, name, recycle, force, data -> {
- try {
- response.run(data.getInt(0x0001));
- } catch (Throwable e) {
- Throwable ew = new InvocationTargetException(e);
- ew.setStackTrace(origin);
- ew.printStackTrace();
- }
- }));
- }
-
- /**
- * Get the Signature of this Object
- *
- * @return Object Signature
- */
- public final String getSignature() {
- return raw.getRawString("signature");
- }
-
- /**
- * Get the Timestamp for when the data was last refreshed
- *
- * @return Data Timestamp
- */
- public long getTimestamp() {
- return timestamp;
- }
-
- /**
- * Determine if an extra value exists
- *
- * @param handle Handle
- * @return Value Status
- */
- public boolean hasExtra(String handle) {
- if (Util.isNull(handle)) throw new NullPointerException();
- return raw.getMap("extra").getKeys().contains(handle);
- }
-
- /**
- * Get an extra value
- *
- * @param handle Handle
- * @return Value
- */
- public ObjectMapValue getExtra(String handle) {
- if (Util.isNull(handle)) throw new NullPointerException();
- return raw.getMap("extra").get(handle);
- }
-
- /**
- * Get the extra value section
- *
- * @return Extra Value Section
- */
- public ObjectMap getExtra() {
- return raw.getMap("extra").clone();
- }
-
- /**
- * Get the raw representation of the Host
- *
- * @return Raw Host
- */
- public ObjectMap getRaw() {
- return raw.clone();
- }
-}
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Proxy.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Proxy.java
deleted file mode 100644
index c3db929c..00000000
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Proxy.java
+++ /dev/null
@@ -1,243 +0,0 @@
-package net.ME1312.SubServers.Client.Bukkit.Network.API;
-
-import net.ME1312.Galaxi.Library.Callback.Callback;
-import net.ME1312.Galaxi.Library.Map.ObjectMap;
-import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
-import net.ME1312.Galaxi.Library.Container.NamedContainer;
-import net.ME1312.Galaxi.Library.Util;
-import net.ME1312.SubData.Client.DataClient;
-import net.ME1312.SubData.Client.DataSender;
-import net.ME1312.SubData.Client.Library.ForwardedDataSender;
-import net.ME1312.SubData.Client.SubDataClient;
-import net.ME1312.SubData.Client.SubDataSender;
-import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadPlayerInfo;
-import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadProxyInfo;
-import net.ME1312.SubServers.Client.Bukkit.SubAPI;
-import org.bukkit.permissions.Permissible;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.*;
-
-/**
- * Simplified Proxy Data Class
- */
-public class Proxy {
- ObjectMap raw;
- private List players = null;
- DataClient client;
- long timestamp;
-
- /**
- * Create an API representation of a Proxy
- *
- * @param raw Raw representation of the Proxy
- */
- public Proxy(ObjectMap raw) {
- this(null, raw);
- }
-
- /**
- * Create an API representation of a Proxy
- *
- * @param client SubData connection
- * @param raw Raw representation of the Proxy
- */
- Proxy(DataClient client, ObjectMap raw) {
- this.client = client;
- load(raw);
- }
-
- @Override
- public boolean equals(Object obj) {
- return obj instanceof Proxy && getSignature().equals(((Proxy) obj).getSignature());
- }
-
- private void load(ObjectMap raw) {
- this.raw = raw;
- this.players = null;
- this.timestamp = Calendar.getInstance().getTime().getTime();
- }
-
- private SubDataClient client() {
- return SimplifiedData.client(client);
- }
-
- /**
- * Download a new copy of the data from SubData
- */
- public void refresh() {
- String name = getName();
- client().sendPacket(new PacketDownloadProxyInfo(Collections.singletonList(name), data -> load(data.getMap(name))));
- }
-
- /**
- * Gets the SubData Client Channel IDs
- *
- * @return SubData Client Channel ID Array
- */
- @SuppressWarnings("unchecked")
- public DataSender[] getSubData() {
- ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata"));
- LinkedList keys = new LinkedList(subdata.getKeys());
- LinkedList channels = new LinkedList();
- Collections.sort(keys);
- for (Integer channel : keys) channels.add((subdata.isNull(channel))?null:new ForwardedDataSender((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(channel)));
- return channels.toArray(new SubDataSender[0]);
- }
-
- /**
- * Determine if an object can perform some action on this proxy using possible permissions
- *
- * @param object Object to check against
- * @param permissions Permissions to check (use % as a placeholder for the proxy name)
- * @return Permission Check Result
- */
- public boolean permits(Permissible object, String... permissions) {
- if (Util.isNull(object)) throw new NullPointerException();
- boolean permitted = false;
-
- for (int p = 0; !permitted && p < permissions.length; p++) {
- String perm = permissions[p];
- if (perm != null) {
- // Check all proxies & individual proxies permission
- permitted = object.hasPermission(perm.replace("%", "*"))
- || object.hasPermission(perm.replace("%", this.getName().toLowerCase()));
- }
- }
-
- return permitted;
- }
-
- /**
- * Get the Name of this Proxy
- *
- * @return Name
- */
- public String getName() {
- return raw.getRawString("name");
- }
-
- /**
- * Get the Display Name of this Proxy
- *
- * @return Display Name
- */
- public String getDisplayName() {
- return raw.getRawString("display");
- }
-
- /**
- * Determine if the proxy is the Master Proxy
- *
- * @return Master Proxy Status
- */
- public boolean isMaster() {
- return raw.getBoolean("master");
- }
-
- /**
- * Get the players on this proxy (via RedisBungee)
- *
- * @return Remote Player Collection
- */
- public Collection> getPlayers() {
- List> players = new ArrayList>();
- for (String id : raw.getMap("players").getKeys()) {
- players.add(new NamedContainer(raw.getMap("players").getRawString(id), UUID.fromString(id)));
- }
- return players;
- }
-
- /**
- * Get the players on this proxy (via RedisBungee)
- *
- * @param callback Remote Player Collection
- */
- public void getPlayers(Callback> callback) {
- if (Util.isNull(callback)) throw new NullPointerException();
- StackTraceElement[] origin = new Exception().getStackTrace();
- Runnable run = () -> {
- try {
- callback.run(players);
- } catch (Throwable e) {
- Throwable ew = new InvocationTargetException(e);
- ew.setStackTrace(origin);
- ew.printStackTrace();
- }
- };
-
- if (players == null) {
- LinkedList ids = new LinkedList();
- for (String id : raw.getMap("players").getKeys()) ids.add(UUID.fromString(id));
- client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
- LinkedList players = new LinkedList();
- for (String player : data.getKeys()) {
- players.add(new RemotePlayer(data.getMap(player)));
- }
-
- this.players = players;
- run.run();
- }));
- } else {
- run.run();
- }
- }
-
- /**
- * Get the Signature of this Object
- *
- * @return Object Signature
- */
- public final String getSignature() {
- return raw.getRawString("signature");
- }
-
- /**
- * Get the Timestamp for when the data was last refreshed
- *
- * @return Data Timestamp
- */
- public long getTimestamp() {
- return timestamp;
- }
-
- /**
- * Determine if an extra value exists
- *
- * @param handle Handle
- * @return Value Status
- */
- public boolean hasExtra(String handle) {
- if (Util.isNull(handle)) throw new NullPointerException();
- return raw.getMap("extra").getKeys().contains(handle);
- }
-
- /**
- * Get an extra value
- *
- * @param handle Handle
- * @return Value
- */
- public ObjectMapValue getExtra(String handle) {
- if (Util.isNull(handle)) throw new NullPointerException();
- return raw.getMap("extra").get(handle);
- }
-
- /**
- * Get the extra value section
- *
- * @return Extra Value Section
- */
- public ObjectMap getExtra() {
- return raw.getMap("extra").clone();
- }
-
- /**
- * Get the raw representation of the Proxy
- *
- * @return Raw Proxy
- */
- public ObjectMap getRaw() {
- return raw.clone();
- }
-}
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/RemotePlayer.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/RemotePlayer.java
deleted file mode 100644
index 8f3ae15e..00000000
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/RemotePlayer.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package net.ME1312.SubServers.Client.Bukkit.Network.API;
-
-import net.ME1312.Galaxi.Library.Callback.Callback;
-import net.ME1312.Galaxi.Library.Map.ObjectMap;
-import net.ME1312.Galaxi.Library.Util;
-import net.ME1312.SubData.Client.DataClient;
-import net.ME1312.SubData.Client.SubDataClient;
-import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadPlayerInfo;
-import net.ME1312.SubServers.Client.Bukkit.SubAPI;
-
-import java.lang.reflect.InvocationTargetException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.util.*;
-
-/**
- * Simplified RemotePlayer Data Class
- */
-public class RemotePlayer {
- ObjectMap raw;
- private Proxy proxy = null;
- private Server server = null;
- DataClient client;
- long timestamp;
-
- /**
- * Create an API representation of a Remote Player
- *
- * @param raw Raw representation of the Remote Player
- */
- public RemotePlayer(ObjectMap raw) {
- this(null, raw);
- }
-
- /**
- * Create an API representation of a Remote Player
- *
- * @param client SubData connection
- * @param raw Raw representation of the Remote Player
- */
- RemotePlayer(DataClient client, ObjectMap raw) {
- this.client = client;
- load(raw);
- }
-
- @Override
- public boolean equals(Object obj) {
- return obj instanceof RemotePlayer && getUniqueId().equals(((RemotePlayer) obj).getUniqueId());
- }
-
- void load(ObjectMap raw) {
- this.raw = raw;
- this.proxy = null;
- this.server = null;
- this.timestamp = Calendar.getInstance().getTime().getTime();
- }
-
- private SubDataClient client() {
- return SimplifiedData.client(client);
- }
-
- /**
- * Download a new copy of the data from SubData
- */
- public void refresh() {
- UUID id = getUniqueId();
- client().sendPacket(new PacketDownloadPlayerInfo(Collections.singletonList(id), data -> load(data.getMap(id.toString()))));
- }
-
- /**
- * Get the UUID of this player.
- *
- * @return the UUID
- */
- public UUID getUniqueId() {
- return raw.getUUID("id");
- }
-
- /**
- * Get the unique name of this player.
- *
- * @return the players username
- */
- public String getName() {
- return raw.getRawString("name");
- }
-
- /**
- * Gets the remote address of this connection.
- *
- * @return the remote address
- */
- public InetSocketAddress getAddress() {
- return new InetSocketAddress(raw.getRawString("address").split(":")[0], Integer.parseInt(raw.getRawString("address").split(":")[1]));
- }
-
- /**
- * Gets the proxy this player is connected to.
- *
- * @return the proxy this player is connected to
- */
- public String getProxy() {
- return raw.getRawString("proxy");
- }
-
- /**
- * Gets the proxy this player is connected to.
- *
- * @param callback the proxy this player is connected to
- */
- public void getProxy(Callback callback) {
- if (Util.isNull(callback)) throw new NullPointerException();
- StackTraceElement[] origin = new Exception().getStackTrace();
- Runnable run = () -> {
- try {
- callback.run(proxy);
- } catch (Throwable e) {
- Throwable ew = new InvocationTargetException(e);
- ew.setStackTrace(origin);
- ew.printStackTrace();
- }
- };
-
- if (proxy == null || !proxy.getName().equalsIgnoreCase(raw.getRawString("proxy"))) {
- SubAPI.getInstance().getProxy(raw.getRawString("proxy"), proxy -> {
- this.proxy = proxy;
- run.run();
- });
- } else {
- run.run();
- }
- }
-
- /**
- * Gets the server this player is connected to.
- *
- * @return the server this player is connected to
- */
- public String getServer() {
- return raw.getRawString("server");
- }
-
- /**
- * Gets the server this player is connected to.
- *
- * @param callback the server this player is connected to
- */
- public void getServer(Callback callback) {
- if (Util.isNull(callback)) throw new NullPointerException();
- StackTraceElement[] origin = new Exception().getStackTrace();
- Runnable run = () -> {
- try {
- callback.run(server);
- } catch (Throwable e) {
- Throwable ew = new InvocationTargetException(e);
- ew.setStackTrace(origin);
- ew.printStackTrace();
- }
- };
-
- if (server == null || !server.getName().equalsIgnoreCase(raw.getRawString("server"))) {
- SubAPI.getInstance().getServer(raw.getRawString("server"), server -> {
- this.server = server;
- run.run();
- });
- } else {
- run.run();
- }
- }
-
- /**
- * Get the Timestamp for when the data was last refreshed
- *
- * @return Data Timestamp
- */
- public long getTimestamp() {
- return timestamp;
- }
-
- /**
- * Get the raw representation of the Server
- *
- * @return Raw Server
- */
- public ObjectMap getRaw() {
- return raw.clone();
- }
-}
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Server.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Server.java
deleted file mode 100644
index fb12f717..00000000
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Server.java
+++ /dev/null
@@ -1,281 +0,0 @@
-package net.ME1312.SubServers.Client.Bukkit.Network.API;
-
-import net.ME1312.Galaxi.Library.Callback.Callback;
-import net.ME1312.Galaxi.Library.Map.ObjectMap;
-import net.ME1312.Galaxi.Library.Container.NamedContainer;
-import net.ME1312.Galaxi.Library.Util;
-import net.ME1312.SubData.Client.DataClient;
-import net.ME1312.SubData.Client.DataSender;
-import net.ME1312.SubData.Client.Library.ForwardedDataSender;
-import net.ME1312.SubData.Client.SubDataClient;
-import net.ME1312.SubData.Client.SubDataSender;
-import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadPlayerInfo;
-import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadServerInfo;
-import net.ME1312.SubServers.Client.Bukkit.SubAPI;
-import org.bukkit.permissions.Permissible;
-
-import java.lang.reflect.InvocationTargetException;
-import java.net.InetSocketAddress;
-import java.util.*;
-
-/**
- * Simplified Server Data Class
- */
-public class Server {
- ObjectMap raw;
- private List players = null;
- DataClient client;
- long timestamp;
-
- /**
- * Create an API representation of a Server
- *
- * @param raw Raw representation of the Server
- */
- public Server(ObjectMap raw) {
- this(null, raw);
- }
-
- /**
- * Create an API representation of a Server
- *
- * @param client SubData connection
- * @param raw Raw representation of the Server
- */
- Server(DataClient client, ObjectMap raw) {
- this.client = (SubDataClient) client;
- load(raw);
- }
-
- @Override
- public boolean equals(Object obj) {
- return obj instanceof Server && getSignature().equals(((Server) obj).getSignature());
- }
-
- void load(ObjectMap raw) {
- this.raw = raw;
- this.players = null;
- this.timestamp = Calendar.getInstance().getTime().getTime();
- }
-
- SubDataClient client() {
- return SimplifiedData.client(client);
- }
-
- /**
- * Download a new copy of the data from SubData
- */
- public void refresh() {
- String name = getName();
- client().sendPacket(new PacketDownloadServerInfo(Collections.singletonList(name), data -> load(data.getMap(name))));
- }
-
- /**
- * Gets the SubData Client Channel IDs
- *
- * @return SubData Client Channel ID Array
- */
- @SuppressWarnings("unchecked")
- public DataSender[] getSubData() {
- ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata"));
- LinkedList keys = new LinkedList(subdata.getKeys());
- LinkedList channels = new LinkedList();
- Collections.sort(keys);
- for (Integer channel : keys) channels.add((subdata.isNull(channel))?null:new ForwardedDataSender((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(channel)));
- return channels.toArray(new SubDataSender[0]);
- }
-
- /**
- * Determine if an object can perform some action on this server using possible permissions
- *
- * @param object Object to check against
- * @param permissions Permissions to check (use % as a placeholder for the server name)
- * @return Permission Check Result
- */
- public boolean permits(Permissible object, String... permissions) {
- if (Util.isNull(object)) throw new NullPointerException();
- boolean permitted = false;
-
- for (int p = 0; !permitted && p < permissions.length; p++) {
- String perm = permissions[p];
- if (perm != null) {
- // Check all servers & individual servers permission
- permitted = object.hasPermission(perm.replace("%", "*"))
- || object.hasPermission(perm.replace("%", this.getName().toLowerCase()));
-
- // Check all hosts & individual hosts permission
- if (this instanceof SubServer) {
- permitted = permitted || object.hasPermission(perm.replace("%", "::*"))
- || object.hasPermission(perm.replace("%", "::" + ((SubServer) this).getHost().toLowerCase()));
- }
-
- // Check all groups & individual groups permission
- List groups = this.getGroups();
- if (groups.size() > 0) {
- permitted = permitted || object.hasPermission(perm.replace("%", ":*"));
- for (int g = 0; !permitted && g < groups.size(); g++) {
- permitted = object.hasPermission(perm.replace("%", ":" + groups.get(g).toLowerCase()));
- }
- }
- }
- }
-
- return permitted;
- }
-
- /**
- * Get the Name of this Server
- *
- * @return Server Name
- */
- public String getName() {
- return raw.getRawString("name");
- }
-
- /**
- * Get the Display Name of this Server
- *
- * @return Display Name
- */
- public String getDisplayName() {
- return raw.getRawString("display");
- }
- /**
- * Get the Address of this Server
- *
- * @return Server Address
- */
- public InetSocketAddress getAddress() {
- return new InetSocketAddress(raw.getRawString("address").split(":")[0], Integer.parseInt(raw.getRawString("address").split(":")[1]));
- }
-
- /**
- * Get this Server's Groups
- *
- * @return Group names
- */
- public List getGroups() {
- return new LinkedList(raw.getRawStringList("group"));
- }
-
- /**
- * Get players on this server across all known proxies
- *
- * @return Remote Player Collection
- */
- public Collection> getGlobalPlayers() {
- List> players = new ArrayList>();
- for (String id : raw.getMap("players").getKeys()) {
- players.add(new NamedContainer(raw.getMap("players").getRawString(id), UUID.fromString(id)));
- }
- return players;
- }
-
- /**
- * Get players on this server across all known proxies
- *
- * @param callback Remote Player Collection
- */
- public void getGlobalPlayers(Callback> callback) {
- if (Util.isNull(callback)) throw new NullPointerException();
- StackTraceElement[] origin = new Exception().getStackTrace();
- Runnable run = () -> {
- try {
- callback.run(players);
- } catch (Throwable e) {
- Throwable ew = new InvocationTargetException(e);
- ew.setStackTrace(origin);
- ew.printStackTrace();
- }
- };
-
- if (players == null) {
- LinkedList ids = new LinkedList();
- for (String id : raw.getMap("players").getKeys()) ids.add(UUID.fromString(id));
- client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
- LinkedList players = new LinkedList();
- for (String player : data.getKeys()) {
- players.add(new RemotePlayer(data.getMap(player)));
- }
-
- this.players = players;
- run.run();
- }));
- } else {
- run.run();
- }
- }
-
- /**
- * If the server is hidden from players
- *
- * @return Hidden Status
- */
- public boolean isHidden() {
- return raw.getBoolean("hidden");
- }
-
- /**
- * Gets the MOTD of the Server
- *
- * @return Server MOTD
- */
- public String getMotd() {
- return raw.getRawString("motd");
- }
-
- /**
- * Gets if the Server is Restricted
- *
- * @return Restricted Status
- */
- public boolean isRestricted() {
- return raw.getBoolean("restricted");
- }
-
- /**
- * Get a copy of the current whitelist
- *
- * @return Player Whitelist
- */
- public Collection 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
- *
- * @return Object Signature
- */
- public String getSignature() {
- return raw.getRawString("signature");
- }
-
- /**
- * Get the Timestamp for when the data was last refreshed
- *
- * @return Data Timestamp
- */
- public long getTimestamp() {
- return timestamp;
- }
-
- /**
- * Get the raw representation of the Server
- *
- * @return Raw Server
- */
- public ObjectMap getRaw() {
- return raw.clone();
- }
-}
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/SimplifiedData.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/SimplifiedData.java
deleted file mode 100644
index a6f16ffc..00000000
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/SimplifiedData.java
+++ /dev/null
@@ -1,400 +0,0 @@
-package net.ME1312.SubServers.Client.Bukkit.Network.API;
-
-import net.ME1312.Galaxi.Library.Callback.Callback;
-import net.ME1312.Galaxi.Library.Container.NamedContainer;
-import net.ME1312.Galaxi.Library.Util;
-import net.ME1312.SubData.Client.DataClient;
-import net.ME1312.SubData.Client.SubDataClient;
-import net.ME1312.SubServers.Client.Bukkit.Network.Packet.*;
-import net.ME1312.SubServers.Client.Bukkit.SubAPI;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.*;
-
-/**
- * Simplified Data Requesting Class
- */
-public final class SimplifiedData {
- private SimplifiedData() {}
- static SubDataClient client(DataClient client) {
- return (SubDataClient) ((client != null)? client : SubAPI.getInstance().getSubDataNetwork()[0]);
- }
-
- /**
- * Requests the Hosts
- *
- * @param client SubData connection
- * @param callback Host Map
- */
- public static void requestHosts(DataClient client, Callback