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 991f9935..491999bc 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 @@ -3,6 +3,7 @@ import com.google.common.collect.Range; import net.ME1312.Galaxi.Library.*; import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Callback.ReturnCallback; import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Event.SubCreateEvent; import net.ME1312.SubServers.Bungee.Host.*; @@ -94,18 +95,22 @@ public boolean create(UUID player, String name, ServerTemplate template, Version final SubCreateEvent event = new SubCreateEvent(player, host, name, template, version, port); host.plugin.getPluginManager().callEvent(event); if (!event.isCancelled()) { + Container address = new Container<>("$address$"); + ReturnCallback conversion = obj -> convert(obj, new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), + new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", (version != null)?version.toString().replace(" ", "@"):""), + new NamedContainer<>("$address$", address.get()), new NamedContainer<>("$port$", Integer.toString(fport))); + logger.start(); - host.queue(new PacketExCreateServer(name, template, version, port, logger.getExternalAddress(), data -> { + host.queue(new PacketExCreateServer(name, template, version, port, (template.getConfigOptions().contains("Directory"))?conversion.run(template.getConfigOptions().getRawString("Directory")).toString():name, logger.getExternalAddress(), data -> { try { if (data.getInt(0x0001) == 0) { Logger.get(prefix).info("Saving..."); + address.set(data.getRawString(0x0003)); if (host.plugin.exServers.keySet().contains(name.toLowerCase())) host.plugin.exServers.remove(name.toLowerCase()); ObjectMap server = new ObjectMap(); - ObjectMap config = new ObjectMap((Map) convert(data.getMap(0x0002).get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), - new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", (version != null)?version.toString().replace(" ", "@"):""), - new NamedContainer<>("$address$", new ObjectMap((Map) data.getObject(0x0002)).getRawString("\033address", "null")), new NamedContainer<>("$port$", Integer.toString(fport)))); + ObjectMap config = new ObjectMap((Map) conversion.run(data.getMap(0x0002).get())); config.remove("\033address"); @@ -149,7 +154,7 @@ public boolean create(UUID player, String name, ServerTemplate template, Version ew.printStackTrace(); } } else { - Logger.get(prefix).info(data.getString(0x0003)); + Logger.get(prefix).info(data.getString(0x0004)); } } catch (Exception e) { e.printStackTrace(); @@ -216,7 +221,7 @@ public boolean update(UUID player, SubServer server, Version version, Callback build(File dir, ServerTemplate template, List conversion = obj -> convert(obj, new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), + new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", (version != null)?version.toString().replace(" ", "@"):""), + new NamedContainer<>("$address$", host.getAddress().getHostAddress()), new NamedContainer<>("$port$", Integer.toString(port))); + + File dir = (update != null)?new File(update.getFullPath()):new File(host.getPath(), + (template.getConfigOptions().contains("Directory"))?conversion.run(template.getConfigOptions().getRawString("Directory")).toString():name); dir.mkdirs(); ObjectMap server = new ObjectMap(); ObjectMap config; @@ -222,9 +228,7 @@ public void run() { if (host.plugin.exServers.keySet().contains(name.toLowerCase())) host.plugin.exServers.remove(name.toLowerCase()); - config = new ObjectMap((Map) convert(config.get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), - new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", version.toString().replace(" ", "@")), - new NamedContainer<>("$address$", host.getAddress().getHostAddress()), new NamedContainer<>("$port$", Integer.toString(port)))); + config = new ObjectMap((Map) conversion.run(config.get())); server.set("Enabled", true); server.set("Display", ""); 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 ab90caa4..9786476f 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 @@ -22,6 +22,7 @@ public class PacketExCreateServer implements PacketObjectIn, PacketObje private SubCreator.ServerTemplate template; private Version version; private int port; + private String dir; private UUID log; private UUID tracker = null; @@ -47,6 +48,7 @@ public PacketExCreateServer(SubServer server, Version version, UUID log, Callbac this.template = server.getTemplate(); this.version = version; this.port = server.getAddress().getPort(); + this.dir = server.getPath(); this.log = log; this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); callbacks.put(tracker, callback); @@ -59,16 +61,18 @@ public PacketExCreateServer(SubServer server, Version version, UUID log, Callbac * @param template Server Template * @param version Server Version * @param port Server Port Number + * @param directory Server Directory * @param log Log Address * @param callback Callbacks */ @SafeVarargs - public PacketExCreateServer(String name, SubCreator.ServerTemplate template, Version version, int port, UUID log, Callback>... callback) { + public PacketExCreateServer(String name, SubCreator.ServerTemplate template, Version version, int port, String directory, UUID log, Callback>... callback) { if (Util.isNull(name, template, port, log, callback)) throw new NullPointerException(); this.name = name; this.template = template; this.version = version; this.port = port; + this.dir = directory; this.log = log; this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); callbacks.put(tracker, callback); @@ -85,7 +89,8 @@ public ObjectMap send(SubDataClient client) { data.set(0x0003, template.getName()); data.set(0x0004, version); data.set(0x0005, port); - data.set(0x0006, log); + data.set(0x0006, dir); + data.set(0x0007, log); } return data; } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreator.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreator.java index e9b28e6c..3fd19650 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreator.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreator.java @@ -201,18 +201,20 @@ private class CreatorTask extends Thread { private final ServerTemplate template; private final Version version; private final int port; + private final File dir; private final UUID address; private final UUID tracker; private final SubLogger log; private Process process; - private CreatorTask(String name, ServerTemplate template, Version version, int port, UUID address, UUID tracker) { + private CreatorTask(String name, ServerTemplate template, Version version, int port, String dir, UUID address, UUID tracker) { super(SubAPI.getInstance().getAppInfo().getName() + "::SubCreator_Process_Handler(" + name + ')'); this.update = host.servers.getOrDefault(name.toLowerCase(), null); this.name = name; this.template = template; this.version = version; this.port = port; + this.dir = new File(host.host.getRawString("Directory"), dir.replace("$address$", host.config.get().getMap("Settings").getRawString("Server-Bind"))); this.log = new SubLogger(null, this, name + File.separator + ((update == null)?"Creator":"Updater"), address, new Container(true), null); this.address = address; this.tracker = tracker; @@ -351,7 +353,6 @@ private ObjectMap build(File dir, ServerTemplate template, List server; try { @@ -365,12 +366,11 @@ public void run() { log.logger.error.println(e); } ObjectMap config = template.getConfigOptions().clone(); - config.set("\033address", host.config.get().getMap("Settings").getRawString("Server-Bind")); if (server != null) { - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketExCreateServer(0, null, config, tracker)); + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketExCreateServer(0, null, config, host.config.get().getMap("Settings").getRawString("Server-Bind"), tracker)); } else { log.logger.info.println("Couldn't build the server jar. Check the SubCreator logs for more detail."); - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketExCreateServer(-1, "Couldn't build the server jar. Check the SubCreator logs for more detail.", config, tracker)); + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketExCreateServer(-1, "Couldn't build the server jar. Check the SubCreator logs for more detail.", tracker)); } SubCreator.this.thread.remove(name.toLowerCase()); } @@ -387,9 +387,9 @@ public SubCreator(ExHost host) { this.thread = new TreeMap<>(); } - public boolean create(String name, ServerTemplate template, Version version, int port, UUID address, UUID tracker) { - if (Util.isNull(name, template, port, address)) throw new NullPointerException(); - CreatorTask task = new CreatorTask(name, template, version, port, address, tracker); + public boolean create(String name, ServerTemplate template, Version version, int port, String dir, UUID address, UUID tracker) { + if (Util.isNull(name, template, port, dir, address)) throw new NullPointerException(); + CreatorTask task = new CreatorTask(name, template, version, port, dir, address, tracker); this.thread.put(name.toLowerCase(), task); task.start(); return true; 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 09a3f4f7..a47075c8 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 @@ -18,6 +18,7 @@ public class PacketExCreateServer implements PacketObjectIn, PacketObje private int response; private String message; private ObjectMap info; + private String address; private UUID tracker; /** @@ -30,19 +31,35 @@ public PacketExCreateServer(ExHost host) { this.host = host; } + /** + * New PacketCreateServer (Out) + * + * @param response Response ID + * @param message Message + * @param tracker Receiver ID + */ + public PacketExCreateServer(int response, String message, UUID tracker) { + if (Util.isNull(response)) throw new NullPointerException(); + this.response = response; + this.message = message; + this.tracker = tracker; + } + /** * New PacketCreateServer (Out) * * @param response Response ID * @param message Message * @param info Creator Info + * @param address Internal Server Address * @param tracker Receiver ID */ - public PacketExCreateServer(int response, String message, ObjectMap info, UUID tracker) { + public PacketExCreateServer(int response, String message, ObjectMap info, String address, UUID tracker) { if (Util.isNull(response)) throw new NullPointerException(); this.response = response; this.message = message; this.info = info; + this.address = address; this.tracker = tracker; } @@ -51,8 +68,9 @@ public ObjectMap send(SubDataClient client) { ObjectMap data = new ObjectMap(); if (tracker != null) data.set(0x0000, tracker); data.set(0x0001, response); - data.set(0x0002, info); - if (message != null) data.set(0x0003, message); + if (info != null) data.set(0x0002, info); + if (address != null) data.set(0x0003, address); + if (message != null) data.set(0x0004, message); return data; } @@ -66,16 +84,17 @@ public void receive(SubDataClient client, ObjectMap data) { } else { host.creator.terminate(); } - client.sendPacket(new PacketExCreateServer(1, null, null, tracker)); + 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); + String dir = data.getRawString(0x0006); + UUID log = data.getUUID(0x0007); host.creator.create(name, host.templates.get(template.toLowerCase()), version, - port, log, tracker); + port, dir, log, tracker); } } catch (Throwable e) { host.log.error.println(e);