Add some force quit padding // Rewrite group system internals
This commit is contained in:
parent
a019383bc3
commit
a8bbd09e9d
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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> </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> </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> </dd>
|
||||
</dl>
|
||||
<a name="I:H">
|
||||
<!-- -->
|
||||
|
|
|
@ -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<<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#getGroup-java.lang.String-">getGroup</a></span>(java.lang.String 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<java.lang.String,java.util.List<<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#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<java.lang.String,java.util.List<<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#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 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<java.lang.String,<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#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 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<java.lang.String,<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#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 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 player,
|
||||
java.lang.String 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 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 player,
|
||||
java.lang.String 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 key,
|
||||
java.lang.String value)</code>
|
||||
|
@ -652,7 +658,21 @@ public <a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html" ti
|
|||
<li class="blockList">
|
||||
<h4>getGroups</h4>
|
||||
<pre>public java.util.Map<java.lang.String,java.util.List<<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>>> 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 java.util.Map<java.lang.String,java.util.List<<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>>> 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 <a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html" ti
|
|||
<li class="blockList">
|
||||
<h4>getGroup</h4>
|
||||
<pre>public java.util.List<<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>> getGroup(java.lang.String 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>
|
||||
|
|
|
@ -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> </td>
|
||||
</tr>
|
||||
<tr class="altColor">
|
||||
<td class="colFirst"><code>java.util.HashMap<java.lang.String,java.util.List<<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/SubPlugin.html#groups">groups</a></span></code> </td>
|
||||
</tr>
|
||||
<tr class="rowColor">
|
||||
<td class="colFirst"><code>java.util.HashMap<java.lang.String,<a href="../../../../net/ME1312/SubServers/Bungee/Host/Host.html" title="class in net.ME1312.SubServers.Bungee.Host">Host</a>></code></td>
|
||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../net/ME1312/SubServers/Bungee/SubPlugin.html#hosts">hosts</a></span></code> </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> </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> </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> </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> </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> </td>
|
||||
</tr>
|
||||
|
@ -294,15 +290,6 @@ implements net.md_5.bungee.api.plugin.Listener</pre>
|
|||
<pre>public final java.util.HashMap<java.lang.String,<a href="../../../../net/ME1312/SubServers/Bungee/Host/Host.html" title="class in net.ME1312.SubServers.Bungee.Host">Host</a>> hosts</pre>
|
||||
</li>
|
||||
</ul>
|
||||
<a name="groups">
|
||||
<!-- -->
|
||||
</a>
|
||||
<ul class="blockList">
|
||||
<li class="blockList">
|
||||
<h4>groups</h4>
|
||||
<pre>public final java.util.HashMap<java.lang.String,java.util.List<<a href="../../../../net/ME1312/SubServers/Bungee/Host/Server.html" title="interface in net.ME1312.SubServers.Bungee.Host">Server</a>>> groups</pre>
|
||||
</li>
|
||||
</ul>
|
||||
<a name="exServers">
|
||||
<!-- -->
|
||||
</a>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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.
|
@ -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);
|
||||
|
|
|
@ -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.
|
@ -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) {
|
||||
|
|
|
@ -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.
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue