Allow custom formatting of server directories in SubCreator

This commit is contained in:
ME1312 2019-07-29 20:20:38 -04:00
parent c6d611836c
commit 3ff2459258
No known key found for this signature in database
GPG Key ID: FEFFE2F698E88FA8
5 changed files with 60 additions and 27 deletions

View File

@ -3,6 +3,7 @@ package net.ME1312.SubServers.Bungee.Host.External;
import com.google.common.collect.Range; import com.google.common.collect.Range;
import net.ME1312.Galaxi.Library.*; import net.ME1312.Galaxi.Library.*;
import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Callback.ReturnCallback;
import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Event.SubCreateEvent; import net.ME1312.SubServers.Bungee.Event.SubCreateEvent;
import net.ME1312.SubServers.Bungee.Host.*; import net.ME1312.SubServers.Bungee.Host.*;
@ -94,18 +95,22 @@ public class ExternalSubCreator extends SubCreator {
final SubCreateEvent event = new SubCreateEvent(player, host, name, template, version, port); final SubCreateEvent event = new SubCreateEvent(player, host, name, template, version, port);
host.plugin.getPluginManager().callEvent(event); host.plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) { if (!event.isCancelled()) {
Container<String> address = new Container<>("$address$");
ReturnCallback<Object, Object> 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(); 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 { try {
if (data.getInt(0x0001) == 0) { if (data.getInt(0x0001) == 0) {
Logger.get(prefix).info("Saving..."); Logger.get(prefix).info("Saving...");
address.set(data.getRawString(0x0003));
if (host.plugin.exServers.keySet().contains(name.toLowerCase())) if (host.plugin.exServers.keySet().contains(name.toLowerCase()))
host.plugin.exServers.remove(name.toLowerCase()); host.plugin.exServers.remove(name.toLowerCase());
ObjectMap<String> server = new ObjectMap<String>(); ObjectMap<String> server = new ObjectMap<String>();
ObjectMap<String> config = new ObjectMap<String>((Map<String, ?>) convert(data.getMap(0x0002).get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), ObjectMap<String> config = new ObjectMap<String>((Map<String, ?>) conversion.run(data.getMap(0x0002).get()));
new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", (version != null)?version.toString().replace(" ", "@"):""),
new NamedContainer<>("$address$", new ObjectMap<String>((Map<String, ?>) data.getObject(0x0002)).getRawString("\033address", "null")), new NamedContainer<>("$port$", Integer.toString(fport))));
config.remove("\033address"); config.remove("\033address");
@ -149,7 +154,7 @@ public class ExternalSubCreator extends SubCreator {
ew.printStackTrace(); ew.printStackTrace();
} }
} else { } else {
Logger.get(prefix).info(data.getString(0x0003)); Logger.get(prefix).info(data.getString(0x0004));
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -216,7 +221,7 @@ public class ExternalSubCreator extends SubCreator {
ew.printStackTrace(); ew.printStackTrace();
} }
} else { } else {
Logger.get(prefix).info(data.getString(0x0003)); Logger.get(prefix).info(data.getString(0x0004));
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -4,6 +4,7 @@ import com.google.common.collect.Range;
import com.google.gson.Gson; import com.google.gson.Gson;
import net.ME1312.Galaxi.Library.*; import net.ME1312.Galaxi.Library.*;
import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Callback.ReturnCallback;
import net.ME1312.Galaxi.Library.Config.YAMLSection; import net.ME1312.Galaxi.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue; import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.SubServers.Bungee.Event.SubCreateEvent; import net.ME1312.SubServers.Bungee.Event.SubCreateEvent;
@ -199,7 +200,12 @@ public class InternalSubCreator extends SubCreator {
} }
public void run() { public void run() {
File dir = (update != null)?new File(update.getFullPath()):new File(host.getPath(), name); ReturnCallback<Object, Object> 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(); dir.mkdirs();
ObjectMap<String> server = new ObjectMap<String>(); ObjectMap<String> server = new ObjectMap<String>();
ObjectMap<String> config; ObjectMap<String> config;
@ -222,9 +228,7 @@ public class InternalSubCreator extends SubCreator {
if (host.plugin.exServers.keySet().contains(name.toLowerCase())) if (host.plugin.exServers.keySet().contains(name.toLowerCase()))
host.plugin.exServers.remove(name.toLowerCase()); host.plugin.exServers.remove(name.toLowerCase());
config = new ObjectMap<String>((Map<String, ?>) convert(config.get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), config = new ObjectMap<String>((Map<String, ?>) conversion.run(config.get()));
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))));
server.set("Enabled", true); server.set("Enabled", true);
server.set("Display", ""); server.set("Display", "");

View File

@ -22,6 +22,7 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
private SubCreator.ServerTemplate template; private SubCreator.ServerTemplate template;
private Version version; private Version version;
private int port; private int port;
private String dir;
private UUID log; private UUID log;
private UUID tracker = null; private UUID tracker = null;
@ -47,6 +48,7 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
this.template = server.getTemplate(); this.template = server.getTemplate();
this.version = version; this.version = version;
this.port = server.getAddress().getPort(); this.port = server.getAddress().getPort();
this.dir = server.getPath();
this.log = log; this.log = log;
this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID);
callbacks.put(tracker, callback); callbacks.put(tracker, callback);
@ -59,16 +61,18 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
* @param template Server Template * @param template Server Template
* @param version Server Version * @param version Server Version
* @param port Server Port Number * @param port Server Port Number
* @param directory Server Directory
* @param log Log Address * @param log Log Address
* @param callback Callbacks * @param callback Callbacks
*/ */
@SafeVarargs @SafeVarargs
public PacketExCreateServer(String name, SubCreator.ServerTemplate template, Version version, int port, UUID log, Callback<ObjectMap<Integer>>... callback) { public PacketExCreateServer(String name, SubCreator.ServerTemplate template, Version version, int port, String directory, UUID log, Callback<ObjectMap<Integer>>... callback) {
if (Util.isNull(name, template, port, log, callback)) throw new NullPointerException(); if (Util.isNull(name, template, port, log, callback)) throw new NullPointerException();
this.name = name; this.name = name;
this.template = template; this.template = template;
this.version = version; this.version = version;
this.port = port; this.port = port;
this.dir = directory;
this.log = log; this.log = log;
this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID);
callbacks.put(tracker, callback); callbacks.put(tracker, callback);
@ -85,7 +89,8 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
data.set(0x0003, template.getName()); data.set(0x0003, template.getName());
data.set(0x0004, version); data.set(0x0004, version);
data.set(0x0005, port); data.set(0x0005, port);
data.set(0x0006, log); data.set(0x0006, dir);
data.set(0x0007, log);
} }
return data; return data;
} }

View File

@ -201,18 +201,20 @@ public class SubCreator {
private final ServerTemplate template; private final ServerTemplate template;
private final Version version; private final Version version;
private final int port; private final int port;
private final File dir;
private final UUID address; private final UUID address;
private final UUID tracker; private final UUID tracker;
private final SubLogger log; private final SubLogger log;
private Process process; 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 + ')'); super(SubAPI.getInstance().getAppInfo().getName() + "::SubCreator_Process_Handler(" + name + ')');
this.update = host.servers.getOrDefault(name.toLowerCase(), null); this.update = host.servers.getOrDefault(name.toLowerCase(), null);
this.name = name; this.name = name;
this.template = template; this.template = template;
this.version = version; this.version = version;
this.port = port; 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<Boolean>(true), null); this.log = new SubLogger(null, this, name + File.separator + ((update == null)?"Creator":"Updater"), address, new Container<Boolean>(true), null);
this.address = address; this.address = address;
this.tracker = tracker; this.tracker = tracker;
@ -351,7 +353,6 @@ public class SubCreator {
} }
public void run() { public void run() {
File dir = new File(host.host.getRawString("Directory"), (update != null)?update.getDirectory():name);
dir.mkdirs(); dir.mkdirs();
ObjectMap<String> server; ObjectMap<String> server;
try { try {
@ -365,12 +366,11 @@ public class SubCreator {
log.logger.error.println(e); log.logger.error.println(e);
} }
ObjectMap<String> config = template.getConfigOptions().clone(); ObjectMap<String> config = template.getConfigOptions().clone();
config.set("\033address", host.config.get().getMap("Settings").getRawString("Server-Bind"));
if (server != null) { 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 { } else {
log.logger.info.println("Couldn't build the server jar. Check the SubCreator logs for more detail."); 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()); SubCreator.this.thread.remove(name.toLowerCase());
} }
@ -387,9 +387,9 @@ public class SubCreator {
this.thread = new TreeMap<>(); this.thread = new TreeMap<>();
} }
public boolean create(String name, ServerTemplate template, Version version, int port, UUID address, UUID tracker) { public boolean create(String name, ServerTemplate template, Version version, int port, String dir, UUID address, UUID tracker) {
if (Util.isNull(name, template, port, address)) throw new NullPointerException(); if (Util.isNull(name, template, port, dir, address)) throw new NullPointerException();
CreatorTask task = new CreatorTask(name, template, version, port, address, tracker); CreatorTask task = new CreatorTask(name, template, version, port, dir, address, tracker);
this.thread.put(name.toLowerCase(), task); this.thread.put(name.toLowerCase(), task);
task.start(); task.start();
return true; return true;

View File

@ -18,6 +18,7 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
private int response; private int response;
private String message; private String message;
private ObjectMap<String> info; private ObjectMap<String> info;
private String address;
private UUID tracker; private UUID tracker;
/** /**
@ -35,14 +36,30 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
* *
* @param response Response ID * @param response Response ID
* @param message Message * @param message Message
* @param info Creator Info
* @param tracker Receiver ID * @param tracker Receiver ID
*/ */
public PacketExCreateServer(int response, String message, ObjectMap<String> info, UUID tracker) { 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<String> info, String address, UUID tracker) {
if (Util.isNull(response)) throw new NullPointerException(); if (Util.isNull(response)) throw new NullPointerException();
this.response = response; this.response = response;
this.message = message; this.message = message;
this.info = info; this.info = info;
this.address = address;
this.tracker = tracker; this.tracker = tracker;
} }
@ -51,8 +68,9 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
ObjectMap<Integer> data = new ObjectMap<Integer>(); ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker); if (tracker != null) data.set(0x0000, tracker);
data.set(0x0001, response); data.set(0x0001, response);
data.set(0x0002, info); if (info != null) data.set(0x0002, info);
if (message != null) data.set(0x0003, message); if (address != null) data.set(0x0003, address);
if (message != null) data.set(0x0004, message);
return data; return data;
} }
@ -66,16 +84,17 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
} else { } else {
host.creator.terminate(); host.creator.terminate();
} }
client.sendPacket(new PacketExCreateServer(1, null, null, tracker)); client.sendPacket(new PacketExCreateServer(1, null, tracker));
} else { } else {
String name = data.getRawString(0x0002); String name = data.getRawString(0x0002);
String template = data.getRawString(0x0003); String template = data.getRawString(0x0003);
Version version = (data.contains(0x0004)?data.getVersion(0x0004):null); Version version = (data.contains(0x0004)?data.getVersion(0x0004):null);
Integer port = data.getInt(0x0005); 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, host.creator.create(name, host.templates.get(template.toLowerCase()), version,
port, log, tracker); port, dir, log, tracker);
} }
} catch (Throwable e) { } catch (Throwable e) {
host.log.error.println(e); host.log.error.println(e);