diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java index ba2aa546..0250f450 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java @@ -71,7 +71,7 @@ public class ExternalSubCreator extends SubCreator { try { if (file.isDirectory() && !file.getName().endsWith(".x")) { ObjectMap config = (new UniversalFile(file, "template.yml").exists())?new YAMLConfig(new UniversalFile(file, "template.yml")).get().getMap("Template", new ObjectMap()):new ObjectMap(); - ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap()), config.getMap("Settings", new ObjectMap())); + ServerTemplate template = loadTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap()), config.getMap("Settings", new ObjectMap())); templatesR.put(file.getName().toLowerCase(), template); if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display")); } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java index 61d3e84e..d75950f7 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java @@ -123,7 +123,7 @@ public class InternalSubCreator extends SubCreator { } server.setAll(template.getConfigOptions()); try { - Logger.get(prefix).info("Loading Template: " + template.getDisplayName()); + Logger.get(prefix).info("Loading" + ((template.isDynamic())?" Dynamic":"") + " Template: " + template.getDisplayName()); if (template.getBuildOptions().getBoolean("Update-Files", false)) updateDirectory(template.getDirectory(), dir); else Util.copyDirectory(template.getDirectory(), dir); @@ -369,7 +369,7 @@ public class InternalSubCreator extends SubCreator { try { if (file.isDirectory() && !file.getName().endsWith(".x")) { ObjectMap config = (new UniversalFile(file, "template.yml").exists()) ? new YAMLConfig(new UniversalFile(file, "template.yml")).get().getMap("Template", new ObjectMap()) : new ObjectMap(); - ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap()), config.getMap("Settings", new ObjectMap())); + ServerTemplate template = loadTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap()), config.getMap("Settings", new ObjectMap())); templates.put(file.getName().toLowerCase(), template); if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display")); } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java index 83f6b0ed..77a43291 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java @@ -18,6 +18,7 @@ import java.util.*; */ public abstract class SubCreator { public static class ServerTemplate { + private final boolean dynamic; private String name; private String nick = null; private boolean enabled; @@ -31,11 +32,17 @@ public abstract class SubCreator { * Create a SubCreator Template * * @param name Template Name + * @param enabled Template Enabled Status + * @param icon Template Item Icon Name * @param directory Template Directory * @param build Build Options * @param options Configuration Options */ public ServerTemplate(String name, boolean enabled, String icon, File directory, ObjectMap build, ObjectMap options) { + this(name, enabled, icon, directory, build, options, true); + } + + private ServerTemplate(String name, boolean enabled, String icon, File directory, ObjectMap build, ObjectMap options, boolean dynamic) { if (Util.isNull(name, enabled, directory, build, options)) throw new NullPointerException(); if (name.contains(" ")) throw new InvalidTemplateException("Template names cannot have spaces: " + name); this.name = name; @@ -45,6 +52,7 @@ public abstract class SubCreator { this.type = (build.contains("Server-Type"))?ServerType.valueOf(build.getRawString("Server-Type").toUpperCase()):ServerType.CUSTOM; this.build = build; this.options = options; + this.dynamic = dynamic; } /** @@ -150,6 +158,15 @@ public abstract class SubCreator { return getBuildOptions().getBoolean("Can-Update", false); } + /** + * Get whether this Template was generated by a SubCreator instance + * + * @return Custom Status + */ + public boolean isDynamic() { + return dynamic; + } + /** * Get the Build Options for this Template * @@ -490,6 +507,20 @@ public abstract class SubCreator { */ public abstract ServerTemplate getTemplate(String name); + /** + * Create a SubCreator Template + * + * @param name Template Name + * @param enabled Template Enabled Status + * @param icon Template Item Icon Name + * @param directory Template Directory + * @param build Build Options + * @param options Configuration Options + */ + protected ServerTemplate loadTemplate(String name, boolean enabled, String icon, File directory, ObjectMap build, ObjectMap options) { + return new ServerTemplate(name, enabled, icon, directory, build, options, false); + } + /** * Reload SubCreator */ diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExCreateServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExCreateServer.java index e673b5e2..50670752 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExCreateServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExCreateServer.java @@ -91,7 +91,19 @@ public class PacketExCreateServer implements PacketObjectIn, PacketObje } else { data.set(0x0000, tracker); data.set(0x0002, name); - data.set(0x0003, template.getName()); + if (template.isDynamic()) { + ObjectMap template = new ObjectMap<>(); + template.set("name", this.template.getName()); + template.set("display", this.template.getDisplayName()); + template.set("enabled", this.template.isEnabled()); + template.set("icon", this.template.getIcon()); + template.set("dir", this.template.getDirectory().toString()); + template.set("build", this.template.getBuildOptions().clone()); + template.set("def", this.template.getConfigOptions().clone()); + data.set(0x0003, template); + } else { + data.set(0x0003, template.getName()); + } data.set(0x0004, version); data.set(0x0005, port); data.set(0x0006, log); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUploadTemplates.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUploadTemplates.java index 3480336e..801b329b 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUploadTemplates.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUploadTemplates.java @@ -11,6 +11,7 @@ import net.ME1312.SubServers.Bungee.Host.External.ExternalSubCreator; import net.ME1312.SubServers.Bungee.Host.SubCreator; import net.ME1312.SubServers.Bungee.SubProxy; +import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; @@ -39,7 +40,8 @@ public class PacketExUploadTemplates implements PacketObjectIn, PacketO for (String name : templates.getKeys()) { try { UniversalFile dir = new UniversalFile(templatedir, name); - SubCreator.ServerTemplate template = new SubCreator.ServerTemplate(name, templates.getMap(name).getBoolean("enabled"), templates.getMap(name).getRawString("icon"), dir, + SubCreator.ServerTemplate template = Util.reflect(SubCreator.class.getDeclaredMethod("loadTemplate", String.class, boolean.class, String.class, File.class, ObjectMap.class, ObjectMap.class), + ((ExternalHost) client.getHandler()).getCreator(), name, templates.getMap(name).getBoolean("enabled"), templates.getMap(name).getRawString("icon"), dir, templates.getMap(name).getMap("build").clone(), templates.getMap(name).getMap("settings").clone()); map.put(name.toLowerCase(), template); if (!templates.getMap(name).getRawString("display").equals(name)) template.setDisplayName(templates.getMap(name).getRawString("display")); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java index 2a2d60d7..679af393 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java @@ -340,8 +340,8 @@ public final class SubProxy extends BungeeCommon implements Listener { public void reload() throws IOException { List ukeys = new ArrayList(); long begin = Calendar.getInstance().getTime().getTime(); - boolean status; - if (!(status = ready)) resetDate = begin; + boolean status = ready; + if (!status) resetDate = begin; reloading = true; ConfigUpdater.updateConfig(new UniversalFile(dir, "SubServers:config.yml")); @@ -359,9 +359,9 @@ public final class SubProxy extends BungeeCommon implements Listener { !config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391").equals(prevconfig.getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391")) || !config.get().getMap("Settings").getMap("SubData").getRawString("Encryption", "NONE").equals(prevconfig.getMap("Settings").getMap("SubData").getRawString("Encryption", "NONE")) )) { + SubDataServer subdata = this.subdata; subdata.close(); Util.isException(subdata::waitFor); - subdata = null; } SmartFallback.dns_forward = config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("DNS-Forward", false); @@ -553,7 +553,31 @@ public final class SubProxy extends BungeeCommon implements Listener { running = ready = true; legServers.clear(); - // Initialize SubData + int plugins = 0; + if (status) { + List listeners = api.reloadListeners; + if (listeners.size() > 0) { + Logger.get("SubServers").info("Reloading SubAPI Plugins..."); + for (Runnable obj : listeners) { + try { + obj.run(); + plugins++; + } catch (Throwable e) { + new InvocationTargetException(e, "Problem " + ((status)?"reloading":"enabling") + " plugin").printStackTrace(); + } + } + } + + for (Host host : api.getHosts().values()) if (host instanceof ClientHandler && ((ClientHandler) host).getSubData()[0] != null) ((SubDataClient) ((ClientHandler) host).getSubData()[0]).sendPacket(new PacketOutExReload(null)); + for (Server server : api.getServers().values()) if (server.getSubData()[0] != null) ((SubDataClient) server.getSubData()[0]).sendPacket(new PacketOutExReload(null)); + } + + reloading = false; + Logger.get("SubServers").info(((plugins > 0)?plugins+" Plugin"+((plugins == 1)?"":"s")+", ":"") + hosts + " Host"+((hosts == 1)?"":"s")+", " + servers + " Server"+((servers == 1)?"":"s")+", and " + subservers + " SubServer"+((subservers == 1)?"":"s")+" "+((status)?"re":"")+"loaded in " + new DecimalFormat("0.000").format((Calendar.getInstance().getTime().getTime() - begin) / 1000D) + "s"); + if (status) startDataListeners(); + } + + private void startDataListeners() throws IOException { if (subdata == null) { subprotocol.unregisterCipher("AES"); subprotocol.unregisterCipher("AES-128"); @@ -605,7 +629,9 @@ public final class SubProxy extends BungeeCommon implements Listener { subdata = subprotocol.open((config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[0].equals("0.0.0.0"))? null:InetAddress.getByName(config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[0]), Integer.parseInt(config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[1]), cipher); - } // Add new entries to Allowed-Connections + } + + // Add new entries to Allowed-Connections for (String s : config.get().getMap("Settings").getMap("SubData").getStringList("Whitelist", new ArrayList())) { try { subdata.whitelist(s); @@ -613,28 +639,6 @@ public final class SubProxy extends BungeeCommon implements Listener { e.printStackTrace(); } } - - int plugins = 0; - if (status) { - List listeners = api.reloadListeners; - if (listeners.size() > 0) { - Logger.get("SubServers").info("Reloading SubAPI Plugins..."); - for (Runnable obj : listeners) { - try { - obj.run(); - plugins++; - } catch (Throwable e) { - new InvocationTargetException(e, "Problem " + ((status)?"reloading":"enabling") + " plugin").printStackTrace(); - } - } - } - - for (Host host : api.getHosts().values()) if (host instanceof ClientHandler && ((ClientHandler) host).getSubData()[0] != null) ((SubDataClient) ((ClientHandler) host).getSubData()[0]).sendPacket(new PacketOutExReload(null)); - for (Server server : api.getServers().values()) if (server.getSubData()[0] != null) ((SubDataClient) server.getSubData()[0]).sendPacket(new PacketOutExReload(null)); - } - - reloading = false; - Logger.get("SubServers").info(((plugins > 0)?plugins+" Plugin"+((plugins == 1)?"":"s")+", ":"") + hosts + " Host"+((hosts == 1)?"":"s")+", " + servers + " Server"+((servers == 1)?"":"s")+", and " + subservers + " SubServer"+((subservers == 1)?"":"s")+" "+((status)?"re":"")+"loaded in " + new DecimalFormat("0.000").format((Calendar.getInstance().getTime().getTime() - begin) / 1000D) + "s"); } @Override @@ -650,6 +654,7 @@ public final class SubProxy extends BungeeCommon implements Listener { getLogger().warning("UPnP service is unavailable. SubServers can't port-forward for you from this device."); } + startDataListeners(); super.startListeners(); if (autorun != null && autorun.size() > 0) { @@ -819,9 +824,10 @@ public final class SubProxy extends BungeeCommon implements Listener { rPlayerLinkP.clear(); rPlayers.clear(); - try { + if (subdata != null) try { + SubDataServer subdata = this.subdata; subdata.close(); - Thread.sleep(500); + subdata.waitFor(); } catch (InterruptedException | IOException e) {} if (shutdown) super.isRunning = false; diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubNetworkConnectEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubNetworkConnectEvent.java index d33b8f7a..d1e84eaf 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubNetworkConnectEvent.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubNetworkConnectEvent.java @@ -1,7 +1,7 @@ package net.ME1312.SubServers.Client.Bukkit.Event; import net.ME1312.Galaxi.Library.Util; -import net.ME1312.SubData.Client.SubDataClient; +import net.ME1312.SubData.Client.DataClient; import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent; import org.bukkit.event.Event; @@ -11,12 +11,12 @@ import org.bukkit.event.HandlerList; * SubData Network Connect Event */ public class SubNetworkConnectEvent extends Event implements SubEvent { - private SubDataClient network; + private DataClient network; /** * SubData Network Connect Event */ - public SubNetworkConnectEvent(SubDataClient network) { + public SubNetworkConnectEvent(DataClient network) { if (Util.isNull(network)) throw new NullPointerException(); this.network = network; } @@ -26,7 +26,7 @@ public class SubNetworkConnectEvent extends Event implements SubEvent { * * @return SubData Network */ - public SubDataClient getNetwork() { + public DataClient getNetwork() { return network; } diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubNetworkConnectEvent.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubNetworkConnectEvent.java index f8d560ca..65df55ef 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubNetworkConnectEvent.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubNetworkConnectEvent.java @@ -1,7 +1,7 @@ package net.ME1312.SubServers.Client.Sponge.Event; import net.ME1312.Galaxi.Library.Util; -import net.ME1312.SubData.Client.SubDataClient; +import net.ME1312.SubData.Client.DataClient; import net.ME1312.SubServers.Client.Sponge.Library.SubEvent; import org.spongepowered.api.event.cause.Cause; @@ -11,12 +11,12 @@ import org.spongepowered.api.event.impl.AbstractEvent; * SubData Network Connect Event */ public class SubNetworkConnectEvent extends AbstractEvent implements SubEvent { - private SubDataClient network; + private DataClient network; /** * SubData Network Connect Event */ - public SubNetworkConnectEvent(SubDataClient network) { + public SubNetworkConnectEvent(DataClient network) { if (Util.isNull(network)) throw new NullPointerException(); this.network = network; } @@ -26,7 +26,7 @@ public class SubNetworkConnectEvent extends AbstractEvent implements SubEvent { * * @return SubData Network */ - public SubDataClient getNetwork() { + public DataClient getNetwork() { return network; } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Event/SubNetworkConnectEvent.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Event/SubNetworkConnectEvent.java index 2e904679..51cf391d 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Event/SubNetworkConnectEvent.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Event/SubNetworkConnectEvent.java @@ -2,18 +2,18 @@ package net.ME1312.SubServers.Host.Event; import net.ME1312.Galaxi.Event.Event; import net.ME1312.Galaxi.Library.Util; -import net.ME1312.SubData.Client.SubDataClient; +import net.ME1312.SubData.Client.DataClient; /** * SubData Network Connect Event */ public class SubNetworkConnectEvent extends Event { - private SubDataClient network; + private DataClient network; /** * SubData Network Connect Event */ - public SubNetworkConnectEvent(SubDataClient network) { + public SubNetworkConnectEvent(DataClient network) { if (Util.isNull(network)) throw new NullPointerException(); this.network = network; } @@ -23,7 +23,7 @@ public class SubNetworkConnectEvent extends Event { * * @return SubData Network */ - public SubDataClient getNetwork() { + public DataClient getNetwork() { return network; } } \ No newline at end of file diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreatorImpl.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreatorImpl.java index 79bdee58..37d8adf2 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreatorImpl.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreatorImpl.java @@ -42,6 +42,7 @@ public class SubCreatorImpl { private TreeMap thread; public static class ServerTemplate extends SubCreator.ServerTemplate { + private final boolean dynamic; private String name; private String nick = null; private boolean enabled; @@ -55,11 +56,17 @@ public class SubCreatorImpl { * Create a SubCreator Template * * @param name Template Name + * @param enabled Template Enabled Status + * @param icon Template Item Icon Name * @param directory Template Directory * @param build Build Options * @param options Configuration Options */ public ServerTemplate(String name, boolean enabled, String icon, File directory, ObjectMap build, ObjectMap options) { + this(name, enabled, icon, directory, build, options, true); + } + + private ServerTemplate(String name, boolean enabled, String icon, File directory, ObjectMap build, ObjectMap options, boolean dynamic) { super(toRaw(name, enabled, icon, directory, build, options)); if (name.contains(" ")) throw new InvalidTemplateException("Template names cannot have spaces: " + name); this.name = name; @@ -69,6 +76,7 @@ public class SubCreatorImpl { this.type = (build.contains("Server-Type"))?ServerType.valueOf(build.getRawString("Server-Type").toUpperCase()):ServerType.CUSTOM; this.build = build; this.options = options; + this.dynamic = dynamic; } /** @@ -175,6 +183,15 @@ public class SubCreatorImpl { return getBuildOptions().getBoolean("Can-Update", false); } + /** + * Get whether this Template was generated by a SubCreator instance + * + * @return Custom Status + */ + public boolean isDynamic() { + return dynamic; + } + /** * Get the Build Options for this Template * @@ -201,6 +218,8 @@ public class SubCreatorImpl { tinfo.set("display", name); tinfo.set("icon", icon); tinfo.set("type", (build.contains("Server-Type"))?ServerType.valueOf(build.getRawString("Server-Type").toUpperCase()):ServerType.CUSTOM); + tinfo.set("version-req", build.getBoolean("Require-Version", false)); + tinfo.set("can-update", build.getBoolean("Can-Update", false)); return tinfo; } } @@ -218,7 +237,7 @@ public class SubCreatorImpl { try { if (file.isDirectory() && !file.getName().endsWith(".x")) { ObjectMap config = (new UniversalFile(file, "template.yml").exists())?new YAMLConfig(new UniversalFile(file, "template.yml")).get().getMap("Template", new ObjectMap()):new ObjectMap(); - ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap()), config.getMap("Settings", new ObjectMap())); + ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap()), config.getMap("Settings", new ObjectMap()), false); templates.put(file.getName().toLowerCase(), template); if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display")); } @@ -300,7 +319,7 @@ public class SubCreatorImpl { } server.setAll(template.getConfigOptions()); try { - log.logger.info.println("Loading Template: " + template.getDisplayName()); + log.logger.info.println("Loading" + ((template.isDynamic())?" Dynamic":"") + " Template: " + template.getDisplayName()); ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketOutExLogMessage(address, "Loading Template: " + template.getDisplayName())); if (template.getBuildOptions().getBoolean("Update-Files", false)) updateDirectory(template.getDirectory(), dir); else Util.copyDirectory(template.getDirectory(), dir); diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExCreateServer.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExCreateServer.java index b784e52e..ef5f0cdf 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExCreateServer.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExCreateServer.java @@ -1,6 +1,7 @@ package net.ME1312.SubServers.Host.Network.Packet; import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Map.ObjectMapValue; import net.ME1312.Galaxi.Library.Util; import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubData.Client.Protocol.PacketObjectIn; @@ -8,7 +9,9 @@ import net.ME1312.SubData.Client.Protocol.PacketObjectOut; import net.ME1312.SubData.Client.SubDataSender; import net.ME1312.SubServers.Host.ExHost; import net.ME1312.SubServers.Host.Executable.SubCreatorImpl; +import net.ME1312.SubServers.Host.Executable.SubCreatorImpl.ServerTemplate; +import java.io.File; import java.util.Map; import java.util.UUID; @@ -74,7 +77,7 @@ public class PacketExCreateServer implements PacketObjectIn, PacketObje @Override public void receive(SubDataSender client, ObjectMap data) { - UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); try { if (data.contains(0x0001)) { if (data.contains(0x0001)) { @@ -84,16 +87,30 @@ public class PacketExCreateServer implements PacketObjectIn, PacketObje } client.sendPacket(new PacketExCreateServer(1, null, tracker)); } else { - String name = data.getRawString(0x0002); - String template = data.getRawString(0x0003); - Version version = (data.contains(0x0004)?data.getVersion(0x0004):null); - Integer port = data.getInt(0x0005); - UUID log = data.getUUID(0x0006); - Boolean mode = (data.contains(0x0007)?data.getBoolean(0x0007):null); - UUID player = (data.contains(0x0008)?data.getUUID(0x0008):null); + String name = data.getRawString(0x0002); + ObjectMapValue template = data.get(0x0003); + Version version = (data.contains(0x0004)?data.getVersion(0x0004):null); + Integer port = data.getInt(0x0005); + UUID log = data.getUUID(0x0006); + Boolean mode = (data.contains(0x0007)?data.getBoolean(0x0007):null); + UUID player = (data.contains(0x0008)?data.getUUID(0x0008):null); - SubCreatorImpl.ServerTemplate templateV = host.templates.get(template.toLowerCase()); - if (templateV == null) templateV = host.templatesR.get(template.toLowerCase()); + SubCreatorImpl.ServerTemplate templateV; + + if (template.isString()) { + templateV = host.templates.get(template.asRawString().toLowerCase()); + if (templateV == null) templateV = host.templatesR.get(template.asRawString().toLowerCase()); + } else { + ObjectMap templateM = template.asMap().key(); + templateV = new ServerTemplate( + templateM.getRawString("name"), + templateM.getBoolean("enabled"), + templateM.getRawString("icon"), + new File(templateM.getRawString("dir").replace('/', File.separatorChar)), + templateM.getMap("build"), + templateM.getMap("def")); + templateV.setDisplayName(templateM.getRawString("display")); + } host.creator.create(player, name, templateV, version, port, mode, log, tracker); } diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubNetworkConnectEvent.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubNetworkConnectEvent.java index 7fdb4686..388cd120 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubNetworkConnectEvent.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubNetworkConnectEvent.java @@ -1,7 +1,7 @@ package net.ME1312.SubServers.Sync.Event; import net.ME1312.Galaxi.Library.Util; -import net.ME1312.SubData.Client.SubDataClient; +import net.ME1312.SubData.Client.DataClient; import net.ME1312.SubServers.Sync.Library.SubEvent; import net.md_5.bungee.api.plugin.Event; @@ -10,12 +10,12 @@ import net.md_5.bungee.api.plugin.Event; * SubData Network Connect Event */ public class SubNetworkConnectEvent extends Event implements SubEvent { - private SubDataClient network; + private DataClient network; /** * SubData Network Connect Event */ - public SubNetworkConnectEvent(SubDataClient network) { + public SubNetworkConnectEvent(DataClient network) { if (Util.isNull(network)) throw new NullPointerException(); this.network = network; } @@ -25,7 +25,7 @@ public class SubNetworkConnectEvent extends Event implements SubEvent { * * @return SubData Network */ - public SubDataClient getNetwork() { + public DataClient getNetwork() { return network; } } \ No newline at end of file