Add some force quit padding // Rewrite group system internals

This commit is contained in:
ME1312 2017-12-06 17:34:47 -05:00
parent a019383bc3
commit a8bbd09e9d
24 changed files with 225 additions and 214 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -970,7 +970,7 @@
</dd>
<dt><span class="memberNameLink"><a href="net/ME1312/SubServers/Bungee/SubAPI.html#getGroup-java.lang.String-">getGroup(String)</a></span> - Method in class net.ME1312.SubServers.Bungee.<a href="net/ME1312/SubServers/Bungee/SubAPI.html" title="class in net.ME1312.SubServers.Bungee">SubAPI</a></dt>
<dd>
<div class="block">Gets a Server Group</div>
<div class="block">Gets a Server Group (Group names are case insensitive here)</div>
</dd>
<dt><span class="memberNameLink"><a href="net/ME1312/SubServers/Bungee/Host/Server.html#getGroups--">getGroups()</a></span> - Method in interface net.ME1312.SubServers.Bungee.Host.<a href="net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a></dt>
<dd>
@ -980,7 +980,7 @@
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="net/ME1312/SubServers/Bungee/SubAPI.html#getGroups--">getGroups()</a></span> - Method in class net.ME1312.SubServers.Bungee.<a href="net/ME1312/SubServers/Bungee/SubAPI.html" title="class in net.ME1312.SubServers.Bungee">SubAPI</a></dt>
<dd>
<div class="block">Gets the Server Groups</div>
<div class="block">Gets the Server Groups (Group names are case sensitive here)</div>
</dd>
<dt><span class="memberNameLink"><a href="net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.html#getHandler--">getHandler()</a></span> - Method in class net.ME1312.SubServers.Bungee.Host.External.<a href="net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.html" title="class in net.ME1312.SubServers.Bungee.Host.External">ExternalSubLogger</a></dt>
<dd>&nbsp;</dd>
@ -1154,6 +1154,10 @@
<dd>
<div class="block">Get a Long List by Handle</div>
</dd>
<dt><span class="memberNameLink"><a href="net/ME1312/SubServers/Bungee/SubAPI.html#getLowercaseGroups--">getLowercaseGroups()</a></span> - Method in class net.ME1312.SubServers.Bungee.<a href="net/ME1312/SubServers/Bungee/SubAPI.html" title="class in net.ME1312.SubServers.Bungee">SubAPI</a></dt>
<dd>
<div class="block">Gets the Server Groups (Group names are all lowercase here)</div>
</dd>
<dt><span class="memberNameLink"><a href="net/ME1312/SubServers/Bungee/Host/SubLogger.LogMessage.html#getMessage--">getMessage()</a></span> - Method in class net.ME1312.SubServers.Bungee.Host.<a href="net/ME1312/SubServers/Bungee/Host/SubLogger.LogMessage.html" title="class in net.ME1312.SubServers.Bungee.Host">SubLogger.LogMessage</a></dt>
<dd>
<div class="block">Get the message</div>
@ -1592,8 +1596,6 @@
<dd>
<div class="block">Gets the SubServers Version</div>
</dd>
<dt><span class="memberNameLink"><a href="net/ME1312/SubServers/Bungee/SubPlugin.html#groups">groups</a></span> - Variable in class net.ME1312.SubServers.Bungee.<a href="net/ME1312/SubServers/Bungee/SubPlugin.html" title="class in net.ME1312.SubServers.Bungee">SubPlugin</a></dt>
<dd>&nbsp;</dd>
</dl>
<a name="I:H">
<!-- -->

View File

@ -17,7 +17,7 @@
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":9,"i18":42,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10};
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":9,"i18":42,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@ -229,13 +229,13 @@ extends java.lang.Object</pre>
<tr id="i12" class="altColor">
<td class="colFirst"><code>java.util.List&lt;<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getGroup-java.lang.String-">getGroup</a></span>(java.lang.String&nbsp;name)</code>
<div class="block">Gets a Server Group</div>
<div class="block">Gets a Server Group (Group names are case insensitive here)</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>java.util.Map&lt;java.lang.String,java.util.List&lt;<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getGroups--">getGroups</a></span>()</code>
<div class="block">Gets the Server Groups</div>
<div class="block">Gets the Server Groups (Group names are case sensitive here)</div>
</td>
</tr>
<tr id="i14" class="altColor">
@ -283,80 +283,86 @@ extends java.lang.Object</pre>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>java.util.Map&lt;java.lang.String,java.util.List&lt;<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getLowercaseGroups--">getLowercaseGroups</a></span>()</code>
<div class="block">Gets the Server Groups (Group names are all lowercase here)</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Library/Version/Version.html" title="class in net.ME1312.SubServers.Bungee.Library.Version">Version</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getProxyVersion--">getProxyVersion</a></span>()</code>
<div class="block">Gets the BungeeCord Version</div>
</td>
</tr>
<tr id="i22" class="altColor">
<tr id="i23" class="rowColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Library/UniversalFile.html" title="class in net.ME1312.SubServers.Bungee.Library">UniversalFile</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getRuntimeDirectory--">getRuntimeDirectory</a></span>()</code>
<div class="block">Gets the Runtime Directory</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<tr id="i24" class="altColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getServer-java.lang.String-">getServer</a></span>(java.lang.String&nbsp;name)</code>
<div class="block">Gets a Server</div>
</td>
</tr>
<tr id="i24" class="altColor">
<tr id="i25" class="rowColor">
<td class="colFirst"><code>java.util.Map&lt;java.lang.String,<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getServers--">getServers</a></span>()</code>
<div class="block">Gets the Servers (including SubServers)</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<tr id="i26" class="altColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Network/SubDataServer.html" title="class in net.ME1312.SubServers.Bungee.Network">SubDataServer</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getSubDataNetwork--">getSubDataNetwork</a></span>()</code>
<div class="block">Gets the SubData Network Manager</div>
</td>
</tr>
<tr id="i26" class="altColor">
<tr id="i27" class="rowColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Host/SubServer.html" title="interface in net.ME1312.SubServers.Bungee.Host">SubServer</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getSubServer-java.lang.String-">getSubServer</a></span>(java.lang.String&nbsp;name)</code>
<div class="block">Gets a SubServer</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<tr id="i28" class="altColor">
<td class="colFirst"><code>java.util.Map&lt;java.lang.String,<a href="../../../../net/ME1312/SubServers/Bungee/Host/SubServer.html" title="interface in net.ME1312.SubServers.Bungee.Host">SubServer</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getSubServers--">getSubServers</a></span>()</code>
<div class="block">Gets the SubServers</div>
</td>
</tr>
<tr id="i28" class="altColor">
<tr id="i29" class="rowColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Library/Version/Version.html" title="class in net.ME1312.SubServers.Bungee.Library.Version">Version</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#getWrapperVersion--">getWrapperVersion</a></span>()</code>
<div class="block">Gets the SubServers Version</div>
</td>
</tr>
<tr id="i29" class="rowColor">
<tr id="i30" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#removeHost-java.lang.String-">removeHost</a></span>(java.lang.String&nbsp;name)</code>
<div class="block">Remove a Host from the Network</div>
</td>
</tr>
<tr id="i30" class="altColor">
<tr id="i31" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#removeHost-java.util.UUID-java.lang.String-">removeHost</a></span>(java.util.UUID&nbsp;player,
java.lang.String&nbsp;name)</code>
<div class="block">Remove a Host from the Network</div>
</td>
</tr>
<tr id="i31" class="rowColor">
<tr id="i32" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#removeServer-java.lang.String-">removeServer</a></span>(java.lang.String&nbsp;name)</code>
<div class="block">Remove a Server from the Network</div>
</td>
</tr>
<tr id="i32" class="altColor">
<tr id="i33" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#removeServer-java.util.UUID-java.lang.String-">removeServer</a></span>(java.util.UUID&nbsp;player,
java.lang.String&nbsp;name)</code>
<div class="block">Remove a Server from the Network</div>
</td>
</tr>
<tr id="i33" class="rowColor">
<tr id="i34" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubAPI.html#setLang-java.lang.String-java.lang.String-">setLang</a></span>(java.lang.String&nbsp;key,
java.lang.String&nbsp;value)</code>
@ -652,7 +658,21 @@ public&nbsp;<a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html" ti
<li class="blockList">
<h4>getGroups</h4>
<pre>public&nbsp;java.util.Map&lt;java.lang.String,java.util.List&lt;<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;&gt;&nbsp;getGroups()</pre>
<div class="block">Gets the Server Groups</div>
<div class="block">Gets the Server Groups (Group names are case sensitive here)</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Group Map</dd>
</dl>
</li>
</ul>
<a name="getLowercaseGroups--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLowercaseGroups</h4>
<pre>public&nbsp;java.util.Map&lt;java.lang.String,java.util.List&lt;<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;&gt;&nbsp;getLowercaseGroups()</pre>
<div class="block">Gets the Server Groups (Group names are all lowercase here)</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Group Map</dd>
@ -666,7 +686,7 @@ public&nbsp;<a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html" ti
<li class="blockList">
<h4>getGroup</h4>
<pre>public&nbsp;java.util.List&lt;<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;&nbsp;getGroup(java.lang.String&nbsp;name)</pre>
<div class="block">Gets a Server Group</div>
<div class="block">Gets a Server Group (Group names are case insensitive here)</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>name</code> - Group name</dd>

View File

@ -168,30 +168,26 @@ implements net.md_5.bungee.api.plugin.Listener</pre>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#exServers">exServers</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>java.util.HashMap&lt;java.lang.String,java.util.List&lt;<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#groups">groups</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>java.util.HashMap&lt;java.lang.String,<a href="../../../../net/ME1312/SubServers/Bungee/Host/Host.html" title="class in net.ME1312.SubServers.Bungee.Host">Host</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#hosts">hosts</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Library/Config/YAMLConfig.html" title="class in net.ME1312.SubServers.Bungee.Library.Config">YAMLConfig</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#lang">lang</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colFirst"><code>java.io.PrintStream</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#out">out</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Network/SubDataServer.html" title="class in net.ME1312.SubServers.Bungee.Network">SubDataServer</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#subdata">subdata</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Host/SubServer.html" title="interface in net.ME1312.SubServers.Bungee.Host">SubServer</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#sudo">sudo</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../net/ME1312/SubServers/Bungee/Library/Version/Version.html" title="class in net.ME1312.SubServers.Bungee.Library.Version">Version</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#version">version</a></span></code>&nbsp;</td>
</tr>
@ -294,15 +290,6 @@ implements net.md_5.bungee.api.plugin.Listener</pre>
<pre>public final&nbsp;java.util.HashMap&lt;java.lang.String,<a href="../../../../net/ME1312/SubServers/Bungee/Host/Host.html" title="class in net.ME1312.SubServers.Bungee.Host">Host</a>&gt; hosts</pre>
</li>
</ul>
<a name="groups">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>groups</h4>
<pre>public final&nbsp;java.util.HashMap&lt;java.lang.String,java.util.List&lt;<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>&gt;&gt; groups</pre>
</li>
</ul>
<a name="exServers">
<!-- -->
</a>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -122,7 +122,7 @@ public class InternalHost extends Host {
getSubServer(name).stop();
getSubServer(name).waitFor();
}
for (String group : getSubServer(name).getGroups()) getSubServer(name).removeGroup(group);
servers.remove(name.toLowerCase());
return true;
} else return false;
@ -136,7 +136,6 @@ public class InternalHost extends Host {
if (getSubServer(name).isRunning()) {
getSubServer(name).terminate();
}
for (String group : getSubServer(name).getGroups()) getSubServer(name).removeGroup(group);
servers.remove(name.toLowerCase());
return true;
}

View File

@ -80,9 +80,6 @@ public class ServerContainer extends BungeeServerInfo implements Server {
public void addGroup(String value) {
if (Util.isNull(value)) throw new NullPointerException();
if (value.length() > 0 && !groups.contains(value)) {
List<Server> list = (SubAPI.getInstance().getInternals().groups.keySet().contains(value))?SubAPI.getInstance().getInternals().groups.get(value):new ArrayList<Server>();
list.add(this);
SubAPI.getInstance().getInternals().groups.put(value, list);
groups.add(value);
Collections.sort(groups);
}
@ -92,9 +89,6 @@ public class ServerContainer extends BungeeServerInfo implements Server {
@SuppressWarnings("deprecation")
public void removeGroup(String value) {
if (Util.isNull(value)) throw new NullPointerException();
List<Server> list = SubAPI.getInstance().getInternals().groups.get(value);
list.remove(this);
SubAPI.getInstance().getInternals().groups.put(value, list);
groups.remove(value);
Collections.sort(groups);
}

View File

@ -25,9 +25,11 @@ import java.util.*;
*/
public final class SubAPI {
LinkedList<NamedContainer<Runnable, Runnable>> listeners = new LinkedList<NamedContainer<Runnable, Runnable>>();
boolean ready = false;
private SubPlugin plugin;
private static SubAPI api;
protected SubAPI(SubPlugin plugin) {
this.plugin = plugin;
api = this;
@ -215,22 +217,58 @@ public final class SubAPI {
}
/**
* Gets the Server Groups
* Gets the Server Groups (Group names are case sensitive here)
*
* @return Group Map
*/
public Map<String, List<Server>> getGroups() {
return new TreeMap<String, List<Server>>(plugin.groups);
TreeMap<String, List<Server>> groups = new TreeMap<String, List<Server>>();
HashMap<String, String> conflitresolver = new HashMap<String, String>();
for (Server server : getServers().values()) {
for (String name : server.getGroups()) {
String group = name;
if (conflitresolver.keySet().contains(name.toLowerCase())) {
group = conflitresolver.get(name.toLowerCase());
} else {
conflitresolver.put(name.toLowerCase(), name);
}
List<Server> list = (groups.keySet().contains(group))?groups.get(group):new ArrayList<Server>();
list.add(server);
groups.put(group, list);
}
}
return groups;
}
/**
* Gets a Server Group
* Gets the Server Groups (Group names are all lowercase here)
*
* @return Group Map
*/
public Map<String, List<Server>> getLowercaseGroups() {
Map<String, List<Server>> groups = getGroups();
TreeMap<String, List<Server>> lowercaseGroups = new TreeMap<String, List<Server>>();
for (String key : groups.keySet()) {
lowercaseGroups.put(key.toLowerCase(), groups.get(key));
}
return lowercaseGroups;
}
/**
* Gets a Server Group (Group names are case insensitive here)
*
* @param name Group name
* @return a Server Group
*/
public List<Server> getGroup(String name) {
return getGroups().get(name);
Map<String, List<Server>> groups = getGroups();
HashMap<String, String> insensitivity = new HashMap<String, String>();
for (String group : groups.keySet()) insensitivity.put(group.toLowerCase(), group);
if (insensitivity.keySet().contains(name.toLowerCase())) {
return groups.get(insensitivity.get(name.toLowerCase()));
} else {
return null;
}
}
/**

View File

@ -39,7 +39,6 @@ import java.util.concurrent.TimeUnit;
public final class SubPlugin extends BungeeCord implements Listener {
protected final HashMap<String, Class<? extends Host>> hostDrivers = new HashMap<String, Class<? extends Host>>();
public final HashMap<String, Host> hosts = new HashMap<String, Host>();
public final HashMap<String, List<Server>> groups = new HashMap<String, List<Server>>();
public final HashMap<String, Server> exServers = new HashMap<String, Server>();
private final HashMap<String, ServerInfo> legServers = new HashMap<String, ServerInfo>();
@ -244,6 +243,17 @@ public final class SubPlugin extends BungeeCord implements Listener {
int subservers = 0;
System.out.println("SubServers > Loading SubServers...");
if (!posted) Runtime.getRuntime().addShutdownHook(new Thread(() -> {
if (!running) {
System.out.println("SubServers > Received request from system to shutdown");
try {
resetHosts();
} catch (Exception e) {
e.printStackTrace();
}
}
}));
running = true;
for (String name : config.get().getSection("Servers").getKeys()) {
try {
if (!this.hosts.keySet().contains(config.get().getSection("Servers").getSection(name).getString("Host").toLowerCase())) throw new InvalidServerException("There is no host with this name: " + config.get().getSection("Servers").getSection(name).getString("Host"));
@ -269,7 +279,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
if (other != null && server.isCompatible(other)) server.toggleCompatibility(other);
}
}
running = true;
api.ready = true;
legServers.clear();
int plugins = 0;
@ -288,88 +298,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
}
System.out.println("SubServers > " + ((plugins > 0)?plugins+" Plugin"+((plugins == 1)?"":"s")+", ":"") + hosts + " Host"+((hosts == 1)?"":"s")+", " + servers + " Server"+((servers == 1)?"":"s")+", and " + subservers + " SubServer"+((subservers == 1)?"":"s")+" loaded in " + new DecimalFormat("0.000").format((Calendar.getInstance().getTime().getTime() - begin) / 1000D) + "s");
/*
System.out.println(" ");
System.out.println("// Begin Internal SubCreator Template Argument Validator Tests //");
Container<String> str = new Container<String>("testString");
SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "System", "toUppercase", str);
System.out.println("System.toUppercase: testString -> " + str.get());
str.set("testString");
SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "System", "toLowercase", str);
System.out.println("System.toLowercase: testString -> " + str.get());
str.set("1.8");
SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "System", "toServerVersion", str);
System.out.println("System.toServerVersion: 1.8 -> " + str.get());
str.set("1.10.2");
SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "System", "toServerVersion", str);
System.out.println("System.toServerVersion: 1.10.2 -> " + str.get());
str.set("1.12.2");
SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "System", "toServerVersion", str);
System.out.println("System.toServerVersion: 1.12.2 -> " + str.get());
str.set("1.8");
System.out.println("Integer: " + str.get() + " == 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "=1.10.2", str))?"TRUE":"FALSE"));
str.set("1.10.2");
System.out.println("Integer: " + str.get() + " == 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "==1.10.2", str))?"TRUE":"FALSE"));
str.set("1.8");
System.out.println("Integer: " + str.get() + " != 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "!1.10.2", str))?"TRUE":"FALSE"));
str.set("1.10.2");
System.out.println("Integer: " + str.get() + " != 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "!=1.10.2", str))?"TRUE":"FALSE"));
str.set("1.8");
System.out.println("Integer: " + str.get() + " < 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "<1.10.2", str))?"TRUE":"FALSE"));
str.set("1.10.2");
System.out.println("Integer: " + str.get() + " < 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "<1.10.2", str))?"TRUE":"FALSE"));
str.set("1.12.2");
System.out.println("Integer: " + str.get() + " < 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "<1.10.2", str))?"TRUE":"FALSE"));
str.set("1.8");
System.out.println("Integer: " + str.get() + " <= 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "<=1.10.2", str))?"TRUE":"FALSE"));
str.set("1.10.2");
System.out.println("Integer: " + str.get() + " <= 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "<=1.10.2", str))?"TRUE":"FALSE"));
str.set("1.12.2");
System.out.println("Integer: " + str.get() + " <= 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", "<=1.10.2", str))?"TRUE":"FALSE"));
str.set("1.8");
System.out.println("Integer: " + str.get() + " > 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", ">1.10.2", str))?"TRUE":"FALSE"));
str.set("1.10.2");
System.out.println("Integer: " + str.get() + " > 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", ">1.10.2", str))?"TRUE":"FALSE"));
str.set("1.12.2");
System.out.println("Integer: " + str.get() + " > 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", ">1.10.2", str))?"TRUE":"FALSE"));
str.set("1.8");
System.out.println("Integer: " + str.get() + " >= 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", ">=1.10.2", str))?"TRUE":"FALSE"));
str.set("1.10.2");
System.out.println("Integer: " + str.get() + " >= 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", ">=1.10.2", str))?"TRUE":"FALSE"));
str.set("1.12.2");
System.out.println("Integer: " + str.get() + " >= 1.10.2 = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "Integer", ">=1.10.2", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /No Pizza Please/ == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/No Pizza Please/", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /no pizza please/ == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/no pizza please/", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /nopizzaplease/ == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/nopizzaplease/", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /No Pizza Please/i == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/No Pizza Please/i", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /no pizza please/i == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/no pizza please/i", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /nopizzaplease/i == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/nopizzaplease/i", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /No Pizza Please/u == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/No Pizza Please/u", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /no pizza please/u == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/no pizza please/u", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /nopizzaplease/u == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/nopizzaplease/u", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /No Pizza Please/x == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/No Pizza Please/x", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /no pizza please/x == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/no pizza please/x", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /nopizzaplease/x == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/nopizzaplease/x", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /No Pizza Please/iux == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/No Pizza Please/iux", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /no pizza please/iux == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/no pizza please/iux", str))?"TRUE":"FALSE"));
str.set("No Pizza Please");
System.out.println("RegEx: /nopizzaplease/iux == " + str.get() + " = " + ((SubCreator.validate(((Host) api.getHosts().values().toArray()[0]).getCreator().getTemplate("Sponge"), "RegEx", "/nopizzaplease/iux", str))?"TRUE":"FALSE"));
System.out.println(" ");
*/
super.startListeners();
if (!posted) {
post();
@ -382,12 +311,11 @@ public final class SubPlugin extends BungeeCord implements Listener {
private void post() {
new Metrics(this);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
try {
Document updxml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(Util.readAll(new BufferedReader(new InputStreamReader(new URL("http://src.me1312.net/maven/net/ME1312/SubServers/SubServers.Bungee/maven-metadata.xml").openStream(), Charset.forName("UTF-8")))))));
Document updxml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://src.me1312.net/maven/net/ME1312/SubServers/SubServers.Bungee/maven-metadata.xml").openStream(), Charset.forName("UTF-8")))))));
NodeList updnodeList = updxml.getElementsByTagName("version");
Version updversion = version;
@ -428,7 +356,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
@Override
public Map<String, ServerInfo> getServers() {
HashMap<String, ServerInfo> servers = new HashMap<String, ServerInfo>();
if (!running) {
if (!api.ready) {
servers.putAll(super.getServers());
servers.putAll(legServers);
} else {
@ -472,25 +400,8 @@ public final class SubPlugin extends BungeeCord implements Listener {
}
}
}
running = false;
System.out.println("SubServers > Resetting Hosts and Server Data");
List<String> hosts = new ArrayList<String>();
hosts.addAll(this.hosts.keySet());
for (String host : hosts) {
List<String> subservers = new ArrayList<String>();
subservers.addAll(this.hosts.get(host).getSubServers().keySet());
for (String server : subservers) {
this.hosts.get(host).removeSubServer(server);
}
subservers.clear();
this.hosts.get(host).getCreator().terminate();
this.hosts.get(host).getCreator().waitFor();
this.hosts.remove(host);
}
hosts.clear();
exServers.clear();
resetHosts();
subdata.destroy();
} catch (Exception e) {
@ -498,6 +409,27 @@ public final class SubPlugin extends BungeeCord implements Listener {
}
super.stopListeners();
} private void resetHosts() throws Exception {
api.ready = false;
System.out.println("SubServers > Resetting Hosts and Server Data");
List<String> hosts = new ArrayList<String>();
hosts.addAll(this.hosts.keySet());
for (String host : hosts) {
List<String> subservers = new ArrayList<String>();
subservers.addAll(this.hosts.get(host).getSubServers().keySet());
for (String server : subservers) {
this.hosts.get(host).removeSubServer(server);
}
subservers.clear();
this.hosts.get(host).getCreator().terminate();
this.hosts.get(host).getCreator().waitFor();
this.hosts.remove(host);
}
running = false;
this.hosts.clear();
exServers.clear();
}
@EventHandler(priority = Byte.MAX_VALUE)

Binary file not shown.

View File

@ -821,6 +821,7 @@ public class InternalUIRenderer extends UIRenderer {
hosts.put(server, (json.getJSONObject("groups").getJSONObject(group).getJSONObject(server).keySet().contains("host") && json.getJSONObject("hosts").keySet().contains(json.getJSONObject("groups").getJSONObject(group).getJSONObject(server).getString("host")))?json.getJSONObject("groups").getJSONObject(group).getJSONObject(server).getString("host"):null);
servers.add(server);
}
} else {
lastMenu = () -> serverMenu(1, null, null);
for (String s : json.getJSONObject("servers").keySet()) {
hosts.put(s, null);

View File

@ -92,7 +92,7 @@ public final class SubPlugin extends JavaPlugin {
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
try {
Document updxml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(Util.readAll(new BufferedReader(new InputStreamReader(new URL("http://src.me1312.net/maven/net/ME1312/SubServers/SubServers.Client.Bukkit/maven-metadata.xml").openStream(), Charset.forName("UTF-8")))))));
Document updxml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://src.me1312.net/maven/net/ME1312/SubServers/SubServers.Client.Bukkit/maven-metadata.xml").openStream(), Charset.forName("UTF-8")))))));
NodeList updnodeList = updxml.getElementsByTagName("version");
Version updversion = version;

Binary file not shown.

View File

@ -26,7 +26,6 @@ import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.Charset;
@ -57,7 +56,8 @@ public final class ExHost {
public final Version bversion = new Version(2);
public final SubAPI api = new SubAPI(this);
private boolean running;
private boolean running = false;
private boolean ready = false;
/**
* SubServers.Host Launch
@ -123,7 +123,7 @@ public final class ExHost {
Files.delete(new UniversalFile(dir, "Recently Deleted").toPath());
}
}
running = true;
SubDataClient.Encryption encryption = SubDataClient.Encryption.NONE;
if (config.get().getSection("Settings").getSection("SubData").getString("Password", "").length() == 0) {
log.info.println("Cannot encrypt connection without a password");
@ -135,6 +135,12 @@ public final class ExHost {
subdata = new SubDataClient(this, config.get().getSection("Settings").getSection("SubData").getString("Name", "undefined"),
InetAddress.getByName(config.get().getSection("Settings").getSection("SubData").getString("Address", "127.0.0.1:4391").split(":")[0]),
Integer.parseInt(config.get().getSection("Settings").getSection("SubData").getString("Address", "127.0.0.1:4391").split(":")[1]), encryption);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
if (running) {
log.warn.println("Received request from system to shutdown");
forcequit(0);
}
}));
creator = new SubCreator(this);
if (System.getProperty("subservers.host.plugins", "").length() > 0) {
@ -226,6 +232,7 @@ public final class ExHost {
plugin.setEnabled(true);
api.addListener(plugin, plugin.get());
api.plugins.put(plugin.getName().toLowerCase(), plugin);
api.plugins.put(plugin.getName().toLowerCase(), plugin);
loaded.add(plugin.getName().toLowerCase());
log.info.println("Loaded " + plugin.getName() + " v" + plugin.getVersion().toString() + " by " + plugin.getAuthors().toString().substring(1, plugin.getAuthors().toString().length() - 1));
i++;
@ -257,13 +264,12 @@ public final class ExHost {
}
loadDefaults();
running = true;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
try {
Document updxml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(Util.readAll(new BufferedReader(new InputStreamReader(new URL("http://src.me1312.net/maven/net/ME1312/SubServers/SubServers.Host/maven-metadata.xml").openStream(), Charset.forName("UTF-8")))))));
Document updxml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://src.me1312.net/maven/net/ME1312/SubServers/SubServers.Host/maven-metadata.xml").openStream(), Charset.forName("UTF-8")))))));
NodeList updnodeList = updxml.getElementsByTagName("version");
Version updversion = version;
@ -283,18 +289,17 @@ public final class ExHost {
}, 0, TimeUnit.DAYS.toMillis(2));
loop();
} catch (SocketException e) {
log.severe.println(e);
} catch (Exception e) {
log.error.println(e);
forcequit(1);
}
}
private void loop() {
Scanner console = new Scanner(System.in);
while (running && console.hasNextLine()) {
if (!running) continue;
ready = true;
while (ready && console.hasNextLine()) {
if (!ready) continue;
final String umsg = console.nextLine();
final CommandPreProcessEvent event;
api.executeEvent(event = new CommandPreProcessEvent(this, umsg));
@ -305,7 +310,7 @@ public final class ExHost {
args.addAll(Arrays.asList(umsg.contains(" ") ? umsg.split(" ") : new String[]{umsg}));
args.remove(0);
new Thread(() ->{
new Thread(() -> {
try {
api.commands.get(cmd.toLowerCase()).command(cmd, args.toArray(new String[args.size()]));
} catch (Exception e) {
@ -329,41 +334,50 @@ public final class ExHost {
* @param exit Exit Code
*/
public void stop(int exit) {
log.info.println("Shutting down...");
running = false;
SubDisableEvent event = new SubDisableEvent(this, exit);
api.executeEvent(event);
if (ready) {
log.info.println("Shutting down...");
SubDisableEvent event = new SubDisableEvent(this, exit);
api.executeEvent(event);
List<String> subservers = new ArrayList<String>();
subservers.addAll(servers.keySet());
forcequit(event.getExitCode());
}
} private void forcequit(int exit) {
if (ready) {
ready = false;
List<String> subservers = new ArrayList<String>();
subservers.addAll(servers.keySet());
for (String server : subservers) {
servers.get(server).stop();
try {
servers.get(server).waitFor();
} catch (Exception e) {
log.error.println(e);
}
}
servers.clear();
if (creator != null) {
creator.terminate();
try {
creator.waitFor();
} catch (Exception e) {
log.error.println(e);
}
}
running = false;
for (String server : subservers) {
servers.get(server).stop();
try {
servers.get(server).waitFor();
Thread.sleep(500);
} catch (Exception e) {
log.error.println(e);
}
}
subservers.clear();
servers.clear();
if (subdata != null) Util.isException(() -> subdata.destroy(0));
creator.terminate();
try {
creator.waitFor();
} catch (Exception e) {
log.error.println(e);
Util.isException(FileLogger::end);
System.exit(exit);
}
try {
Thread.sleep(500);
} catch (Exception e) {
log.error.println(e);
}
if (subdata != null) Util.isException(() -> subdata.destroy(0));
Util.isException(FileLogger::end);
System.exit(event.getExitCode());
}
private void unzip(InputStream zip, File dir) {

View File

@ -21,6 +21,8 @@ import org.w3c.dom.NodeList;
* SubServers.Host Launcher Class
*/
public final class Launch {
private static File dir = null;
private static Process process = null;
/**
* Prepare and launch SubServers.Host
@ -41,32 +43,32 @@ public final class Launch {
private static void launch(String[] args) throws Exception {
String plugins = "";
File rtdir = new File(System.getProperty("user.dir"));
File tmpdir = File.createTempFile("SubServers.Host.", ".jar");
File pldir = new File(rtdir, "Plugins");
tmpdir.delete();
tmpdir.mkdir();
System.out.println(">> Created " + tmpdir.getPath().replace(File.separator, "/"));
extractJar(getCodeSourceLocation(), tmpdir);
dir = File.createTempFile("SubServers.Host.", ".jar");
dir.delete();
dir.mkdir();
System.out.println(">> Created " + dir.getPath().replace(File.separator, "/"));
extractJar(getCodeSourceLocation(), dir);
System.out.println(">> Extracted ~/" + getCodeSourceLocation().getName());
if (pldir.isDirectory() && pldir.listFiles().length > 0) {
for (File plugin : Arrays.asList(pldir.listFiles())) {
try {
boolean success = false;
if (getFileExtension(plugin.getName()).equalsIgnoreCase("zip")) {
Util.unzip(new FileInputStream(plugin), tmpdir);
Util.unzip(new FileInputStream(plugin), dir);
success = true;
} else if (getFileExtension(plugin.getName()).equalsIgnoreCase("jar")) {
extractJar(plugin, tmpdir);
extractJar(plugin, dir);
success = true;
}
if (new File(tmpdir, "package.xml").exists()) {
NodeList xml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(tmpdir, "package.xml")).getElementsByTagName("class");
if (new File(dir, "package.xml").exists()) {
NodeList xml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(dir, "package.xml")).getElementsByTagName("class");
if (xml.getLength() > 0) {
for (int i = 0; i < xml.getLength(); i++) {
plugins += ((plugins.length() == 0)?"":" ") + xml.item(i).getTextContent().replace(' ', '_');
}
}
new File(tmpdir, "package.xml").delete();
new File(dir, "package.xml").delete();
}
if (success) System.out.println(">> Extracted ~/plugins/" + plugin.getName());
} catch (Exception e) {
@ -79,31 +81,47 @@ public final class Launch {
String javaPath = String.valueOf(System.getProperty("java.home")) + File.separator + "bin" + File.separator + "java";
arguments.add(javaPath);
arguments.addAll(getVmArgs());
arguments.add("-Dsubservers.host.runtime=" + URLEncoder.encode(tmpdir.getPath(), "UTF-8"));
arguments.add("-Dsubservers.host.runtime=" + URLEncoder.encode(dir.getPath(), "UTF-8"));
if (!plugins.equals(""))
arguments.add("-Dsubservers.host.plugins=" + URLEncoder.encode(plugins, "UTF-8"));
arguments.add("-cp");
arguments.add(tmpdir.getPath());
arguments.add(dir.getPath());
arguments.add("net.ME1312.SubServers.Host.ExHost");
arguments.addAll(Arrays.asList(args));
ProcessBuilder processBuilder = new ProcessBuilder(arguments);
processBuilder.directory(new File(System.getProperty("user.dir")));
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
syncConsole(process);
System.out.println(">> Cleaning up");
deleteDir(tmpdir);
System.exit(process.exitValue());
syncConsole(processBuilder.start());
Thread.sleep(250);
int code = process.exitValue();
process = null;
exit(code);
}
private static void syncConsole(final Process process) throws Exception {
private static void syncConsole(Process process) throws Exception {
ConsoleReader console = new ConsoleReader(System.in, (System.getProperty("subservers.host.log.color", "true").equalsIgnoreCase("true"))?AnsiConsole.out:System.out);
console.setExpandEvents(false);
Launch.process = process;
try {
new Thread(() -> {
try {
String line;
BufferedWriter cmd = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
if (Launch.process != null && Launch.process.isAlive()) {
try {
stashLine(console);
console.println(">> Received request from system to shutdown");
unstashLine(console);
console.flush();
cmd.write("exit");
cmd.newLine();
cmd.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}));
while (process.isAlive() && (line = console.readLine(">")) != null) {
if (line.equals("")) continue;
cmd.write(line);
@ -150,6 +168,12 @@ public final class Launch {
stashLine(console);
}
private static void exit(int code) {
System.out.println(">> Cleaning up");
deleteDir(dir);
System.exit(code);
}
private static void extractJar(File jarFile, File dir) throws Exception {
JarFile jar = new JarFile(jarFile);
Enumeration<JarEntry> files = jar.entries();

Binary file not shown.

View File

@ -121,7 +121,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
@Override
public void run() {
try {
Document updxml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(Util.readAll(new BufferedReader(new InputStreamReader(new URL("http://src.me1312.net/maven/net/ME1312/SubServers/SubServers.Sync/maven-metadata.xml").openStream(), Charset.forName("UTF-8")))))));
Document updxml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://src.me1312.net/maven/net/ME1312/SubServers/SubServers.Sync/maven-metadata.xml").openStream(), Charset.forName("UTF-8")))))));
NodeList updnodeList = updxml.getElementsByTagName("version");
Version updversion = version;