mirror of
https://github.com/ME1312/SubServers-2.git
synced 2024-09-28 05:17:43 +02:00
Implement a simalar namespaced key system in subdata
This was a change I made to the Lang API a while back, and now it has made it's way into SubData. Packets are now tied to channels (`n`) and then handles (`h`) within those channels.
This commit is contained in:
parent
98ac26750f
commit
97c73bf738
@ -4,6 +4,7 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
|
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
|
||||||
import net.ME1312.SubServers.Bungee.Library.Exception.IllegalPacketException;
|
import net.ME1312.SubServers.Bungee.Library.Exception.IllegalPacketException;
|
||||||
|
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.Library.Version.Version;
|
import net.ME1312.SubServers.Bungee.Library.Version.Version;
|
||||||
import net.ME1312.SubServers.Bungee.Network.Encryption.AES;
|
import net.ME1312.SubServers.Bungee.Network.Encryption.AES;
|
||||||
@ -23,8 +24,8 @@ import java.util.regex.Pattern;
|
|||||||
*/
|
*/
|
||||||
public final class SubDataServer {
|
public final class SubDataServer {
|
||||||
private static int MAX_QUEUE = 64;
|
private static int MAX_QUEUE = 64;
|
||||||
private static HashMap<Class<? extends PacketOut>, String> pOut = new HashMap<Class<? extends PacketOut>, String>();
|
private static HashMap<Class<? extends PacketOut>, NamedContainer<String, String>> pOut = new HashMap<Class<? extends PacketOut>, NamedContainer<String, String>>();
|
||||||
private static HashMap<String, List<PacketIn>> pIn = new HashMap<String, List<PacketIn>>();
|
private static HashMap<String, HashMap<String, List<PacketIn>>> pIn = new HashMap<String, HashMap<String, List<PacketIn>>>();
|
||||||
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
||||||
private static List<String> allowedAddresses = new ArrayList<String>();
|
private static List<String> allowedAddresses = new ArrayList<String>();
|
||||||
private static boolean defaults = false;
|
private static boolean defaults = false;
|
||||||
@ -81,58 +82,58 @@ public final class SubDataServer {
|
|||||||
|
|
||||||
plugin.getPluginManager().registerListener(null, new PacketOutRunEvent(plugin));
|
plugin.getPluginManager().registerListener(null, new PacketOutRunEvent(plugin));
|
||||||
|
|
||||||
registerPacket(new PacketAuthorization(plugin), "Authorization");
|
registerPacket(new PacketAuthorization(plugin), "SubData", "Authorization");
|
||||||
registerPacket(new PacketCommandServer(plugin), "SubCommandServer");
|
registerPacket(new PacketCommandServer(plugin), "SubServers", "CommandServer");
|
||||||
registerPacket(new PacketCreateServer(plugin), "SubCreateServer");
|
registerPacket(new PacketCreateServer(plugin), "SubServers", "CreateServer");
|
||||||
registerPacket(new PacketDownloadHostInfo(plugin), "SubDownloadHostInfo");
|
registerPacket(new PacketDownloadHostInfo(plugin), "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(new PacketDownloadLang(plugin), "SubDownloadLang");
|
registerPacket(new PacketDownloadLang(plugin), "SubServers", "DownloadLang");
|
||||||
registerPacket(new PacketDownloadNetworkList(plugin), "SubDownloadNetworkList");
|
registerPacket(new PacketDownloadNetworkList(plugin), "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(new PacketDownloadPlayerList(plugin), "SubDownloadPlayerList");
|
registerPacket(new PacketDownloadPlayerList(plugin), "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(new PacketDownloadProxyInfo(plugin), "SubDownloadProxyInfo");
|
registerPacket(new PacketDownloadProxyInfo(plugin), "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(new PacketDownloadServerInfo(plugin), "SubDownloadServerInfo");
|
registerPacket(new PacketDownloadServerInfo(plugin), "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(new PacketDownloadServerList(plugin), "SubDownloadServerList");
|
registerPacket(new PacketDownloadServerList(plugin), "SubServers", "DownloadServerList");
|
||||||
registerPacket(new PacketEditServer(plugin), "SubEditServer");
|
registerPacket(new PacketEditServer(plugin), "SubServers", "EditServer");
|
||||||
registerPacket(new PacketExAddServer(), "SubExAddServer");
|
registerPacket(new PacketExAddServer(), "SubServers", "ExAddServer");
|
||||||
registerPacket(new PacketExConfigureHost(plugin), "SubExConfigureHost");
|
registerPacket(new PacketExConfigureHost(plugin), "SubServers", "ExConfigureHost");
|
||||||
registerPacket(new PacketExCreateServer(null), "SubExCreateServer");
|
registerPacket(new PacketExCreateServer(null), "SubServers", "ExCreateServer");
|
||||||
registerPacket(new PacketExDeleteServer(), "SubExDeleteServer");
|
registerPacket(new PacketExDeleteServer(), "SubServers", "ExDeleteServer");
|
||||||
registerPacket(new PacketExRemoveServer(), "SubExRemoveServer");
|
registerPacket(new PacketExRemoveServer(), "SubServers", "ExRemoveServer");
|
||||||
registerPacket(new PacketExUpdateServer(plugin), "SubExUpdateServer");
|
registerPacket(new PacketExUpdateServer(plugin), "SubServers", "ExUpdateServer");
|
||||||
registerPacket(new PacketInExLogMessage(), "SubExLogMessage");
|
registerPacket(new PacketInExLogMessage(), "SubServers", "ExLogMessage");
|
||||||
registerPacket(new PacketInExRequestQueue(plugin), "SubExRequestQueue");
|
registerPacket(new PacketInExRequestQueue(plugin), "SubServers", "ExRequestQueue");
|
||||||
registerPacket(new PacketLinkExHost(plugin), "SubLinkExHost");
|
registerPacket(new PacketLinkExHost(plugin), "SubServers", "LinkExHost");
|
||||||
registerPacket(new PacketLinkProxy(plugin), "SubLinkProxy");
|
registerPacket(new PacketLinkProxy(plugin), "SubServers", "LinkProxy");
|
||||||
registerPacket(new PacketLinkServer(plugin), "SubLinkServer");
|
registerPacket(new PacketLinkServer(plugin), "SubServers", "LinkServer");
|
||||||
registerPacket(new PacketListenLog(plugin), "SubListenLog");
|
registerPacket(new PacketListenLog(plugin), "SubServers", "ListenLog");
|
||||||
registerPacket(new PacketStartServer(plugin), "SubStartServer");
|
registerPacket(new PacketStartServer(plugin), "SubServers", "StartServer");
|
||||||
registerPacket(new PacketStopServer(plugin), "SubStopServer");
|
registerPacket(new PacketStopServer(plugin), "SubServers", "StopServer");
|
||||||
|
|
||||||
registerPacket(PacketAuthorization.class, "Authorization");
|
registerPacket(PacketAuthorization.class, "SubData", "Authorization");
|
||||||
registerPacket(PacketCommandServer.class, "SubCommandServer");
|
registerPacket(PacketCommandServer.class, "SubServers", "CommandServer");
|
||||||
registerPacket(PacketCreateServer.class, "SubCreateServer");
|
registerPacket(PacketCreateServer.class, "SubServers", "CreateServer");
|
||||||
registerPacket(PacketDownloadHostInfo.class, "SubDownloadHostInfo");
|
registerPacket(PacketDownloadHostInfo.class, "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
|
registerPacket(PacketDownloadLang.class, "SubServers", "DownloadLang");
|
||||||
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
|
registerPacket(PacketDownloadNetworkList.class, "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
|
registerPacket(PacketDownloadPlayerList.class, "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
|
registerPacket(PacketDownloadProxyInfo.class, "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
|
registerPacket(PacketDownloadServerInfo.class, "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
|
registerPacket(PacketDownloadServerList.class, "SubServers", "DownloadServerList");
|
||||||
registerPacket(PacketEditServer.class, "SubEditServer");
|
registerPacket(PacketEditServer.class, "SubServers", "EditServer");
|
||||||
registerPacket(PacketExAddServer.class, "SubExAddServer");
|
registerPacket(PacketExAddServer.class, "SubServers", "ExAddServer");
|
||||||
registerPacket(PacketExConfigureHost.class, "SubExConfigureHost");
|
registerPacket(PacketExConfigureHost.class, "SubServers", "ExConfigureHost");
|
||||||
registerPacket(PacketExCreateServer.class, "SubExCreateServer");
|
registerPacket(PacketExCreateServer.class, "SubServers", "ExCreateServer");
|
||||||
registerPacket(PacketExDeleteServer.class, "SubExDeleteServer");
|
registerPacket(PacketExDeleteServer.class, "SubServers", "ExDeleteServer");
|
||||||
registerPacket(PacketExRemoveServer.class, "SubExRemoveServer");
|
registerPacket(PacketExRemoveServer.class, "SubServers", "ExRemoveServer");
|
||||||
registerPacket(PacketExUpdateServer.class, "SubExUpdateServer");
|
registerPacket(PacketExUpdateServer.class, "SubServers", "ExUpdateServer");
|
||||||
registerPacket(PacketLinkExHost.class, "SubLinkExHost");
|
registerPacket(PacketLinkExHost.class, "SubServers", "LinkExHost");
|
||||||
registerPacket(PacketLinkProxy.class, "SubLinkProxy");
|
registerPacket(PacketLinkProxy.class, "SubServers", "LinkProxy");
|
||||||
registerPacket(PacketLinkServer.class, "SubLinkServer");
|
registerPacket(PacketLinkServer.class, "SubServers", "LinkServer");
|
||||||
registerPacket(PacketListenLog.class, "SubListenLog");
|
registerPacket(PacketListenLog.class, "SubServers", "ListenLog");
|
||||||
registerPacket(PacketOutRunEvent.class, "SubRunEvent");
|
registerPacket(PacketOutRunEvent.class, "SubServers", "RunEvent");
|
||||||
registerPacket(PacketOutReload.class, "SubReload");
|
registerPacket(PacketOutReload.class, "SubServers", "Reload");
|
||||||
registerPacket(PacketOutReset.class, "SubReset");
|
registerPacket(PacketOutReset.class, "SubServers", "Reset");
|
||||||
registerPacket(PacketStartServer.class, "SubStartServer");
|
registerPacket(PacketStartServer.class, "SubServers", "StartServer");
|
||||||
registerPacket(PacketStopServer.class, "SubStopServer");
|
registerPacket(PacketStopServer.class, "SubServers", "StopServer");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -298,33 +299,40 @@ public final class SubDataServer {
|
|||||||
* Register PacketIn to the Network
|
* Register PacketIn to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketIn to register
|
* @param packet PacketIn to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to Bind
|
* @param handle Handle to Bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(PacketIn packet, String handle) {
|
public static void registerPacket(PacketIn packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
List<PacketIn> list = (pIn.keySet().contains(handle.toLowerCase()))?pIn.get(handle.toLowerCase()):new ArrayList<PacketIn>();
|
HashMap<String, List<PacketIn>> map = (pIn.keySet().contains(channel.toLowerCase()))?pIn.get(channel.toLowerCase()):new HashMap<String, List<PacketIn>>();
|
||||||
|
List<PacketIn> list = (map.keySet().contains(handle))?map.get(handle):new ArrayList<PacketIn>();
|
||||||
if (!list.contains(packet)) {
|
if (!list.contains(packet)) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
map.put(handle, list);
|
||||||
|
pIn.put(channel.toLowerCase(), map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketIn from the Network
|
* Unregister PacketIn from the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketIn to unregister
|
* @param packet PacketIn to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(PacketIn packet) {
|
public static void unregisterPacket(String channel, PacketIn packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
List<String> search = new ArrayList<String>();
|
if (pIn.keySet().contains(channel.toLowerCase())) {
|
||||||
search.addAll(pIn.keySet());
|
List<String> search = new ArrayList<String>();
|
||||||
for (String handle : search) if (pIn.get(handle.toLowerCase()).contains(packet)) {
|
search.addAll(pIn.get(channel.toLowerCase()).keySet());
|
||||||
List<PacketIn> list = pIn.get(handle.toLowerCase());
|
for (String handle : search) if (pIn.get(channel.toLowerCase()).get(handle).contains(packet)) {
|
||||||
list.remove(packet);
|
List<PacketIn> list = pIn.get(channel.toLowerCase()).get(handle);
|
||||||
if (list.isEmpty()) {
|
list.remove(packet);
|
||||||
pIn.remove(handle.toLowerCase());
|
if (list.isEmpty()) {
|
||||||
} else {
|
pIn.get(channel.toLowerCase()).remove(handle);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
if (pIn.get(channel.toLowerCase()).isEmpty()) pIn.remove(channel.toLowerCase());
|
||||||
|
} else {
|
||||||
|
pIn.get(channel.toLowerCase()).put(handle, list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -333,32 +341,35 @@ public final class SubDataServer {
|
|||||||
* Register PacketOut to the Network
|
* Register PacketOut to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketOut to register
|
* @param packet PacketOut to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to bind
|
* @param handle Handle to bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(Class<? extends PacketOut> packet, String handle) {
|
public static void registerPacket(Class<? extends PacketOut> packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
pOut.put(packet, handle.toLowerCase());
|
pOut.put(packet, new NamedContainer<String, String>(channel.toLowerCase(), handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketOut to the Network
|
* Unregister PacketOut to the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketOut to unregister
|
* @param packet PacketOut to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(Class<? extends PacketOut> packet) {
|
public static void unregisterPacket(String channel, Class<? extends PacketOut> packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
pOut.remove(packet);
|
if (pOut.keySet().contains(packet) && pOut.get(packet).name().equalsIgnoreCase(channel)) pOut.remove(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Grab PacketIn Instances via handle
|
* Grab PacketIn Instances via handle
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle
|
* @param handle Handle
|
||||||
* @return PacketIn
|
* @return PacketIn
|
||||||
*/
|
*/
|
||||||
public static List<? extends PacketIn> getPacket(String handle) {
|
public static List<? extends PacketIn> getPacket(String channel, String handle) {
|
||||||
if (Util.isNull(handle)) throw new NullPointerException();
|
if (Util.isNull(handle)) throw new NullPointerException();
|
||||||
return new ArrayList<PacketIn>(pIn.get(handle.toLowerCase()));
|
return new ArrayList<PacketIn>(pIn.get(channel.toLowerCase()).get(handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -428,7 +439,8 @@ public final class SubDataServer {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
YAMLSection contents = packet.generate();
|
YAMLSection contents = packet.generate();
|
||||||
section.set("h", pOut.get(packet.getClass()));
|
section.set("n", pOut.get(packet.getClass()).name());
|
||||||
|
section.set("h", pOut.get(packet.getClass()).get());
|
||||||
section.set("v", packet.getVersion().toString());
|
section.set("v", packet.getVersion().toString());
|
||||||
if (contents != null) section.set("c", contents);
|
if (contents != null) section.set("c", contents);
|
||||||
return section;
|
return section;
|
||||||
@ -445,11 +457,11 @@ public final class SubDataServer {
|
|||||||
* @throws IllegalPacketException
|
* @throws IllegalPacketException
|
||||||
*/
|
*/
|
||||||
protected static List<PacketIn> decodePacket(Client client, YAMLSection data) throws IllegalPacketException {
|
protected static List<PacketIn> decodePacket(Client client, YAMLSection data) throws IllegalPacketException {
|
||||||
if (!data.contains("h") || !data.contains("v")) throw new IllegalPacketException(client.getAddress().toString() + ": Unknown Packet Format: " + data.toString());
|
if (!data.contains("n") || !data.contains("h") || !data.contains("v")) throw new IllegalPacketException(client.getAddress().toString() + ": Unknown Packet Format: " + data.toString());
|
||||||
if (!pIn.keySet().contains(data.getRawString("h"))) throw new IllegalPacketException(client.getAddress().toString() + ": Unknown PacketIn Channel: " + data.getRawString("h"));
|
if (!pIn.keySet().contains(data.getRawString("n")) || !pIn.get(data.getRawString("n")).keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("n") + ':' + data.getRawString("h"));
|
||||||
|
|
||||||
List<PacketIn> list = new ArrayList<PacketIn>();
|
List<PacketIn> list = new ArrayList<PacketIn>();
|
||||||
for (PacketIn packet : pIn.get(data.getRawString("h"))) {
|
for (PacketIn packet : pIn.get(data.getRawString("n")).get(data.getRawString("h"))) {
|
||||||
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
} else {
|
} else {
|
||||||
|
@ -659,6 +659,15 @@ public final class SubAPI {
|
|||||||
return plugin.version;
|
return plugin.version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the SubServers Build Signature
|
||||||
|
*
|
||||||
|
* @return SubServers Build Signature (or null if unsigned)
|
||||||
|
*/
|
||||||
|
public Version getWrapperBuild() {
|
||||||
|
return (SubPlugin.class.getPackage().getSpecificationTitle() != null)?new Version(SubPlugin.class.getPackage().getSpecificationTitle()):null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the BungeeCord Version
|
* Gets the BungeeCord Version
|
||||||
*
|
*
|
||||||
|
@ -71,28 +71,22 @@ public final class SubCommand extends CommandX {
|
|||||||
if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
|
if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
|
||||||
sender.sendMessages(printHelp());
|
sender.sendMessages(printHelp());
|
||||||
} else if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("ver")) {
|
} else if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("ver")) {
|
||||||
boolean build = false;
|
|
||||||
try {
|
|
||||||
Field f = Version.class.getDeclaredField("type");
|
|
||||||
f.setAccessible(true);
|
|
||||||
build = f.get(plugin.version) != VersionType.SNAPSHOT && SubPlugin.class.getPackage().getSpecificationTitle() != null;
|
|
||||||
f.setAccessible(false);
|
|
||||||
} catch (Exception e) {}
|
|
||||||
|
|
||||||
sender.sendMessage("SubServers > These are the platforms and versions that are running SubServers.Bungee:");
|
sender.sendMessage("SubServers > These are the platforms and versions that are running SubServers.Bungee:");
|
||||||
sender.sendMessage(" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ',');
|
sender.sendMessage(" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ',');
|
||||||
sender.sendMessage(" Java " + System.getProperty("java.version") + ',');
|
sender.sendMessage(" Java " + System.getProperty("java.version") + ',');
|
||||||
sender.sendMessage(" " + plugin.getBungeeName() + ((plugin.isPatched)?" [Patched] ":" ") + net.md_5.bungee.Bootstrap.class.getPackage().getImplementationVersion() + ',');
|
sender.sendMessage(" " + plugin.getBungeeName() + ((plugin.isPatched)?" [Patched] ":" ") + net.md_5.bungee.Bootstrap.class.getPackage().getImplementationVersion() + ',');
|
||||||
sender.sendMessage(" SubServers.Bungee v" + SubPlugin.version.toExtendedString() + ((build)?" (" + SubPlugin.class.getPackage().getSpecificationTitle() + ')':""));
|
sender.sendMessage(" SubServers.Bungee v" + SubPlugin.version.toExtendedString() + ((plugin.api.getWrapperBuild() != null)?" (" + plugin.api.getWrapperBuild() + ')':""));
|
||||||
sender.sendMessage("");
|
sender.sendMessage("");
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = plugin.version;
|
Version updversion = plugin.version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
@ -58,8 +58,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
|
|||||||
public final SubAPI api = new SubAPI(this);
|
public final SubAPI api = new SubAPI(this);
|
||||||
public SubDataServer subdata = null;
|
public SubDataServer subdata = null;
|
||||||
public SubServer sudo = null;
|
public SubServer sudo = null;
|
||||||
//public static final Version version = Version.fromString("2.13b");
|
public static final Version version = Version.fromString("2.13b");
|
||||||
public static final Version version = new Version(Version.fromString("2.13b"), VersionType.SNAPSHOT, (SubPlugin.class.getPackage().getSpecificationTitle() == null)?"custom":SubPlugin.class.getPackage().getSpecificationTitle()); // TODO Snapshot Version
|
|
||||||
|
|
||||||
public boolean redis = false;
|
public boolean redis = false;
|
||||||
public boolean canSudo = false;
|
public boolean canSudo = false;
|
||||||
|
@ -27,8 +27,8 @@ import java.util.*;
|
|||||||
* SubData Direct Client Class
|
* SubData Direct Client Class
|
||||||
*/
|
*/
|
||||||
public final class SubDataClient {
|
public final class SubDataClient {
|
||||||
private static HashMap<Class<? extends PacketOut>, String> pOut = new HashMap<Class<? extends PacketOut>, String>();
|
private static HashMap<Class<? extends PacketOut>, NamedContainer<String, String>> pOut = new HashMap<Class<? extends PacketOut>, NamedContainer<String, String>>();
|
||||||
private static HashMap<String, List<PacketIn>> pIn = new HashMap<String, List<PacketIn>>();
|
private static HashMap<String, HashMap<String, List<PacketIn>>> pIn = new HashMap<String, HashMap<String, List<PacketIn>>>();
|
||||||
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
||||||
private static boolean defaults = false;
|
private static boolean defaults = false;
|
||||||
private PrintWriter writer;
|
private PrintWriter writer;
|
||||||
@ -95,36 +95,36 @@ public final class SubDataClient {
|
|||||||
} private void loadDefaults() {
|
} private void loadDefaults() {
|
||||||
defaults = true;
|
defaults = true;
|
||||||
|
|
||||||
registerPacket(new PacketAuthorization(plugin), "Authorization");
|
registerPacket(new PacketAuthorization(plugin), "SubData", "Authorization");
|
||||||
registerPacket(new PacketCommandServer(), "SubCommandServer");
|
registerPacket(new PacketCommandServer(), "SubServers", "CommandServer");
|
||||||
registerPacket(new PacketCreateServer(), "SubCreateServer");
|
registerPacket(new PacketCreateServer(), "SubServers", "CreateServer");
|
||||||
registerPacket(new PacketDownloadHostInfo(), "SubDownloadHostInfo");
|
registerPacket(new PacketDownloadHostInfo(), "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(new PacketDownloadLang(plugin), "SubDownloadLang");
|
registerPacket(new PacketDownloadLang(plugin), "SubServers", "DownloadLang");
|
||||||
registerPacket(new PacketDownloadNetworkList(), "SubDownloadNetworkList");
|
registerPacket(new PacketDownloadNetworkList(), "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(new PacketDownloadPlayerList(), "SubDownloadPlayerList");
|
registerPacket(new PacketDownloadPlayerList(), "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(new PacketDownloadProxyInfo(), "SubDownloadProxyInfo");
|
registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(new PacketDownloadServerInfo(), "SubDownloadServerInfo");
|
registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(new PacketDownloadServerList(), "SubDownloadServerList");
|
registerPacket(new PacketDownloadServerList(), "SubServers", "DownloadServerList");
|
||||||
registerPacket(new PacketInRunEvent(plugin), "SubRunEvent");
|
registerPacket(new PacketInRunEvent(plugin), "SubServers", "RunEvent");
|
||||||
registerPacket(new PacketInReload(plugin), "SubReload");
|
registerPacket(new PacketInReload(plugin), "SubServers", "Reload");
|
||||||
registerPacket(new PacketInReset(), "SubReset");
|
registerPacket(new PacketInReset(), "SubServers", "Reset");
|
||||||
registerPacket(new PacketLinkServer(plugin), "SubLinkServer");
|
registerPacket(new PacketLinkServer(plugin), "SubServers", "LinkServer");
|
||||||
registerPacket(new PacketStartServer(), "SubStartServer");
|
registerPacket(new PacketStartServer(), "SubServers", "StartServer");
|
||||||
registerPacket(new PacketStopServer(), "SubStopServer");
|
registerPacket(new PacketStopServer(), "SubServers", "StopServer");
|
||||||
|
|
||||||
registerPacket(PacketAuthorization.class, "Authorization");
|
registerPacket(PacketAuthorization.class, "SubData", "Authorization");
|
||||||
registerPacket(PacketCommandServer.class, "SubCommandServer");
|
registerPacket(PacketCommandServer.class, "SubServers", "CommandServer");
|
||||||
registerPacket(PacketCreateServer.class, "SubCreateServer");
|
registerPacket(PacketCreateServer.class, "SubServers", "CreateServer");
|
||||||
registerPacket(PacketDownloadHostInfo.class, "SubDownloadHostInfo");
|
registerPacket(PacketDownloadHostInfo.class, "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
|
registerPacket(PacketDownloadLang.class, "SubServers", "DownloadLang");
|
||||||
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
|
registerPacket(PacketDownloadNetworkList.class, "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
|
registerPacket(PacketDownloadPlayerList.class, "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
|
registerPacket(PacketDownloadProxyInfo.class, "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
|
registerPacket(PacketDownloadServerInfo.class, "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
|
registerPacket(PacketDownloadServerList.class, "SubServers", "DownloadServerList");
|
||||||
registerPacket(PacketLinkServer.class, "SubLinkServer");
|
registerPacket(PacketLinkServer.class, "SubServers", "LinkServer");
|
||||||
registerPacket(PacketStartServer.class, "SubStartServer");
|
registerPacket(PacketStartServer.class, "SubServers", "StartServer");
|
||||||
registerPacket(PacketStopServer.class, "SubStopServer");
|
registerPacket(PacketStopServer.class, "SubServers", "StopServer");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loop() {
|
private void loop() {
|
||||||
@ -230,33 +230,40 @@ public final class SubDataClient {
|
|||||||
* Register PacketIn to the Network
|
* Register PacketIn to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketIn to register
|
* @param packet PacketIn to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to Bind
|
* @param handle Handle to Bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(PacketIn packet, String handle) {
|
public static void registerPacket(PacketIn packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
List<PacketIn> list = (pIn.keySet().contains(handle.toLowerCase()))?pIn.get(handle.toLowerCase()):new ArrayList<PacketIn>();
|
HashMap<String, List<PacketIn>> map = (pIn.keySet().contains(channel.toLowerCase()))?pIn.get(channel.toLowerCase()):new HashMap<String, List<PacketIn>>();
|
||||||
|
List<PacketIn> list = (map.keySet().contains(handle))?map.get(handle):new ArrayList<PacketIn>();
|
||||||
if (!list.contains(packet)) {
|
if (!list.contains(packet)) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
map.put(handle, list);
|
||||||
|
pIn.put(channel.toLowerCase(), map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketIn from the Network
|
* Unregister PacketIn from the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketIn to unregister
|
* @param packet PacketIn to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(PacketIn packet) {
|
public static void unregisterPacket(String channel, PacketIn packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
List<String> search = new ArrayList<String>();
|
if (pIn.keySet().contains(channel.toLowerCase())) {
|
||||||
search.addAll(pIn.keySet());
|
List<String> search = new ArrayList<String>();
|
||||||
for (String handle : search) if (pIn.get(handle.toLowerCase()).contains(packet)) {
|
search.addAll(pIn.get(channel.toLowerCase()).keySet());
|
||||||
List<PacketIn> list = pIn.get(handle.toLowerCase());
|
for (String handle : search) if (pIn.get(channel.toLowerCase()).get(handle).contains(packet)) {
|
||||||
list.remove(packet);
|
List<PacketIn> list = pIn.get(channel.toLowerCase()).get(handle);
|
||||||
if (list.isEmpty()) {
|
list.remove(packet);
|
||||||
pIn.remove(handle.toLowerCase());
|
if (list.isEmpty()) {
|
||||||
} else {
|
pIn.get(channel.toLowerCase()).remove(handle);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
if (pIn.get(channel.toLowerCase()).isEmpty()) pIn.remove(channel.toLowerCase());
|
||||||
|
} else {
|
||||||
|
pIn.get(channel.toLowerCase()).put(handle, list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -265,32 +272,35 @@ public final class SubDataClient {
|
|||||||
* Register PacketOut to the Network
|
* Register PacketOut to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketOut to register
|
* @param packet PacketOut to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to bind
|
* @param handle Handle to bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(Class<? extends PacketOut> packet, String handle) {
|
public static void registerPacket(Class<? extends PacketOut> packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
pOut.put(packet, handle.toLowerCase());
|
pOut.put(packet, new NamedContainer<String, String>(channel.toLowerCase(), handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketOut to the Network
|
* Unregister PacketOut to the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketOut to unregister
|
* @param packet PacketOut to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(Class<? extends PacketOut> packet) {
|
public static void unregisterPacket(String channel, Class<? extends PacketOut> packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
pOut.remove(packet);
|
if (pOut.keySet().contains(packet) && pOut.get(packet).name().equalsIgnoreCase(channel)) pOut.remove(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Grab PacketIn Instances via handle
|
* Grab PacketIn Instances via handle
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle
|
* @param handle Handle
|
||||||
* @return PacketIn
|
* @return PacketIn
|
||||||
*/
|
*/
|
||||||
public static List<? extends PacketIn> getPacket(String handle) {
|
public static List<? extends PacketIn> getPacket(String channel, String handle) {
|
||||||
if (Util.isNull(handle)) throw new NullPointerException();
|
if (Util.isNull(handle)) throw new NullPointerException();
|
||||||
return new ArrayList<PacketIn>(pIn.get(handle.toLowerCase()));
|
return new ArrayList<PacketIn>(pIn.get(channel.toLowerCase()).get(handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -356,7 +366,8 @@ public final class SubDataClient {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
YAMLSection contents = packet.generate();
|
YAMLSection contents = packet.generate();
|
||||||
data.set("h", pOut.get(packet.getClass()));
|
data.set("n", pOut.get(packet.getClass()).name());
|
||||||
|
data.set("h", pOut.get(packet.getClass()).get());
|
||||||
data.set("v", packet.getVersion().toString());
|
data.set("v", packet.getVersion().toString());
|
||||||
if (contents != null) data.set("c", contents);
|
if (contents != null) data.set("c", contents);
|
||||||
return data;
|
return data;
|
||||||
@ -374,11 +385,11 @@ public final class SubDataClient {
|
|||||||
* @throws InvocationTargetException
|
* @throws InvocationTargetException
|
||||||
*/
|
*/
|
||||||
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
|
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
|
||||||
if (!data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
|
if (!data.contains("n") || !data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
|
||||||
if (!pIn.keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("h"));
|
if (!pIn.keySet().contains(data.getRawString("n")) || !pIn.get(data.getRawString("n")).keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("n") + ':' + data.getRawString("h"));
|
||||||
|
|
||||||
List<PacketIn> list = new ArrayList<PacketIn>();
|
List<PacketIn> list = new ArrayList<PacketIn>();
|
||||||
for (PacketIn packet : pIn.get(data.getRawString("h"))) {
|
for (PacketIn packet : pIn.get(data.getRawString("n")).get(data.getRawString("h"))) {
|
||||||
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
} else {
|
} else {
|
||||||
|
@ -353,6 +353,15 @@ public final class SubAPI {
|
|||||||
return plugin.version;
|
return plugin.version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the SubServers Build Signature
|
||||||
|
*
|
||||||
|
* @return SubServers Build Signature (or null if unsigned)
|
||||||
|
*/
|
||||||
|
public Version getPluginBuild() {
|
||||||
|
return (SubPlugin.class.getPackage().getSpecificationTitle() != null)?new Version(SubPlugin.class.getPackage().getSpecificationTitle()):null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the Server Version
|
* Gets the Server Version
|
||||||
*
|
*
|
||||||
|
@ -53,28 +53,22 @@ public final class SubCommand implements CommandExecutor {
|
|||||||
if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
|
if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
|
||||||
sender.sendMessage(printHelp(label));
|
sender.sendMessage(printHelp(label));
|
||||||
} else if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("ver")) {
|
} else if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("ver")) {
|
||||||
boolean build = false;
|
|
||||||
try {
|
|
||||||
Field f = Version.class.getDeclaredField("type");
|
|
||||||
f.setAccessible(true);
|
|
||||||
build = f.get(plugin.version) != VersionType.SNAPSHOT && SubPlugin.class.getPackage().getSpecificationTitle() != null;
|
|
||||||
f.setAccessible(false);
|
|
||||||
} catch (Exception e) {}
|
|
||||||
|
|
||||||
sender.sendMessage(plugin.api.getLang("SubServers", "Command.Version").replace("$str$", "SubServers.Client.Bukkit"));
|
sender.sendMessage(plugin.api.getLang("SubServers", "Command.Version").replace("$str$", "SubServers.Client.Bukkit"));
|
||||||
sender.sendMessage(ChatColor.WHITE + " " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ChatColor.RESET + ',');
|
sender.sendMessage(ChatColor.WHITE + " " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ChatColor.RESET + ',');
|
||||||
sender.sendMessage(ChatColor.WHITE + " Java " + System.getProperty("java.version") + ChatColor.RESET + ',');
|
sender.sendMessage(ChatColor.WHITE + " Java " + System.getProperty("java.version") + ChatColor.RESET + ',');
|
||||||
sender.sendMessage(ChatColor.WHITE + " " + Bukkit.getName() + ' ' + Bukkit.getVersion() + ChatColor.RESET + ',');
|
sender.sendMessage(ChatColor.WHITE + " " + Bukkit.getName() + ' ' + Bukkit.getVersion() + ChatColor.RESET + ',');
|
||||||
sender.sendMessage(ChatColor.WHITE + " SubServers.Client.Bukkit v" + plugin.version.toExtendedString() + ((build)?" (" + SubPlugin.class.getPackage().getSpecificationTitle() + ')':""));
|
sender.sendMessage(ChatColor.WHITE + " SubServers.Client.Bukkit v" + plugin.version.toExtendedString() + ((plugin.api.getPluginBuild() != null)?" (" + plugin.api.getPluginBuild() + ')':""));
|
||||||
sender.sendMessage("");
|
sender.sendMessage("");
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = plugin.version;
|
Version updversion = plugin.version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
@ -28,6 +28,8 @@ import java.net.URL;
|
|||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -46,8 +48,7 @@ public final class SubPlugin extends JavaPlugin {
|
|||||||
|
|
||||||
public SubPlugin() {
|
public SubPlugin() {
|
||||||
super();
|
super();
|
||||||
//version = Version.fromString(getDescription().getVersion());
|
version = Version.fromString(getDescription().getVersion());
|
||||||
version = new Version(Version.fromString(getDescription().getVersion()), VersionType.SNAPSHOT, (SubPlugin.class.getPackage().getSpecificationTitle() == null)?"custom":SubPlugin.class.getPackage().getSpecificationTitle()); // TODO Snapshot Version
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -95,11 +96,13 @@ public final class SubPlugin extends JavaPlugin {
|
|||||||
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
|
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = version;
|
Version updversion = version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
@ -30,8 +30,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
* SubData Direct Client Class
|
* SubData Direct Client Class
|
||||||
*/
|
*/
|
||||||
public final class SubDataClient {
|
public final class SubDataClient {
|
||||||
private static HashMap<Class<? extends PacketOut>, String> pOut = new HashMap<Class<? extends PacketOut>, String>();
|
private static HashMap<Class<? extends PacketOut>, NamedContainer<String, String>> pOut = new HashMap<Class<? extends PacketOut>, NamedContainer<String, String>>();
|
||||||
private static HashMap<String, List<PacketIn>> pIn = new HashMap<String, List<PacketIn>>();
|
private static HashMap<String, HashMap<String, List<PacketIn>>> pIn = new HashMap<String, HashMap<String, List<PacketIn>>>();
|
||||||
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
||||||
private static boolean defaults = false;
|
private static boolean defaults = false;
|
||||||
protected static Logger log;
|
protected static Logger log;
|
||||||
@ -100,36 +100,36 @@ public final class SubDataClient {
|
|||||||
defaults = true;
|
defaults = true;
|
||||||
log = LoggerFactory.getLogger("SubData");
|
log = LoggerFactory.getLogger("SubData");
|
||||||
|
|
||||||
registerPacket(new PacketAuthorization(plugin), "Authorization");
|
registerPacket(new PacketAuthorization(plugin), "SubData", "Authorization");
|
||||||
registerPacket(new PacketCommandServer(), "SubCommandServer");
|
registerPacket(new PacketCommandServer(), "SubServers", "CommandServer");
|
||||||
registerPacket(new PacketCreateServer(), "SubCreateServer");
|
registerPacket(new PacketCreateServer(), "SubServers", "CreateServer");
|
||||||
registerPacket(new PacketDownloadHostInfo(), "SubDownloadHostInfo");
|
registerPacket(new PacketDownloadHostInfo(), "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(new PacketDownloadLang(plugin), "SubDownloadLang");
|
registerPacket(new PacketDownloadLang(plugin), "SubServers", "DownloadLang");
|
||||||
registerPacket(new PacketDownloadNetworkList(), "SubDownloadNetworkList");
|
registerPacket(new PacketDownloadNetworkList(), "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(new PacketDownloadPlayerList(), "SubDownloadPlayerList");
|
registerPacket(new PacketDownloadPlayerList(), "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(new PacketDownloadProxyInfo(), "SubDownloadProxyInfo");
|
registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(new PacketDownloadServerInfo(), "SubDownloadServerInfo");
|
registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(new PacketDownloadServerList(), "SubDownloadServerList");
|
registerPacket(new PacketDownloadServerList(), "SubServers", "DownloadServerList");
|
||||||
registerPacket(new PacketInRunEvent(plugin), "SubRunEvent");
|
registerPacket(new PacketInRunEvent(plugin), "SubServers", "RunEvent");
|
||||||
registerPacket(new PacketInReload(plugin), "SubReload");
|
registerPacket(new PacketInReload(plugin), "SubServers", "Reload");
|
||||||
registerPacket(new PacketInReset(), "SubReset");
|
registerPacket(new PacketInReset(), "SubServers", "Reset");
|
||||||
registerPacket(new PacketLinkServer(plugin), "SubLinkServer");
|
registerPacket(new PacketLinkServer(plugin), "SubServers", "LinkServer");
|
||||||
registerPacket(new PacketStartServer(), "SubStartServer");
|
registerPacket(new PacketStartServer(), "SubServers", "StartServer");
|
||||||
registerPacket(new PacketStopServer(), "SubStopServer");
|
registerPacket(new PacketStopServer(), "SubServers", "StopServer");
|
||||||
|
|
||||||
registerPacket(PacketAuthorization.class, "Authorization");
|
registerPacket(PacketAuthorization.class, "SubData", "Authorization");
|
||||||
registerPacket(PacketCommandServer.class, "SubCommandServer");
|
registerPacket(PacketCommandServer.class, "SubServers", "CommandServer");
|
||||||
registerPacket(PacketCreateServer.class, "SubCreateServer");
|
registerPacket(PacketCreateServer.class, "SubServers", "CreateServer");
|
||||||
registerPacket(PacketDownloadHostInfo.class, "SubDownloadHostInfo");
|
registerPacket(PacketDownloadHostInfo.class, "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
|
registerPacket(PacketDownloadLang.class, "SubServers", "DownloadLang");
|
||||||
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
|
registerPacket(PacketDownloadNetworkList.class, "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
|
registerPacket(PacketDownloadPlayerList.class, "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
|
registerPacket(PacketDownloadProxyInfo.class, "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
|
registerPacket(PacketDownloadServerInfo.class, "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
|
registerPacket(PacketDownloadServerList.class, "SubServers", "DownloadServerList");
|
||||||
registerPacket(PacketLinkServer.class, "SubLinkServer");
|
registerPacket(PacketLinkServer.class, "SubServers", "LinkServer");
|
||||||
registerPacket(PacketStartServer.class, "SubStartServer");
|
registerPacket(PacketStartServer.class, "SubServers", "StartServer");
|
||||||
registerPacket(PacketStopServer.class, "SubStopServer");
|
registerPacket(PacketStopServer.class, "SubServers", "StopServer");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loop() {
|
private void loop() {
|
||||||
@ -235,33 +235,40 @@ public final class SubDataClient {
|
|||||||
* Register PacketIn to the Network
|
* Register PacketIn to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketIn to register
|
* @param packet PacketIn to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to Bind
|
* @param handle Handle to Bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(PacketIn packet, String handle) {
|
public static void registerPacket(PacketIn packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
List<PacketIn> list = (pIn.keySet().contains(handle.toLowerCase()))?pIn.get(handle.toLowerCase()):new ArrayList<PacketIn>();
|
HashMap<String, List<PacketIn>> map = (pIn.keySet().contains(channel.toLowerCase()))?pIn.get(channel.toLowerCase()):new HashMap<String, List<PacketIn>>();
|
||||||
|
List<PacketIn> list = (map.keySet().contains(handle))?map.get(handle):new ArrayList<PacketIn>();
|
||||||
if (!list.contains(packet)) {
|
if (!list.contains(packet)) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
map.put(handle, list);
|
||||||
|
pIn.put(channel.toLowerCase(), map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketIn from the Network
|
* Unregister PacketIn from the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketIn to unregister
|
* @param packet PacketIn to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(PacketIn packet) {
|
public static void unregisterPacket(String channel, PacketIn packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
List<String> search = new ArrayList<String>();
|
if (pIn.keySet().contains(channel.toLowerCase())) {
|
||||||
search.addAll(pIn.keySet());
|
List<String> search = new ArrayList<String>();
|
||||||
for (String handle : search) if (pIn.get(handle.toLowerCase()).contains(packet)) {
|
search.addAll(pIn.get(channel.toLowerCase()).keySet());
|
||||||
List<PacketIn> list = pIn.get(handle.toLowerCase());
|
for (String handle : search) if (pIn.get(channel.toLowerCase()).get(handle).contains(packet)) {
|
||||||
list.remove(packet);
|
List<PacketIn> list = pIn.get(channel.toLowerCase()).get(handle);
|
||||||
if (list.isEmpty()) {
|
list.remove(packet);
|
||||||
pIn.remove(handle.toLowerCase());
|
if (list.isEmpty()) {
|
||||||
} else {
|
pIn.get(channel.toLowerCase()).remove(handle);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
if (pIn.get(channel.toLowerCase()).isEmpty()) pIn.remove(channel.toLowerCase());
|
||||||
|
} else {
|
||||||
|
pIn.get(channel.toLowerCase()).put(handle, list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,32 +277,35 @@ public final class SubDataClient {
|
|||||||
* Register PacketOut to the Network
|
* Register PacketOut to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketOut to register
|
* @param packet PacketOut to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to bind
|
* @param handle Handle to bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(Class<? extends PacketOut> packet, String handle) {
|
public static void registerPacket(Class<? extends PacketOut> packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
pOut.put(packet, handle.toLowerCase());
|
pOut.put(packet, new NamedContainer<String, String>(channel.toLowerCase(), handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketOut to the Network
|
* Unregister PacketOut to the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketOut to unregister
|
* @param packet PacketOut to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(Class<? extends PacketOut> packet) {
|
public static void unregisterPacket(String channel, Class<? extends PacketOut> packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
pOut.remove(packet);
|
if (pOut.keySet().contains(packet) && pOut.get(packet).name().equalsIgnoreCase(channel)) pOut.remove(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Grab PacketIn Instances via handle
|
* Grab PacketIn Instances via handle
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle
|
* @param handle Handle
|
||||||
* @return PacketIn
|
* @return PacketIn
|
||||||
*/
|
*/
|
||||||
public static List<? extends PacketIn> getPacket(String handle) {
|
public static List<? extends PacketIn> getPacket(String channel, String handle) {
|
||||||
if (Util.isNull(handle)) throw new NullPointerException();
|
if (Util.isNull(handle)) throw new NullPointerException();
|
||||||
return new ArrayList<PacketIn>(pIn.get(handle.toLowerCase()));
|
return new ArrayList<PacketIn>(pIn.get(channel.toLowerCase()).get(handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -361,7 +371,8 @@ public final class SubDataClient {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
YAMLSection contents = packet.generate();
|
YAMLSection contents = packet.generate();
|
||||||
data.set("h", pOut.get(packet.getClass()));
|
data.set("n", pOut.get(packet.getClass()).name());
|
||||||
|
data.set("h", pOut.get(packet.getClass()).get());
|
||||||
data.set("v", packet.getVersion().toString());
|
data.set("v", packet.getVersion().toString());
|
||||||
if (contents != null) data.set("c", contents);
|
if (contents != null) data.set("c", contents);
|
||||||
return data;
|
return data;
|
||||||
@ -379,11 +390,11 @@ public final class SubDataClient {
|
|||||||
* @throws InvocationTargetException
|
* @throws InvocationTargetException
|
||||||
*/
|
*/
|
||||||
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
|
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
|
||||||
if (!data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
|
if (!data.contains("n") || !data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
|
||||||
if (!pIn.keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("h"));
|
if (!pIn.keySet().contains(data.getRawString("n")) || !pIn.get(data.getRawString("n")).keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("n") + ':' + data.getRawString("h"));
|
||||||
|
|
||||||
List<PacketIn> list = new ArrayList<PacketIn>();
|
List<PacketIn> list = new ArrayList<PacketIn>();
|
||||||
for (PacketIn packet : pIn.get(data.getRawString("h"))) {
|
for (PacketIn packet : pIn.get(data.getRawString("n")).get(data.getRawString("h"))) {
|
||||||
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
} else {
|
} else {
|
||||||
|
@ -352,6 +352,15 @@ public final class SubAPI {
|
|||||||
return plugin.version;
|
return plugin.version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the SubServers Build Signature
|
||||||
|
*
|
||||||
|
* @return SubServers Build Signature (or null if unsigned)
|
||||||
|
*/
|
||||||
|
public Version getPluginBuild() {
|
||||||
|
return (SubPlugin.class.getPackage().getSpecificationTitle() != null)?new Version(SubPlugin.class.getPackage().getSpecificationTitle()):null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the Server Version
|
* Gets the Server Version
|
||||||
*
|
*
|
||||||
|
@ -156,29 +156,22 @@ public final class SubCommand implements CommandExecutor {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public CommandResult execute(CommandSource sender, CommandContext args) throws CommandException {
|
public CommandResult execute(CommandSource sender, CommandContext args) throws CommandException {
|
||||||
if (canRun(sender)) {
|
if (canRun(sender)) {
|
||||||
boolean build = false;
|
|
||||||
String platform = "Sponge";
|
|
||||||
try {
|
|
||||||
Field f = Version.class.getDeclaredField("type");
|
|
||||||
f.setAccessible(true);
|
|
||||||
build = f.get(plugin.version) != VersionType.SNAPSHOT && SubPlugin.class.getPackage().getSpecificationTitle() != null;
|
|
||||||
f.setAccessible(false);
|
|
||||||
} catch (Exception e) {}
|
|
||||||
|
|
||||||
sender.sendMessage(Text.of(plugin.api.getLang("SubServers", "Command.Version").replace("$str$", "SubServers.Client.Sponge")));
|
sender.sendMessage(Text.of(plugin.api.getLang("SubServers", "Command.Version").replace("$str$", "SubServers.Client.Sponge")));
|
||||||
sender.sendMessage(Text.builder(" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version")).color(TextColors.WHITE).append(Text.of(",")).build());
|
sender.sendMessage(Text.builder(" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version")).color(TextColors.WHITE).append(Text.of(",")).build());
|
||||||
sender.sendMessage(Text.builder(" Java " + System.getProperty("java.version")).color(TextColors.WHITE).append(Text.of(",")).build());
|
sender.sendMessage(Text.builder(" Java " + System.getProperty("java.version")).color(TextColors.WHITE).append(Text.of(",")).build());
|
||||||
sender.sendMessage(Text.builder(" " + Sponge.getPlatform().getImplementation().getName() + ' ' + Sponge.getPlatform().getImplementation().getVersion().get()).color(TextColors.WHITE).append(Text.of(",")).build());
|
sender.sendMessage(Text.builder(" " + Sponge.getPlatform().getImplementation().getName() + ' ' + Sponge.getPlatform().getImplementation().getVersion().get()).color(TextColors.WHITE).append(Text.of(",")).build());
|
||||||
sender.sendMessage(Text.builder(" SubServers.Client.Sponge v" + plugin.version.toExtendedString() + ((build)?" (" + SubPlugin.class.getPackage().getSpecificationTitle() + ')':"")).color(TextColors.WHITE).build());
|
sender.sendMessage(Text.builder(" SubServers.Client.Sponge v" + plugin.version.toExtendedString() + ((plugin.api.getPluginBuild() != null)?" (" + plugin.api.getPluginBuild() + ')':"")).color(TextColors.WHITE).build());
|
||||||
sender.sendMessage(Text.EMPTY);
|
sender.sendMessage(Text.EMPTY);
|
||||||
plugin.game.getScheduler().createTaskBuilder().async().execute(() -> {
|
plugin.game.getScheduler().createTaskBuilder().async().execute(() -> {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = plugin.version;
|
Version updversion = plugin.version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
@ -37,6 +37,8 @@ import java.net.URL;
|
|||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -62,8 +64,7 @@ public final class SubPlugin {
|
|||||||
@Listener
|
@Listener
|
||||||
public void setup(GamePreInitializationEvent event) {
|
public void setup(GamePreInitializationEvent event) {
|
||||||
if (plugin.getVersion().isPresent()) {
|
if (plugin.getVersion().isPresent()) {
|
||||||
//version = Version.fromString(plugin.getVersion().get());
|
version = Version.fromString(plugin.getVersion().get());
|
||||||
version = new Version(Version.fromString(plugin.getVersion().get()), VersionType.SNAPSHOT, (SubPlugin.class.getPackage().getSpecificationTitle() == null)?"custom":SubPlugin.class.getPackage().getSpecificationTitle()); // TODO Snapshot Version
|
|
||||||
} else version = new Version("Custom");
|
} else version = new Version("Custom");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,11 +111,13 @@ public final class SubPlugin {
|
|||||||
game.getScheduler().createTaskBuilder().async().execute(() -> {
|
game.getScheduler().createTaskBuilder().async().execute(() -> {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = version;
|
Version updversion = version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
Main-Class: net.ME1312.SubServers.Host.ExHost
|
Main-Class: net.ME1312.SubServers.Host.ExHost
|
||||||
Implementation-Title: SubServers.Host
|
Implementation-Title: SubServers.Host
|
||||||
Specification-Title: 18w30bb
|
|
||||||
|
@ -55,8 +55,7 @@ public final class ExHost {
|
|||||||
public SubDataClient subdata = null;
|
public SubDataClient subdata = null;
|
||||||
|
|
||||||
public final SubAPI api = new SubAPI(this);
|
public final SubAPI api = new SubAPI(this);
|
||||||
//public static final Version version = Version.fromString("2.13b");
|
public static final Version version = Version.fromString("2.13b");
|
||||||
public static final Version version = new Version(Version.fromString("2.13b"), VersionType.SNAPSHOT, (ExHost.class.getPackage().getSpecificationTitle() == null)?"custom":ExHost.class.getPackage().getSpecificationTitle()); // TODO Snapshot Version
|
|
||||||
|
|
||||||
private ConsoleReader jline;
|
private ConsoleReader jline;
|
||||||
private boolean running = false;
|
private boolean running = false;
|
||||||
@ -417,11 +416,13 @@ public final class ExHost {
|
|||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new JSONObject("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}'));
|
YAMLSection tags = new YAMLSection(new JSONObject("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}'));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = version;
|
Version updversion = version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
@ -32,8 +32,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
* SubData Direct Client Class
|
* SubData Direct Client Class
|
||||||
*/
|
*/
|
||||||
public final class SubDataClient {
|
public final class SubDataClient {
|
||||||
private static HashMap<Class<? extends PacketOut>, String> pOut = new HashMap<Class<? extends PacketOut>, String>();
|
private static HashMap<Class<? extends PacketOut>, NamedContainer<String, String>> pOut = new HashMap<Class<? extends PacketOut>, NamedContainer<String, String>>();
|
||||||
private static HashMap<String, List<PacketIn>> pIn = new HashMap<String, List<PacketIn>>();
|
private static HashMap<String, HashMap<String, List<PacketIn>>> pIn = new HashMap<String, HashMap<String, List<PacketIn>>>();
|
||||||
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
||||||
private static boolean defaults = false;
|
private static boolean defaults = false;
|
||||||
protected static Logger log;
|
protected static Logger log;
|
||||||
@ -103,51 +103,51 @@ public final class SubDataClient {
|
|||||||
defaults = true;
|
defaults = true;
|
||||||
log = new Logger("SubData");
|
log = new Logger("SubData");
|
||||||
|
|
||||||
registerPacket(new PacketAuthorization(host), "Authorization");
|
registerPacket(new PacketAuthorization(host), "SubData", "Authorization");
|
||||||
registerPacket(new PacketCommandServer(), "SubCommandServer");
|
registerPacket(new PacketCommandServer(), "SubServers", "CommandServer");
|
||||||
registerPacket(new PacketCreateServer(), "SubCreateServer");
|
registerPacket(new PacketCreateServer(), "SubServers", "CreateServer");
|
||||||
registerPacket(new PacketDownloadHostInfo(), "SubDownloadHostInfo");
|
registerPacket(new PacketDownloadHostInfo(), "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(new PacketDownloadLang(host), "SubDownloadLang");
|
registerPacket(new PacketDownloadLang(host), "SubServers", "DownloadLang");
|
||||||
registerPacket(new PacketDownloadNetworkList(), "SubDownloadNetworkList");
|
registerPacket(new PacketDownloadNetworkList(), "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(new PacketDownloadPlayerList(), "SubDownloadPlayerList");
|
registerPacket(new PacketDownloadPlayerList(), "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(new PacketDownloadProxyInfo(), "SubDownloadProxyInfo");
|
registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(new PacketDownloadServerInfo(), "SubDownloadServerInfo");
|
registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(new PacketDownloadServerList(), "SubDownloadServerList");
|
registerPacket(new PacketDownloadServerList(), "SubServers", "DownloadServerList");
|
||||||
registerPacket(new PacketExAddServer(host), "SubExAddServer");
|
registerPacket(new PacketExAddServer(host), "SubServers", "ExAddServer");
|
||||||
registerPacket(new PacketExConfigureHost(host), "SubExConfigureHost");
|
registerPacket(new PacketExConfigureHost(host), "SubServers", "ExConfigureHost");
|
||||||
registerPacket(new PacketExCreateServer(host), "SubExCreateServer");
|
registerPacket(new PacketExCreateServer(host), "SubServers", "ExCreateServer");
|
||||||
registerPacket(new PacketExDeleteServer(host), "SubExDeleteServer");
|
registerPacket(new PacketExDeleteServer(host), "SubServers", "ExDeleteServer");
|
||||||
registerPacket(new PacketExRemoveServer(host), "SubExRemoveServer");
|
registerPacket(new PacketExRemoveServer(host), "SubServers", "ExRemoveServer");
|
||||||
registerPacket(new PacketExUpdateServer(host), "SubExUpdateServer");
|
registerPacket(new PacketExUpdateServer(host), "SubServers", "ExUpdateServer");
|
||||||
registerPacket(new PacketInReload(host), "SubReload");
|
registerPacket(new PacketInReload(host), "SubServers", "Reload");
|
||||||
registerPacket(new PacketInReset(host), "SubReset");
|
registerPacket(new PacketInReset(host), "SubServers", "Reset");
|
||||||
registerPacket(new PacketInRunEvent(), "SubRunEvent");
|
registerPacket(new PacketInRunEvent(), "SubServers", "RunEvent");
|
||||||
registerPacket(new PacketLinkExHost(host), "SubLinkExHost");
|
registerPacket(new PacketLinkExHost(host), "SubServers", "LinkExHost");
|
||||||
registerPacket(new PacketStartServer(), "SubStartServer");
|
registerPacket(new PacketStartServer(), "SubServers", "StartServer");
|
||||||
registerPacket(new PacketStopServer(), "SubStopServer");
|
registerPacket(new PacketStopServer(), "SubServers", "StopServer");
|
||||||
|
|
||||||
|
|
||||||
registerPacket(PacketAuthorization.class, "Authorization");
|
registerPacket(PacketAuthorization.class, "SubData", "Authorization");
|
||||||
registerPacket(PacketCommandServer.class, "SubCommandServer");
|
registerPacket(PacketCommandServer.class, "SubServers", "CommandServer");
|
||||||
registerPacket(PacketCreateServer.class, "SubCreateServer");
|
registerPacket(PacketCreateServer.class, "SubServers", "CreateServer");
|
||||||
registerPacket(PacketDownloadHostInfo.class, "SubDownloadHostInfo");
|
registerPacket(PacketDownloadHostInfo.class, "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
|
registerPacket(PacketDownloadLang.class, "SubServers", "DownloadLang");
|
||||||
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
|
registerPacket(PacketDownloadNetworkList.class, "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
|
registerPacket(PacketDownloadPlayerList.class, "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
|
registerPacket(PacketDownloadProxyInfo.class, "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
|
registerPacket(PacketDownloadServerInfo.class, "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
|
registerPacket(PacketDownloadServerList.class, "SubServers", "DownloadServerList");
|
||||||
registerPacket(PacketExAddServer.class, "SubExAddServer");
|
registerPacket(PacketExAddServer.class, "SubServers", "ExAddServer");
|
||||||
registerPacket(PacketExConfigureHost.class, "SubExConfigureHost");
|
registerPacket(PacketExConfigureHost.class, "SubServers", "ExConfigureHost");
|
||||||
registerPacket(PacketExCreateServer.class, "SubExCreateServer");
|
registerPacket(PacketExCreateServer.class, "SubServers", "ExCreateServer");
|
||||||
registerPacket(PacketExDeleteServer.class, "SubExDeleteServer");
|
registerPacket(PacketExDeleteServer.class, "SubServers", "ExDeleteServer");
|
||||||
registerPacket(PacketExRemoveServer.class, "SubExRemoveServer");
|
registerPacket(PacketExRemoveServer.class, "SubServers", "ExRemoveServer");
|
||||||
registerPacket(PacketExUpdateServer.class, "SubExUpdateServer");
|
registerPacket(PacketExUpdateServer.class, "SubServers", "ExUpdateServer");
|
||||||
registerPacket(PacketLinkExHost.class, "SubLinkExHost");
|
registerPacket(PacketLinkExHost.class, "SubServers", "LinkExHost");
|
||||||
registerPacket(PacketOutExLogMessage.class, "SubExLogMessage");
|
registerPacket(PacketOutExLogMessage.class, "SubServers", "ExLogMessage");
|
||||||
registerPacket(PacketOutExRequestQueue.class, "SubExRequestQueue");
|
registerPacket(PacketOutExRequestQueue.class, "SubServers", "ExRequestQueue");
|
||||||
registerPacket(PacketStartServer.class, "SubStartServer");
|
registerPacket(PacketStartServer.class, "SubServers", "StartServer");
|
||||||
registerPacket(PacketStopServer.class, "SubStopServer");
|
registerPacket(PacketStopServer.class, "SubServers", "StopServer");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loop() {
|
private void loop() {
|
||||||
@ -251,33 +251,40 @@ public final class SubDataClient {
|
|||||||
* Register PacketIn to the Network
|
* Register PacketIn to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketIn to register
|
* @param packet PacketIn to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to Bind
|
* @param handle Handle to Bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(PacketIn packet, String handle) {
|
public static void registerPacket(PacketIn packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
List<PacketIn> list = (pIn.keySet().contains(handle.toLowerCase()))?pIn.get(handle.toLowerCase()):new ArrayList<PacketIn>();
|
HashMap<String, List<PacketIn>> map = (pIn.keySet().contains(channel.toLowerCase()))?pIn.get(channel.toLowerCase()):new HashMap<String, List<PacketIn>>();
|
||||||
|
List<PacketIn> list = (map.keySet().contains(handle))?map.get(handle):new ArrayList<PacketIn>();
|
||||||
if (!list.contains(packet)) {
|
if (!list.contains(packet)) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
map.put(handle, list);
|
||||||
|
pIn.put(channel.toLowerCase(), map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketIn from the Network
|
* Unregister PacketIn from the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketIn to unregister
|
* @param packet PacketIn to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(PacketIn packet) {
|
public static void unregisterPacket(String channel, PacketIn packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
List<String> search = new ArrayList<String>();
|
if (pIn.keySet().contains(channel.toLowerCase())) {
|
||||||
search.addAll(pIn.keySet());
|
List<String> search = new ArrayList<String>();
|
||||||
for (String handle : search) if (pIn.get(handle.toLowerCase()).contains(packet)) {
|
search.addAll(pIn.get(channel.toLowerCase()).keySet());
|
||||||
List<PacketIn> list = pIn.get(handle.toLowerCase());
|
for (String handle : search) if (pIn.get(channel.toLowerCase()).get(handle).contains(packet)) {
|
||||||
list.remove(packet);
|
List<PacketIn> list = pIn.get(channel.toLowerCase()).get(handle);
|
||||||
if (list.isEmpty()) {
|
list.remove(packet);
|
||||||
pIn.remove(handle.toLowerCase());
|
if (list.isEmpty()) {
|
||||||
} else {
|
pIn.get(channel.toLowerCase()).remove(handle);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
if (pIn.get(channel.toLowerCase()).isEmpty()) pIn.remove(channel.toLowerCase());
|
||||||
|
} else {
|
||||||
|
pIn.get(channel.toLowerCase()).put(handle, list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -286,32 +293,35 @@ public final class SubDataClient {
|
|||||||
* Register PacketOut to the Network
|
* Register PacketOut to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketOut to register
|
* @param packet PacketOut to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to bind
|
* @param handle Handle to bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(Class<? extends PacketOut> packet, String handle) {
|
public static void registerPacket(Class<? extends PacketOut> packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
pOut.put(packet, handle.toLowerCase());
|
pOut.put(packet, new NamedContainer<String, String>(channel.toLowerCase(), handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketOut to the Network
|
* Unregister PacketOut to the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketOut to unregister
|
* @param packet PacketOut to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(Class<? extends PacketOut> packet) {
|
public static void unregisterPacket(String channel, Class<? extends PacketOut> packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
pOut.remove(packet);
|
if (pOut.keySet().contains(packet) && pOut.get(packet).name().equalsIgnoreCase(channel)) pOut.remove(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Grab PacketIn Instances via handle
|
* Grab PacketIn Instances via handle
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle
|
* @param handle Handle
|
||||||
* @return PacketIn
|
* @return PacketIn
|
||||||
*/
|
*/
|
||||||
public static List<? extends PacketIn> getPacket(String handle) {
|
public static List<? extends PacketIn> getPacket(String channel, String handle) {
|
||||||
if (Util.isNull(handle)) throw new NullPointerException();
|
if (Util.isNull(handle)) throw new NullPointerException();
|
||||||
return new ArrayList<PacketIn>(pIn.get(handle.toLowerCase()));
|
return new ArrayList<PacketIn>(pIn.get(channel.toLowerCase()).get(handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -376,7 +386,8 @@ public final class SubDataClient {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
YAMLSection contents = packet.generate();
|
YAMLSection contents = packet.generate();
|
||||||
json.set("h", pOut.get(packet.getClass()));
|
json.set("n", pOut.get(packet.getClass()).name());
|
||||||
|
json.set("h", pOut.get(packet.getClass()).get());
|
||||||
json.set("v", packet.getVersion().toString());
|
json.set("v", packet.getVersion().toString());
|
||||||
if (contents != null) json.set("c", contents);
|
if (contents != null) json.set("c", contents);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
@ -395,11 +406,11 @@ public final class SubDataClient {
|
|||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
|
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
|
||||||
if (!data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
|
if (!data.contains("n") || !data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
|
||||||
if (!pIn.keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("h"));
|
if (!pIn.keySet().contains(data.getRawString("n")) || !pIn.get(data.getRawString("n")).keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("n") + ':' + data.getRawString("h"));
|
||||||
|
|
||||||
List<PacketIn> list = new ArrayList<PacketIn>();
|
List<PacketIn> list = new ArrayList<PacketIn>();
|
||||||
for (PacketIn packet : pIn.get(data.getRawString("h"))) {
|
for (PacketIn packet : pIn.get(data.getRawString("n")).get(data.getRawString("h"))) {
|
||||||
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
} else {
|
} else {
|
||||||
|
@ -615,4 +615,13 @@ public final class SubAPI {
|
|||||||
public Version getAppVersion() {
|
public Version getAppVersion() {
|
||||||
return host.version;
|
return host.version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the SubServers Build Signature
|
||||||
|
*
|
||||||
|
* @return SubServers Build Signature (or null if unsigned)
|
||||||
|
*/
|
||||||
|
public Version getAppBuild() {
|
||||||
|
return (ExHost.class.getPackage().getSpecificationTitle() != null)?new Version(ExHost.class.getPackage().getSpecificationTitle()):null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,29 +33,23 @@ public class SubCommand {
|
|||||||
@Override
|
@Override
|
||||||
public void command(String handle, String[] args) {
|
public void command(String handle, String[] args) {
|
||||||
if (args.length == 0 || host.api.plugins.get(args[0].toLowerCase()) != null) {
|
if (args.length == 0 || host.api.plugins.get(args[0].toLowerCase()) != null) {
|
||||||
boolean build = false;
|
|
||||||
try {
|
|
||||||
Field f = Version.class.getDeclaredField("type");
|
|
||||||
f.setAccessible(true);
|
|
||||||
build = f.get(host.version) != VersionType.SNAPSHOT && ExHost.class.getPackage().getSpecificationTitle() != null;
|
|
||||||
f.setAccessible(false);
|
|
||||||
} catch (Exception e) {}
|
|
||||||
|
|
||||||
host.log.message.println(
|
host.log.message.println(
|
||||||
"These are the platforms and versions that are running " + ((args.length == 0)?"SubServers.Host":host.api.plugins.get(args[0].toLowerCase()).getName()) +":",
|
"These are the platforms and versions that are running " + ((args.length == 0)?"SubServers.Host":host.api.plugins.get(args[0].toLowerCase()).getName()) +":",
|
||||||
" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ',',
|
" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ',',
|
||||||
" Java " + System.getProperty("java.version") + ',',
|
" Java " + System.getProperty("java.version") + ',',
|
||||||
" SubServers.Host v" + host.version.toExtendedString() + ((build)?" (" + ExHost.class.getPackage().getSpecificationTitle() + ')':"") + ((args.length == 0)?"":","));
|
" SubServers.Host v" + host.version.toExtendedString() + ((host.api.getAppBuild() != null)?" (" + host.api.getAppBuild() + ')':""));
|
||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
host.log.message.println("");
|
host.log.message.println("");
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new JSONObject("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}'));
|
YAMLSection tags = new YAMLSection(new JSONObject("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}'));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = host.version;
|
Version updversion = host.version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
@ -2,4 +2,3 @@ Manifest-Version: 1.0
|
|||||||
Class-Path: BungeeCord.jar Waterfall.jar
|
Class-Path: BungeeCord.jar Waterfall.jar
|
||||||
Main-Class: net.ME1312.SubServers.Sync.Launch
|
Main-Class: net.ME1312.SubServers.Sync.Launch
|
||||||
Implementation-Title: SubServers.Sync
|
Implementation-Title: SubServers.Sync
|
||||||
Specification-Title: 18w30bb
|
|
||||||
|
@ -30,8 +30,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
* SubData Direct Client Class
|
* SubData Direct Client Class
|
||||||
*/
|
*/
|
||||||
public final class SubDataClient {
|
public final class SubDataClient {
|
||||||
private static HashMap<Class<? extends PacketOut>, String> pOut = new HashMap<Class<? extends PacketOut>, String>();
|
private static HashMap<Class<? extends PacketOut>, NamedContainer<String, String>> pOut = new HashMap<Class<? extends PacketOut>, NamedContainer<String, String>>();
|
||||||
private static HashMap<String, List<PacketIn>> pIn = new HashMap<String, List<PacketIn>>();
|
private static HashMap<String, HashMap<String, List<PacketIn>>> pIn = new HashMap<String, HashMap<String, List<PacketIn>>>();
|
||||||
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
|
||||||
private static boolean defaults = false;
|
private static boolean defaults = false;
|
||||||
private PrintWriter writer;
|
private PrintWriter writer;
|
||||||
@ -113,35 +113,35 @@ public final class SubDataClient {
|
|||||||
} private void loadDefaults() {
|
} private void loadDefaults() {
|
||||||
defaults = true;
|
defaults = true;
|
||||||
|
|
||||||
registerPacket(new PacketAuthorization(plugin), "Authorization");
|
registerPacket(new PacketAuthorization(plugin), "SubData", "Authorization");
|
||||||
registerPacket(new PacketCommandServer(), "SubCommandServer");
|
registerPacket(new PacketCommandServer(), "SubServers", "CommandServer");
|
||||||
registerPacket(new PacketCreateServer(), "SubCreateServer");
|
registerPacket(new PacketCreateServer(), "SubServers", "CreateServer");
|
||||||
registerPacket(new PacketDownloadHostInfo(), "SubDownloadHostInfo");
|
registerPacket(new PacketDownloadHostInfo(), "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(new PacketDownloadLang(plugin), "SubDownloadLang");
|
registerPacket(new PacketDownloadLang(plugin), "SubServers", "DownloadLang");
|
||||||
registerPacket(new PacketDownloadNetworkList(), "SubDownloadNetworkList");
|
registerPacket(new PacketDownloadNetworkList(), "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(new PacketDownloadPlayerList(), "SubDownloadPlayerList");
|
registerPacket(new PacketDownloadPlayerList(), "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(new PacketDownloadProxyInfo(), "SubDownloadProxyInfo");
|
registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(new PacketDownloadServerInfo(), "SubDownloadServerInfo");
|
registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(new PacketDownloadServerList(), "SubDownloadServerList");
|
registerPacket(new PacketDownloadServerList(), "SubServers", "DownloadServerList");
|
||||||
registerPacket(new PacketInRunEvent(), "SubRunEvent");
|
registerPacket(new PacketInRunEvent(), "SubServers", "RunEvent");
|
||||||
registerPacket(new PacketInReset(), "SubReset");
|
registerPacket(new PacketInReset(), "SubServers", "Reset");
|
||||||
registerPacket(new PacketLinkProxy(plugin), "SubLinkProxy");
|
registerPacket(new PacketLinkProxy(plugin), "SubServers", "LinkProxy");
|
||||||
registerPacket(new PacketStartServer(), "SubStartServer");
|
registerPacket(new PacketStartServer(), "SubServers", "StartServer");
|
||||||
registerPacket(new PacketStopServer(), "SubStopServer");
|
registerPacket(new PacketStopServer(), "SubServers", "StopServer");
|
||||||
|
|
||||||
registerPacket(PacketAuthorization.class, "Authorization");
|
registerPacket(PacketAuthorization.class, "SubData", "Authorization");
|
||||||
registerPacket(PacketCommandServer.class, "SubCommandServer");
|
registerPacket(PacketCommandServer.class, "SubServers", "CommandServer");
|
||||||
registerPacket(PacketCreateServer.class, "SubCreateServer");
|
registerPacket(PacketCreateServer.class, "SubServers", "CreateServer");
|
||||||
registerPacket(PacketDownloadHostInfo.class, "SubDownloadHostInfo");
|
registerPacket(PacketDownloadHostInfo.class, "SubServers", "DownloadHostInfo");
|
||||||
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
|
registerPacket(PacketDownloadLang.class, "SubServers", "DownloadLang");
|
||||||
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
|
registerPacket(PacketDownloadNetworkList.class, "SubServers", "DownloadNetworkList");
|
||||||
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
|
registerPacket(PacketDownloadPlayerList.class, "SubServers", "DownloadPlayerList");
|
||||||
registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
|
registerPacket(PacketDownloadProxyInfo.class, "SubServers", "DownloadProxyInfo");
|
||||||
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
|
registerPacket(PacketDownloadServerInfo.class, "SubServers", "DownloadServerInfo");
|
||||||
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
|
registerPacket(PacketDownloadServerList.class, "SubServers", "DownloadServerList");
|
||||||
registerPacket(PacketLinkProxy.class, "SubLinkProxy");
|
registerPacket(PacketLinkProxy.class, "SubServers", "LinkProxy");
|
||||||
registerPacket(PacketStartServer.class, "SubStartServer");
|
registerPacket(PacketStartServer.class, "SubServers", "StartServer");
|
||||||
registerPacket(PacketStopServer.class, "SubStopServer");
|
registerPacket(PacketStopServer.class, "SubServers", "StopServer");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loop() {
|
private void loop() {
|
||||||
@ -256,33 +256,40 @@ public final class SubDataClient {
|
|||||||
* Register PacketIn to the Network
|
* Register PacketIn to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketIn to register
|
* @param packet PacketIn to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to Bind
|
* @param handle Handle to Bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(PacketIn packet, String handle) {
|
public static void registerPacket(PacketIn packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
List<PacketIn> list = (pIn.keySet().contains(handle.toLowerCase()))?pIn.get(handle.toLowerCase()):new ArrayList<PacketIn>();
|
HashMap<String, List<PacketIn>> map = (pIn.keySet().contains(channel.toLowerCase()))?pIn.get(channel.toLowerCase()):new HashMap<String, List<PacketIn>>();
|
||||||
|
List<PacketIn> list = (map.keySet().contains(handle))?map.get(handle):new ArrayList<PacketIn>();
|
||||||
if (!list.contains(packet)) {
|
if (!list.contains(packet)) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
map.put(handle, list);
|
||||||
|
pIn.put(channel.toLowerCase(), map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketIn from the Network
|
* Unregister PacketIn from the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketIn to unregister
|
* @param packet PacketIn to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(PacketIn packet) {
|
public static void unregisterPacket(String channel, PacketIn packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
List<String> search = new ArrayList<String>();
|
if (pIn.keySet().contains(channel.toLowerCase())) {
|
||||||
search.addAll(pIn.keySet());
|
List<String> search = new ArrayList<String>();
|
||||||
for (String handle : search) if (pIn.get(handle.toLowerCase()).contains(packet)) {
|
search.addAll(pIn.get(channel.toLowerCase()).keySet());
|
||||||
List<PacketIn> list = pIn.get(handle.toLowerCase());
|
for (String handle : search) if (pIn.get(channel.toLowerCase()).get(handle).contains(packet)) {
|
||||||
list.remove(packet);
|
List<PacketIn> list = pIn.get(channel.toLowerCase()).get(handle);
|
||||||
if (list.isEmpty()) {
|
list.remove(packet);
|
||||||
pIn.remove(handle.toLowerCase());
|
if (list.isEmpty()) {
|
||||||
} else {
|
pIn.get(channel.toLowerCase()).remove(handle);
|
||||||
pIn.put(handle.toLowerCase(), list);
|
if (pIn.get(channel.toLowerCase()).isEmpty()) pIn.remove(channel.toLowerCase());
|
||||||
|
} else {
|
||||||
|
pIn.get(channel.toLowerCase()).put(handle, list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -291,32 +298,35 @@ public final class SubDataClient {
|
|||||||
* Register PacketOut to the Network
|
* Register PacketOut to the Network
|
||||||
*
|
*
|
||||||
* @param packet PacketOut to register
|
* @param packet PacketOut to register
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle to bind
|
* @param handle Handle to bind
|
||||||
*/
|
*/
|
||||||
public static void registerPacket(Class<? extends PacketOut> packet, String handle) {
|
public static void registerPacket(Class<? extends PacketOut> packet, String channel, String handle) {
|
||||||
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
if (Util.isNull(packet, handle)) throw new NullPointerException();
|
||||||
pOut.put(packet, handle.toLowerCase());
|
pOut.put(packet, new NamedContainer<String, String>(channel.toLowerCase(), handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregister PacketOut to the Network
|
* Unregister PacketOut to the Network
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param packet PacketOut to unregister
|
* @param packet PacketOut to unregister
|
||||||
*/
|
*/
|
||||||
public static void unregisterPacket(Class<? extends PacketOut> packet) {
|
public static void unregisterPacket(String channel, Class<? extends PacketOut> packet) {
|
||||||
if (Util.isNull(packet)) throw new NullPointerException();
|
if (Util.isNull(packet)) throw new NullPointerException();
|
||||||
pOut.remove(packet);
|
if (pOut.keySet().contains(packet) && pOut.get(packet).name().equalsIgnoreCase(channel)) pOut.remove(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Grab PacketIn Instances via handle
|
* Grab PacketIn Instances via handle
|
||||||
*
|
*
|
||||||
|
* @param channel Packet Channel
|
||||||
* @param handle Handle
|
* @param handle Handle
|
||||||
* @return PacketIn
|
* @return PacketIn
|
||||||
*/
|
*/
|
||||||
public static List<? extends PacketIn> getPacket(String handle) {
|
public static List<? extends PacketIn> getPacket(String channel, String handle) {
|
||||||
if (Util.isNull(handle)) throw new NullPointerException();
|
if (Util.isNull(handle)) throw new NullPointerException();
|
||||||
return new ArrayList<PacketIn>(pIn.get(handle.toLowerCase()));
|
return new ArrayList<PacketIn>(pIn.get(channel.toLowerCase()).get(handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -382,7 +392,8 @@ public final class SubDataClient {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
YAMLSection contents = packet.generate();
|
YAMLSection contents = packet.generate();
|
||||||
json.set("h", pOut.get(packet.getClass()));
|
json.set("n", pOut.get(packet.getClass()).name());
|
||||||
|
json.set("h", pOut.get(packet.getClass()).get());
|
||||||
json.set("v", packet.getVersion().toString());
|
json.set("v", packet.getVersion().toString());
|
||||||
if (contents != null) json.set("c", contents);
|
if (contents != null) json.set("c", contents);
|
||||||
return json;
|
return json;
|
||||||
@ -401,10 +412,10 @@ public final class SubDataClient {
|
|||||||
*/
|
*/
|
||||||
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
|
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
|
||||||
if (!data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
|
if (!data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
|
||||||
if (!pIn.keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("h"));
|
if (!pIn.keySet().contains(data.getRawString("n")) || !pIn.get(data.getRawString("n")).keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("n") + ':' + data.getRawString("h"));
|
||||||
|
|
||||||
List<PacketIn> list = new ArrayList<PacketIn>();
|
List<PacketIn> list = new ArrayList<PacketIn>();
|
||||||
for (PacketIn packet : pIn.get(data.getRawString("h"))) {
|
for (PacketIn packet : pIn.get(data.getRawString("n")).get(data.getRawString("h"))) {
|
||||||
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
if (packet.isCompatible(new Version(data.getRawString("v")))) {
|
||||||
list.add(packet);
|
list.add(packet);
|
||||||
} else {
|
} else {
|
||||||
|
@ -341,6 +341,15 @@ public final class SubAPI {
|
|||||||
return plugin.version;
|
return plugin.version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the SubServers Build Signature
|
||||||
|
*
|
||||||
|
* @return SubServers Build Signature (or null if unsigned)
|
||||||
|
*/
|
||||||
|
public Version getWrapperBuild() {
|
||||||
|
return (SubPlugin.class.getPackage().getSpecificationTitle() != null)?new Version(SubPlugin.class.getPackage().getSpecificationTitle()):null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the BungeeCord Version
|
* Gets the BungeeCord Version
|
||||||
*
|
*
|
||||||
|
@ -71,28 +71,22 @@ public final class SubCommand extends CommandX {
|
|||||||
if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
|
if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
|
||||||
sender.sendMessages(printHelp());
|
sender.sendMessages(printHelp());
|
||||||
} else if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("ver")) {
|
} else if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("ver")) {
|
||||||
boolean build = false;
|
|
||||||
try {
|
|
||||||
Field f = Version.class.getDeclaredField("type");
|
|
||||||
f.setAccessible(true);
|
|
||||||
build = f.get(plugin.version) != VersionType.SNAPSHOT && SubPlugin.class.getPackage().getSpecificationTitle() != null;
|
|
||||||
f.setAccessible(false);
|
|
||||||
} catch (Exception e) {}
|
|
||||||
|
|
||||||
sender.sendMessage("SubServers > These are the platforms and versions that are running SubServers.Sync:");
|
sender.sendMessage("SubServers > These are the platforms and versions that are running SubServers.Sync:");
|
||||||
sender.sendMessage(" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ',');
|
sender.sendMessage(" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ',');
|
||||||
sender.sendMessage(" Java " + System.getProperty("java.version") + ',');
|
sender.sendMessage(" Java " + System.getProperty("java.version") + ',');
|
||||||
sender.sendMessage(" " + plugin.getBungeeName() + ((plugin.isPatched)?" [Patched] ":" ") + net.md_5.bungee.Bootstrap.class.getPackage().getImplementationVersion() + ',');
|
sender.sendMessage(" " + plugin.getBungeeName() + ((plugin.isPatched)?" [Patched] ":" ") + net.md_5.bungee.Bootstrap.class.getPackage().getImplementationVersion() + ',');
|
||||||
sender.sendMessage(" SubServers.Sync v" + SubPlugin.version.toExtendedString() + ((build)?" (" + SubPlugin.class.getPackage().getSpecificationTitle() + ')':""));
|
sender.sendMessage(" SubServers.Sync v" + SubPlugin.version.toExtendedString() + ((plugin.api.getWrapperBuild() != null)?" (" + plugin.api.getWrapperBuild() + ')':""));
|
||||||
sender.sendMessage("");
|
sender.sendMessage("");
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = plugin.version;
|
Version updversion = plugin.version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
@ -49,8 +49,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
|
|||||||
public boolean redis = false;
|
public boolean redis = false;
|
||||||
public final SubAPI api = new SubAPI(this);
|
public final SubAPI api = new SubAPI(this);
|
||||||
public SubDataClient subdata = null;
|
public SubDataClient subdata = null;
|
||||||
//public static final Version version = Version.fromString("2.13b");
|
public static final Version version = Version.fromString("2.13b");
|
||||||
public static final Version version = new Version(Version.fromString("2.13b"), VersionType.SNAPSHOT, (SubPlugin.class.getPackage().getSpecificationTitle() == null)?"custom":SubPlugin.class.getPackage().getSpecificationTitle()); // TODO Snapshot Version
|
|
||||||
|
|
||||||
public final boolean isPatched;
|
public final boolean isPatched;
|
||||||
public long lastReload = -1;
|
public long lastReload = -1;
|
||||||
@ -135,11 +134,13 @@ public final class SubPlugin extends BungeeCord implements Listener {
|
|||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
|
||||||
|
List<Version> versions = new LinkedList<Version>();
|
||||||
|
|
||||||
Version updversion = version;
|
Version updversion = version;
|
||||||
int updcount = 0;
|
int updcount = 0;
|
||||||
for (YAMLSection tag : tags.getSectionList("tags")) {
|
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
|
||||||
Version version = Version.fromString(tag.getString("ref").substring(10));
|
Collections.sort(versions);
|
||||||
|
for (Version version : versions) {
|
||||||
if (version.compareTo(updversion) > 0) {
|
if (version.compareTo(updversion) > 0) {
|
||||||
updversion = version;
|
updversion = version;
|
||||||
updcount++;
|
updcount++;
|
||||||
|
Loading…
Reference in New Issue
Block a user