diff --git a/Artifacts/SubServers.Bungee.jar b/Artifacts/SubServers.Bungee.jar index 8c11aced..ab09925d 100644 Binary files a/Artifacts/SubServers.Bungee.jar and b/Artifacts/SubServers.Bungee.jar differ diff --git a/Artifacts/SubServers.Client.Bukkit.jar b/Artifacts/SubServers.Client.Bukkit.jar index dab8edd8..d728902b 100644 Binary files a/Artifacts/SubServers.Client.Bukkit.jar and b/Artifacts/SubServers.Client.Bukkit.jar differ 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 3a644215..27944607 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 @@ -4,11 +4,13 @@ import net.ME1312.SubServers.Bungee.Event.SubCreateEvent; import net.ME1312.SubServers.Bungee.Host.Executable; import net.ME1312.SubServers.Bungee.Host.Host; import net.ME1312.SubServers.Bungee.Host.SubCreator; +import net.ME1312.SubServers.Bungee.Library.Config.YAMLConfig; import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; import net.ME1312.SubServers.Bungee.Library.Container; import net.ME1312.SubServers.Bungee.Library.UniversalFile; import net.ME1312.SubServers.Bungee.Library.Util; import net.ME1312.SubServers.Bungee.Library.Version.Version; +import net.ME1312.SubServers.Bungee.SubPlugin; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -27,6 +29,7 @@ import java.util.UUID; public class InternalSubCreator extends SubCreator { private InternalHost host; private String gitBash; + private Process process = null; private Thread thread = null; public InternalSubCreator(Host host, String gitBash) { @@ -370,7 +373,15 @@ public class InternalSubCreator extends SubCreator { try { GenerateSpigotYAML(dir); GenerateProperties(dir, port); - } catch (IOException e) { + new UniversalFile(dir, "plugins:SubServers").mkdirs(); + Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/bukkit.jar", new UniversalFile(dir, "plugins:SubServers.Client.jar").getPath()); + Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/bukkit.yml", new UniversalFile(dir, "plugins:Subservers:config.yml").getPath()); + YAMLConfig config = new YAMLConfig(new UniversalFile(dir, "plugins:Subservers:config.yml")); + config.get().getSection("Settings").getSection("SubData").set("Name", name); + config.get().getSection("Settings").getSection("SubData").set("Address", host.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Address")); + config.get().getSection("Settings").getSection("SubData").set("Password", host.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password")); + config.save(); + } catch (Exception e) { e.printStackTrace(); } @@ -426,7 +437,7 @@ public class InternalSubCreator extends SubCreator { OutputStream output = null; try { input = new FileInputStream(new UniversalFile(host.plugin.dir, "SubServers:build.sh")); - output = new FileOutputStream(new File(dir, "build-subserver.sh")); + output = new FileOutputStream(new File(dir, "build.sh")); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = input.read(buf)) > 0) { @@ -439,39 +450,39 @@ public class InternalSubCreator extends SubCreator { output.close(); } - if (!(new File(dir, "build-subserver.sh").exists())) { - System.out.println("SubCreator > Problem Copying build-subserver.sh!"); + if (!(new File(dir, "build.sh").exists())) { + System.out.println(host.getName() + "/Creator > Problem Copying build.sh!"); } else { File gitBash = new File(this.gitBash, "bin" + File.separatorChar + "bash.exe"); if (!(System.getProperty("os.name").toLowerCase().indexOf("win") >= 0)) { - Process process1 = Runtime.getRuntime().exec("chmod +x build-subserver.sh", null, dir); + Process process = Runtime.getRuntime().exec("chmod +x build.sh", null, dir); try { - process1.waitFor(); + process.waitFor(); Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } - if (process1.exitValue() != 0) { - System.out.println("SubCreator > Problem Setting Executable Permissions for build-subserver.sh"); - System.out.println("SubCreator > This may cause errors in the Build Process"); + if (process.exitValue() != 0) { + System.out.println(host.getName() + "/Creator > Problem Setting Executable Permissions for build.sh"); + System.out.println(host.getName() + "/Creator > This may cause errors in the Build Process"); } } - Process process2 = Runtime.getRuntime().exec((System.getProperty("os.name").toLowerCase().indexOf("win") >= 0)? - "\"" + gitBash + "\" --login -i -c \"bash build-subserver.sh " + version.toString() + " " + type.toString().toLowerCase() + "\"" - :("bash build-subserver.sh " + version.toString() + " " + type.toString().toLowerCase() + " " + System.getProperty("user.home")), null, dir); - InternalSubLogger read = new InternalSubLogger(process2.getInputStream(), host.getName() + "/Creator", new Container(host.plugin.config.get().getSection("Settings").getBoolean("Log-Creator")), new File(dir, "SubCreator-" + type.toString() + "-" + version.toString().replace("::", "@") + ".log")); + this.process = Runtime.getRuntime().exec((System.getProperty("os.name").toLowerCase().indexOf("win") >= 0)? + "\"" + gitBash + "\" --login -i -c \"bash build.sh " + version.toString() + " " + type.toString().toLowerCase() + "\"" + :("bash build.sh " + version.toString() + " " + type.toString().toLowerCase() + " " + System.getProperty("user.home")), null, dir); + InternalSubLogger read = new InternalSubLogger(this.process.getInputStream(), host.getName() + "/Creator", new Container(host.plugin.config.get().getSection("Settings").getBoolean("Log-Creator")), new File(dir, "SubCreator-" + type.toString() + "-" + version.toString().replace("::", "@") + ".log")); read.start(); try { - process2.waitFor(); + this.process.waitFor(); Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } - if (process2.exitValue() == 0) { + if (this.process.exitValue() == 0) { if (host.plugin.exServers.keySet().contains(name.toLowerCase())) host.plugin.exServers.remove(name.toLowerCase()); - host.addSubServer(player, name, true, port, "&aThis is a SubServer", true, new UniversalFile(".:" + name).getPath(), exec, "stop", true, false, false, false, false); + host.addSubServer(player, name, true, port, "&aThis is a SubServer", true, "." + File.separatorChar + name, exec, "stop", true, false, false, false, false); YAMLSection server = new YAMLSection(); server.set("Enabled", true); @@ -479,7 +490,7 @@ public class InternalSubCreator extends SubCreator { server.set("Port", port); server.set("Motd", "&aThis is a SubServer"); server.set("Log", true); - server.set("Directory", new UniversalFile(".:" + name)); + server.set("Directory", "." + File.separatorChar + name); server.set("Executable", exec.toString()); server.set("Stop-Command", "stop"); server.set("Run-On-Launch", false); @@ -490,7 +501,7 @@ public class InternalSubCreator extends SubCreator { host.plugin.config.save(); } else { - System.out.println("SubCreator > build-subserver.sh exited with an errors. Please try again."); + System.out.println(host.getName() + "/Creator build.sh exited with an errors. Please try again."); } } } catch (IOException e) { @@ -512,6 +523,15 @@ public class InternalSubCreator extends SubCreator { } else return false; } + @Override + public void terminate() { + if (process != null && this.process.isAlive()) { + process.destroyForcibly(); + } else if (thread != null && this.thread.isAlive()) { + thread.interrupt(); + } + } + @Override public void waitFor() throws InterruptedException { while (thread != null && thread.isAlive()) { 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 1f2d3377..e9fd4376 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java @@ -16,16 +16,63 @@ public abstract class SubCreator { SPONGE, } + /** + * Create a SubServer + * + * @param player Player Creating + * @param name Server Name + * @param type Server Type + * @param version Server Version + * @param memory Server Memory Amount (in MB) + * @param port Server Port Number + * @return Success Status + */ public abstract boolean create(UUID player, String name, ServerType type, Version version, int memory, int port); + + /** + * Create a SubServer + * + * @param name Server Name + * @param type Server Type + * @param version Server Version + * @param memory Server Memory Amount (in MB) + * @param port Server Port Number + * @return Success Status + */ public boolean create(String name, ServerType type, Version version, int memory, int port) { return create(null, name, type, version, memory, port); } + /** + * Terminate SubCreator + */ + public abstract void terminate(); + + /** + * Wait for SubCreator to Finish + * + * @throws InterruptedException + */ public abstract void waitFor() throws InterruptedException; + /** + * Gets the host this creator belongs to + * + * @return Host + */ public abstract Host getHost(); + /** + * Gets the Git Bash install directory + * + * @return Git Bash Directory + */ public abstract String getGitBashDirectory(); + /** + * Gets the status of SubCreator + * + * @return SubCreator Status + */ public abstract boolean isBusy(); } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/build.sh b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/build.sh index 43e15fc0..613b432d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/build.sh +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/build.sh @@ -7,13 +7,13 @@ if [ -z "$1" ] then echo ERROR: No Build Version Supplied - rm -Rf build-subserver.sh + rm -Rf $0 exit 1 fi if [ -z "$2" ] then echo ERROR: No Server Software Supplied - rm -Rf build-subserver.sh + rm -Rf $0 exit 1 fi echo ---------- SERVER BUILD START ---------- @@ -25,7 +25,7 @@ if [ $2 == bukkit ] || [ $2 == spigot ] echo Downloaded Buildtools! else echo ERROR: Failed Downloading Buildtools. Is SpigotMC.org down? - rm -Rf build-subserver.sh + rm -Rf $0 exit 3 fi if [ -d "Buildtools" ] @@ -55,13 +55,13 @@ if [ $2 == bukkit ] || [ $2 == spigot ] rm -Rf BuildTools.jar rm -Rf Buildtools echo ---------- END SERVER BUILD ---------- - rm -Rf build-subserver.sh + rm -Rf $0 exit 0 else echo ERROR: Buildtools exited with an error. Please try again rm -Rf BuildTools.jar rm -Rf Buildtools - rm -Rf build-subserver.sh + rm -Rf $0 exit 4 fi else @@ -90,24 +90,24 @@ else echo Cleaning Up... rm -Rf Buildtools echo ---------- END SERVER BUILD ---------- - rm -Rf build-subserver.sh + rm -Rf $0 exit 0 else echo ERROR: Failed Applying Patch. rm -Rf Buildtools - rm -Rf build-subserver.sh + rm -Rf $0 exit 5 fi else echo ERROR: Failed Downloading Patch. Is Github.com down? rm -Rf Buildtools - rm -Rf build-subserver.sh + rm -Rf $0 exit 4 fi else echo ERROR: Failed Downloading Jarfile. Is Minecraft.net down? rm -Rf Buildtools - rm -Rf build-subserver.sh + rm -Rf $0 exit 3 fi else @@ -129,26 +129,26 @@ else rm -Rf forge-${version[0]}-installer.jar.log mv -f forge-${version[0]}-universal.jar Forge.jar echo ---------- END SERVER BUILD ---------- - rm -Rf build-subserver.sh + rm -Rf $0 exit 0 else echo ERROR: Failed Downloading Jarfile. Is MinecraftForge.net down? rm -Rf forge-${version[0]}-installer.jar rm -Rf forge-${version[0]}-installer.jar.log rm -Rf forge-${version[0]}-universal.jar - rm -Rf build-subserver.sh + rm -Rf $0 exit 5 fi else echo ERROR: Failed Installing Forge. rm -Rf forge-${version[0]}-installer.jar rm -Rf forge-${version[0]}-installer.jar.log - rm -Rf build-subserver.sh + rm -Rf $0 exit 4 fi else echo ERROR: Failed Downloading Jarfile. Is MinecraftForge.net down? - rm -Rf build-subserver.sh + rm -Rf $0 exit 3 fi fi diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketAuthorization.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketAuthorization.java index 62113ec5..03ef063f 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketAuthorization.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketAuthorization.java @@ -32,7 +32,7 @@ public class PacketAuthorization implements PacketIn, PacketOut { @Override public void execute(Client client, JSONObject data) { try { - if (data.getString("password").equals(plugin.config.get().getSection("Settings").getSection("SubData").getString("Password"))) { + if (data.getString("password").equals(plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password"))) { client.authorize(); client.sendPacket(new PacketAuthorization(0, "Successfully Logged in")); } else { diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java index c13facf4..a16265dd 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java @@ -37,7 +37,7 @@ public final class SubPlugin extends BungeeCord { public HashMap exLang = new HashMap(); public SubDataServer subdata = null; public final Version version = new Version("2.11.2a"); - protected Version bversion = new Version(5); + protected Version bversion = null; protected boolean running = false; public final SubAPI api = new SubAPI(this); @@ -237,6 +237,10 @@ public final class SubPlugin extends BungeeCord { this.hosts.get(host).removeSubServer(server); } subservers.clear(); + if (this.hosts.get(host).getCreator().isBusy()) { + this.hosts.get(host).getCreator().terminate(); + this.hosts.get(host).getCreator().waitFor(); + } this.hosts.remove(host); } hosts.clear(); diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java index 44d8ec40..8ada08c0 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java @@ -22,7 +22,7 @@ public final class SubPlugin extends JavaPlugin { public UIListener gui = null; public Version version; - protected Version bversion = new Version(5); + protected Version bversion = null; //public final SubAPI api = new SubAPI(this); @@ -35,7 +35,7 @@ public final class SubPlugin extends JavaPlugin { if (!(new UniversalFile(getDataFolder(), "config.yml").exists())) { Util.copyFromJar(SubPlugin.class.getClassLoader(), "config.yml", new UniversalFile(getDataFolder(), "config.yml").getPath()); Bukkit.getLogger().info("SubServers > Created ~/plugins/SubServers/config.yml"); - } else if ((new Version((new YAMLConfig(new UniversalFile(getDataFolder(), "config.yml"))).get().getSection("Settings").getString("Version", "0")).compareTo(new Version("2.11.0a+"))) != 0) { + } else if ((new Version((new YAMLConfig(new UniversalFile(getDataFolder(), "config.yml"))).get().getSection("Settings").getString("Version", "0")).compareTo(new Version("2.11.2a+"))) != 0) { Files.move(new UniversalFile(getDataFolder(), "config.yml").toPath(), new UniversalFile(getDataFolder(), "config.old" + Math.round(Math.random() * 100000) + ".yml").toPath()); Util.copyFromJar(SubPlugin.class.getClassLoader(), "config.yml", new UniversalFile(getDataFolder(), "config.yml").getPath()); @@ -45,7 +45,6 @@ public final class SubPlugin extends JavaPlugin { subdata = new SubDataClient(this, pluginconf.get().getSection("Settings").getSection("SubData").getString("Name", "~no_name"), InetAddress.getByName(pluginconf.get().getSection("Settings").getSection("SubData").getString("Address", "127.0.0.1:4391").split(":")[0]), Integer.parseInt(pluginconf.get().getSection("Settings").getSection("SubData").getString("Address", "127.0.0.1:4391").split(":")[1])); - Bukkit.getLogger().info("SubServers > SubData Connected to " + subdata.getClient().getRemoteSocketAddress().toString()); gui = new UIListener(this); getCommand("subservers").setExecutor(new SubCommand(this)); diff --git a/SubServers.Client/Bukkit/src/plugin.yml b/SubServers.Client/Bukkit/src/plugin.yml index f8710d59..4a35fc29 100644 --- a/SubServers.Client/Bukkit/src/plugin.yml +++ b/SubServers.Client/Bukkit/src/plugin.yml @@ -35,9 +35,6 @@ permissions: subservers.host.create.*: description: 'Grants Access to Create a SubServer' default: op - subservers.host.edit.*: - description: 'Grants Access to Edit a Host' - default: op subservers.subserver.*: description: 'Grants Access to SubServers SubServer Actions' default: op @@ -54,9 +51,6 @@ permissions: subservers.subserver.command.*: description: 'Grants Access to Send Commands to a SubServer' default: op - subservers.subserver.edit.*: - description: 'Grants Access to Edit a SubServer' - default: op subservers.server.*: description: 'Grants Access to SubServer Server Actions' default: op