diff --git a/Artifacts/SubServers.Bungee.jar b/Artifacts/SubServers.Bungee.jar index 00fd19da..5ec5c27f 100644 Binary files a/Artifacts/SubServers.Bungee.jar and b/Artifacts/SubServers.Bungee.jar differ diff --git a/Artifacts/SubServers.Client.Bukkit.jar b/Artifacts/SubServers.Client.Bukkit.jar index d4cb335e..1a43cad3 100644 Binary files a/Artifacts/SubServers.Client.Bukkit.jar and b/Artifacts/SubServers.Client.Bukkit.jar differ diff --git a/Artifacts/SubServers.Console.jar b/Artifacts/SubServers.Console.jar index 9ebd1b35..627481c3 100644 Binary files a/Artifacts/SubServers.Console.jar and b/Artifacts/SubServers.Console.jar differ diff --git a/Javadoc/SubServers.Bungee/index-all.html b/Javadoc/SubServers.Bungee/index-all.html index 9bd154b9..4908368b 100644 --- a/Javadoc/SubServers.Bungee/index-all.html +++ b/Javadoc/SubServers.Bungee/index-all.html @@ -633,6 +633,12 @@
Get Content Handle
+
getHandle() - Method in class net.ME1312.SubServers.Bungee.Host.Internal.InternalSubLogger
+
 
+
getHandle() - Method in class net.ME1312.SubServers.Bungee.Host.SubLogger
+
+
Gets the Object using this Logger
+
getHandler() - Method in class net.ME1312.SubServers.Bungee.Network.Client
Gets the Linked Handler
@@ -715,8 +721,14 @@
Get a List by Handle
+
getLogger() - Method in class net.ME1312.SubServers.Bungee.Host.Internal.InternalSubCreator
+
 
getLogger() - Method in class net.ME1312.SubServers.Bungee.Host.Internal.InternalSubServer
 
+
getLogger() - Method in class net.ME1312.SubServers.Bungee.Host.SubCreator
+
+
Gets the Logger for the creator
+
getLogger() - Method in class net.ME1312.SubServers.Bungee.Host.SubServer
Get Process Logger
@@ -1099,7 +1111,7 @@
Internal Process Logger Class
-
InternalSubLogger(Process, String, Container<Boolean>, File) - Constructor for class net.ME1312.SubServers.Bungee.Host.Internal.InternalSubLogger
+
InternalSubLogger(Process, Object, String, Container<Boolean>, File) - Constructor for class net.ME1312.SubServers.Bungee.Host.Internal.InternalSubLogger
Creates a new Internal Process Logger
@@ -1804,6 +1816,10 @@
 
start(UUID) - Method in class net.ME1312.SubServers.Bungee.Host.Internal.InternalSubServer
 
+
start() - Method in interface net.ME1312.SubServers.Bungee.Host.SubLogFilter
+
+
Called when the logging has started
+
start() - Method in class net.ME1312.SubServers.Bungee.Host.SubLogger
Start Logger
@@ -1834,6 +1850,10 @@
 
stop(UUID) - Method in class net.ME1312.SubServers.Bungee.Host.Internal.InternalSubServer
 
+
stop() - Method in interface net.ME1312.SubServers.Bungee.Host.SubLogFilter
+
+
Called when the logging has stopped
+
stop() - Method in class net.ME1312.SubServers.Bungee.Host.SubLogger
Stop Logger
diff --git a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.html b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.html index 5ea68b49..5f39c2cc 100644 --- a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.html +++ b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.html @@ -17,7 +17,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -192,18 +192,24 @@ extends +SubLogger +getLogger() +
Gets the Logger for the creator
+ + + boolean isBusy()
Gets the status of SubCreator
- + void terminate()
Terminate SubCreator
- + void waitFor()
Wait for SubCreator to Finish
@@ -358,6 +364,22 @@ extends + + + diff --git a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.html b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.html index 1699e18c..f384db1d 100644 --- a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.html +++ b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.html @@ -17,7 +17,7 @@ catch(err) { } //--> -var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10}; +var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -133,7 +133,8 @@ extends Constructor and Description -InternalSubLogger(java.lang.Process process, +InternalSubLogger(java.lang.Process process, + java.lang.Object user, java.lang.String name, Container<java.lang.Boolean> log, java.io.File file) @@ -156,34 +157,40 @@ extends Method and Description +java.lang.Object +getHandle() +
Gets the Object using this Logger
+ + + java.lang.String getName()
Gets the Name of the task logging
- + boolean isLogging()  - + void registerFilter(SubLogFilter filter)
Register Filter
- + void start()
Start Logger
- + void stop()
Stop Logger
- + void unregisterFilter(SubLogFilter filter)
Unregister Filter
@@ -211,13 +218,14 @@ extends + + + + + diff --git a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/SubLogFilter.html b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/SubLogFilter.html index c6b07965..0f0a161d 100644 --- a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/SubLogFilter.html +++ b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/SubLogFilter.html @@ -17,7 +17,7 @@ catch(err) { } //--> -var methods = {"i0":6}; +var methods = {"i0":6,"i1":6,"i2":6}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -126,6 +126,18 @@ var activeTableTab = "activeTableTab";
Determine if this message should be logged
+ +void +start() +
Called when the logging has started
+ + + +void +stop() +
Called when the logging has stopped
+ + @@ -141,10 +153,20 @@ var activeTableTab = "activeTableTab";

Method Detail

+ + + + - diff --git a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/SubLogger.html b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/SubLogger.html index 9c5dc820..6ca09ed1 100644 --- a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/SubLogger.html +++ b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/SubLogger.html @@ -17,7 +17,7 @@ catch(err) { } //--> -var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6}; +var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6}; var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]}; var altColor = "altColor"; var rowColor = "rowColor"; @@ -150,34 +150,40 @@ extends java.lang.Object Method and Description +abstract java.lang.Object +getHandle() +
Gets the Object using this Logger
+ + + abstract java.lang.String getName()
Gets the Name of the task logging
- + abstract boolean isLogging()  - + abstract void registerFilter(SubLogFilter filter)
Register Filter
- + abstract void start()
Start Logger
- + abstract void stop()
Stop Logger
- + abstract void unregisterFilter(SubLogFilter filter)
Unregister Filter
@@ -236,6 +242,20 @@ extends java.lang.Object + + + + diff --git a/SubServers.Bungee/META-INF/MANIFEST.MF b/SubServers.Bungee/META-INF/MANIFEST.MF index c3179f7b..46963f1f 100644 --- a/SubServers.Bungee/META-INF/MANIFEST.MF +++ b/SubServers.Bungee/META-INF/MANIFEST.MF @@ -2,4 +2,4 @@ Manifest-Version: 1.0 Class-Path: BungeeCord.jar Main-Class: net.ME1312.SubServers.Bungee.Launch Implementation-Version: 2.11.2f -Specification-Version: 1 +Specification-Version: 2 diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java index b97b01af..5d2be297 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java @@ -1,10 +1,7 @@ package net.ME1312.SubServers.Bungee.Host.Internal; import net.ME1312.SubServers.Bungee.Event.SubCreateEvent; -import net.ME1312.SubServers.Bungee.Host.Executable; -import net.ME1312.SubServers.Bungee.Host.Host; -import net.ME1312.SubServers.Bungee.Host.SubCreator; -import net.ME1312.SubServers.Bungee.Host.SubServer; +import net.ME1312.SubServers.Bungee.Host.*; import net.ME1312.SubServers.Bungee.Library.Config.YAMLConfig; import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; import net.ME1312.SubServers.Bungee.Library.Container; @@ -34,6 +31,7 @@ import java.util.UUID; public class InternalSubCreator extends SubCreator { private InternalHost host; private String gitBash; + private InternalSubLogger logger; private Process process = null; private Thread thread = null; @@ -46,6 +44,7 @@ public class InternalSubCreator extends SubCreator { public InternalSubCreator(InternalHost host, String gitBash) { this.host = host; this.gitBash = gitBash; + this.logger = new InternalSubLogger(null, this, host.getName() + "/Creator", new Container(false), null); } @@ -166,8 +165,10 @@ public class InternalSubCreator extends SubCreator { this.process = Runtime.getRuntime().exec((System.getProperty("os.name").toLowerCase().indexOf("win") >= 0)? "\"" + gitBash + "\" --login -i -c \"bash build.sh " + version.toString() + " " + type.toString().toLowerCase() + "\"" :("bash build.sh " + version.toString() + " " + type.toString().toLowerCase() + " " + System.getProperty("user.home")), null, dir); - InternalSubLogger read = new InternalSubLogger(this.process, host.getName() + "/Creator", new Container(host.plugin.config.get().getSection("Settings").getBoolean("Log-Creator")), new File(dir, "SubCreator-" + type.toString() + "-" + version.toString().replace("::", "@") + ".log")); - read.start(); + logger.process = this.process; + logger.log.set(host.plugin.config.get().getSection("Settings").getBoolean("Log-Creator")); + logger.file = new File(dir, "SubCreator-" + type.toString() + "-" + version.toString().replace("::", "@") + ".log"); + logger.start(); try { this.process.waitFor(); Thread.sleep(500); @@ -246,6 +247,11 @@ public class InternalSubCreator extends SubCreator { return gitBash; } + @Override + public SubLogger getLogger() { + return logger; + } + @Override public boolean isBusy() { return thread != null && thread.isAlive(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java index b32b6356..1af24659 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java @@ -17,10 +17,11 @@ import java.util.regex.Pattern; */ public class InternalSubLogger extends SubLogger { protected Process process; - private String name; - private Container log; + private Object handle; + protected String name; + protected Container log; private List filters = new ArrayList(); - private File file; + protected File file; private PrintWriter writer = null; private boolean started = false; private Thread out = null; @@ -30,12 +31,14 @@ public class InternalSubLogger extends SubLogger { * Creates a new Internal Process Logger * * @param process Process + * @param user Object using this logger (or null) * @param name Prefix * @param log Console Logging Status * @param file File to log to (or null for disabled) */ - public InternalSubLogger(Process process, String name, Container log, File file) { + public InternalSubLogger(Process process, Object user, String name, Container log, File file) { this.process = process; + this.handle = user; this.name = name; this.log = log; this.file = file; @@ -55,6 +58,7 @@ public class InternalSubLogger extends SubLogger { } if (out == null) (out = new Thread(() -> start(process.getInputStream(), false))).start(); if (err == null) (err = new Thread(() -> start(process.getErrorStream(), true))).start(); + for (SubLogFilter filter : filters) filter.start(); } private void start(InputStream in, boolean isErr) { @@ -136,6 +140,7 @@ public class InternalSubLogger extends SubLogger { private void destroy() { if (started) { started = false; + for (SubLogFilter filter : filters) filter.stop(); if (writer != null) { int l = (int) Math.floor((("---------- LOG START \u2014 " + name + " ----------").length() - 9) / 2); String s = ""; @@ -147,6 +152,11 @@ public class InternalSubLogger extends SubLogger { } } + @Override + public Object getHandle() { + return handle; + } + @Override public String getName() { return name; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java index 411e0c47..fc42adda 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java @@ -62,7 +62,7 @@ public class InternalSubServer extends SubServer { this.executable = executable; this.stopcmd = stopcmd; this.process = null; - this.logger = new InternalSubLogger(null, getName(), this.log, null); + this.logger = new InternalSubLogger(null, this, getName(), this.log, null); this.thread = null; this.command = null; this.restart = restart; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java index 92f9534f..c152bbfb 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java @@ -72,6 +72,13 @@ public abstract class SubCreator { */ public abstract String getGitBashDirectory(); + /** + * Gets the Logger for the creator + * + * @return + */ + public abstract SubLogger getLogger(); + /** * Gets the status of SubCreator * diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogFilter.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogFilter.java index 732026fd..624ea6b6 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogFilter.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogFilter.java @@ -7,6 +7,11 @@ import java.util.logging.Level; */ public interface SubLogFilter { + /** + * Called when the logging has started + */ + void start(); + /** * Determine if this message should be logged * @@ -15,4 +20,9 @@ public interface SubLogFilter { * @return If this message should be logged */ boolean log(Level level, String message); + + /** + * Called when the logging has stopped + */ + void stop(); } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogger.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogger.java index 7e163502..ed71dd12 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogger.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogger.java @@ -12,6 +12,13 @@ public abstract class SubLogger { */ public abstract String getName(); + /** + * Gets the Object using this Logger + * + * @return Object + */ + public abstract Object getHandle(); + /** * Start Logger */ diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/bungee.yml b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/bungee.yml index 46c8fe4d..382d39ef 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/bungee.yml +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/bungee.yml @@ -3,7 +3,7 @@ network_compression_threshold: 256 stats: 'undefined' permissions: default: - - bungeecord.command.server + - bungeecord.command.logger - bungeecord.command.list admin: - bungeecord.command.find @@ -21,7 +21,7 @@ servers: timeout: 30000 listeners: - query_port: 25564 - motd: '&1Another Bungee server' + motd: '&1Another Bungee logger' priorities: - Lobby bind_local_address: true diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml index 93e3df7d..4e8e2df9 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml @@ -3,9 +3,9 @@ Lang: 'Bungee.Server.Current': '&6You are currently connected to $str$' 'Bungee.Server.Available': '&6You may connect to the following servers at this time:' 'Bungee.Server.List': '&6$str$' - 'Bungee.Server.Hover': '$int$ player(s)\n&oClick to connect to the server' + 'Bungee.Server.Hover': '$int$ player(s)\n&oClick to connect to the logger' 'Bungee.Server.Divider': '&6, ' - 'Bungee.Server.Invalid': '&cThe specified server does not exist.' + 'Bungee.Server.Invalid': '&cThe specified logger does not exist.' 'Bungee.List.Format': '&a[$str$] &e($int$): ' 'Bungee.List.List': '&f$str$' 'Bungee.List.Divider': '&f, ' @@ -31,31 +31,31 @@ Lang: 'Command.List.Server-Header': '&7SubServers \u00BB Server List:' 'Command.List.Divider': '&7, ' 'Command.Start': '&aSubServers \u00BB Starting SubServer' - 'Command.Start.Unknown': '&cSubServers \u00BB There is no server with that name' + 'Command.Start.Unknown': '&cSubServers \u00BB There is no logger with that name' 'Command.Start.Invalid': '&cSubServers \u00BB That Server is not a SubServer' 'Command.Start.Host-Disabled': '&cSubServers \u00BB That SubServer\u0027s Host is not enabled' 'Command.Start.Server-Disabled': '&cSubServers \u00BB That SubServer is not enabled' 'Command.Start.Running': '&cSubServers \u00BB That SubServer is already running' 'Command.Stop': '&aSubServers \u00BB Stopping SubServer' - 'Command.Stop.Unknown': '&cSubServers \u00BB There is no server with that name' + 'Command.Stop.Unknown': '&cSubServers \u00BB There is no logger with that name' 'Command.Stop.Invalid': '&cSubServers \u00BB That Server is not a SubServer' 'Command.Stop.Not-Running': '&cSubServers \u00BB That SubServer is not running' 'Command.Terminate': '&aSubServers \u00BB Stopping SubServer' - 'Command.Terminate.Unknown': '&cSubServers \u00BB There is no server with that name' + 'Command.Terminate.Unknown': '&cSubServers \u00BB There is no logger with that name' 'Command.Terminate.Invalid': '&cSubServers \u00BB That Server is not a SubServer' 'Command.Terminate.Not-Running': '&cSubServers \u00BB That SubServer is not running' 'Command.Command': '&aSubServers \u00BB Sending command to SubServer' - 'Command.Command.Unknown': '&cSubServers \u00BB There is no server with that name' + 'Command.Command.Unknown': '&cSubServers \u00BB There is no logger with that name' 'Command.Command.Invalid': '&cSubServers \u00BB That Server is not a SubServer' 'Command.Command.Not-Running': '&cSubServers \u00BB That SubServer is not running' 'Command.Teleport': '&aSubServers \u00BB Teleporting...' 'Command.Teleport.Offline': '&cSubServers \u00BB There is no player online with that name' - 'Command.Teleport.Invalid': '&cSubServers \u00BB There is no server with that name' + 'Command.Teleport.Invalid': '&cSubServers \u00BB There is no logger with that name' 'Command.Creator': '&aSubServers \u00BB Creating SubServer' 'Command.Creator.Exists': '&cSubServers \u00BB There is already a SubServer with that name' 'Command.Creator.Unknown-Host': '&cSubServers \u00BB There is no host with that name' 'Command.Creator.Running': '&cSubServers \u00BB The SubCreator instance on that host is already running' - 'Command.Creator.Invalid-Type': '&cSubServers \u00BB There is no server type with that name' + 'Command.Creator.Invalid-Type': '&cSubServers \u00BB There is no logger type with that name' 'Command.Creator.Invalid-Version': '&cSubServers \u00BB SubCreator cannot create servers before Minecraft 1.8' 'Command.Creator.Invalid-Port': '&cSubServers \u00BB Invalid Port Number' 'Command.Creator.Invalid-Memory': '&cSubServers \u00BB Invalid RAM Amount' @@ -90,8 +90,8 @@ Lang: 'Interface.Host-Creator.Edit-Type': 'Change Server Type' 'Interface.Host-Creator.Edit-Type.Title': '&eSubCreator\n&6Enter a Type of Server' 'Interface.Host-Creator.Edit-Type.Message': '&eSubCreator \u00BB Enter a Type of Server via Chat' - 'Interface.Host-Creator.Edit-Type.Invalid': '&cSubCreator \u00BB There is no server type with that name' - 'Interface.Host-Creator.Edit-Type.Invalid-Title': '&eSubCreator\n&cThere is no server type with that name' + 'Interface.Host-Creator.Edit-Type.Invalid': '&cSubCreator \u00BB There is no logger type with that name' + 'Interface.Host-Creator.Edit-Type.Invalid-Title': '&eSubCreator\n&cThere is no logger type with that name' 'Interface.Host-Creator.Edit-Version': 'Change Server Version' 'Interface.Host-Creator.Edit-Version.Title': '&eSubCreator\n&6Enter a Server Version' 'Interface.Host-Creator.Edit-Version.Message': '&eSubCreator \u00BB Enter a Server Version via Chat' diff --git a/SubServers.Client/Bukkit/src/plugin.yml b/SubServers.Client/Bukkit/src/plugin.yml index b2d92859..8cff74b6 100644 --- a/SubServers.Client/Bukkit/src/plugin.yml +++ b/SubServers.Client/Bukkit/src/plugin.yml @@ -51,13 +51,13 @@ permissions: subservers.subserver.command.*: description: 'Grants Access to Send Commands to a SubServer' default: op - subservers.server.*: + subservers.logger.*: description: 'Grants Access to SubServer Server Actions' default: op children: - subservers.server.teleport-others: + subservers.logger.teleport-others: description: 'Grants Acces to Teleport Others to a Server' default: op - subservers.server.teleport.*: + subservers.logger.teleport.*: description: 'Grants Acces to Teleport to a Server' default: op \ No newline at end of file diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsolePlugin.java b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsolePlugin.java index 5d8f84e2..f9541056 100644 --- a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsolePlugin.java +++ b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsolePlugin.java @@ -1,7 +1,8 @@ package net.ME1312.SubServers.Console; +import net.ME1312.SubServers.Bungee.Event.SubCreateEvent; +import net.ME1312.SubServers.Bungee.Event.SubSendCommandEvent; import net.ME1312.SubServers.Bungee.Event.SubStartEvent; -import net.ME1312.SubServers.Bungee.Event.SubStoppedEvent; import net.ME1312.SubServers.Bungee.Library.Config.YAMLConfig; import net.ME1312.SubServers.Bungee.SubPlugin; import net.md_5.bungee.api.plugin.Listener; @@ -9,13 +10,15 @@ import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; +import javax.swing.*; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.HashMap; public class ConsolePlugin extends Plugin implements Listener { - public HashMap current = new HashMap(); + public HashMap cCurrent = new HashMap(); + public HashMap sCurrent = new HashMap(); public YAMLConfig config; @Override @@ -23,33 +26,56 @@ public class ConsolePlugin extends Plugin implements Listener { try { getDataFolder().mkdirs(); config = new YAMLConfig(new File(getDataFolder(), "config.yml")); + boolean save = false; if (!config.get().getKeys().contains("Enabled-Servers")) { config.get().set("Enabled-Servers", Collections.emptyList()); - config.save(); + save = true; + } if (!config.get().getKeys().contains("Enabled-Creators")) { + config.get().set("Enabled-Creators", Collections.emptyList()); } getProxy().getPluginManager().registerListener(this, this); - getProxy().getPluginManager().registerCommand(this, new PopoutCommand(this, "popout")); + getProxy().getPluginManager().registerCommand(this, new PopoutCommand.SERVER(this, "popout")); + getProxy().getPluginManager().registerCommand(this, new PopoutCommand.SERVER(this, "popouts")); + getProxy().getPluginManager().registerCommand(this, new PopoutCommand.CREATOR(this, "popoutc")); + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + new JFrame("SubServers 2"); + } catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException | IllegalAccessException e) { + e.printStackTrace(); + } } catch (IOException e) { e.printStackTrace(); } } @EventHandler(priority = EventPriority.HIGHEST) - public void onServerStart(SubStartEvent event) { - if (!event.isCancelled() && config.get().getStringList("Enabled-Servers").contains(event.getServer().getName().toLowerCase())) { - ConsoleWindow window = new ConsoleWindow(event.getServer()); - current.put(event.getServer().getName().toLowerCase(), window); - window.open(); + public void onServerCreate(SubCreateEvent event) { + if (!event.isCancelled() && config.get().getStringList("Enabled-Creators").contains(event.getHost().getName().toLowerCase())) { + if (!cCurrent.keySet().contains(event.getHost().getName().toLowerCase())) { + cCurrent.put(event.getHost().getName().toLowerCase(), new ConsoleWindow(event.getHost().getCreator().getLogger())); + } else { + cCurrent.get(event.getHost().getName().toLowerCase()).clear(); + } } } - @EventHandler - public void onServerStop(SubStoppedEvent event) { - if (current.keySet().contains(event.getServer().getName().toLowerCase())) { - current.get(event.getServer().getName().toLowerCase()).close(); - current.remove(event.getServer().getName().toLowerCase()); + @EventHandler(priority = EventPriority.HIGHEST) + public void onServerStart(SubStartEvent event) { + if (!event.isCancelled() && config.get().getStringList("Enabled-Servers").contains(event.getServer().getName().toLowerCase())) { + if (!sCurrent.keySet().contains(event.getServer().getName().toLowerCase())) { + sCurrent.put(event.getServer().getName().toLowerCase(), new ConsoleWindow(event.getServer().getLogger())); + } else { + sCurrent.get(event.getServer().getName().toLowerCase()).clear(); + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onServerCommand(SubSendCommandEvent event) { + if (!event.isCancelled() && sCurrent.keySet().contains(event.getServer().getName().toLowerCase())) { + sCurrent.get(event.getServer().getName().toLowerCase()).log('<' + ((event.getPlayer() == null)?"CONSOLE":((getProxy().getPlayer(event.getPlayer()) == null)?event.getPlayer().toString():getProxy().getPlayer(event.getPlayer()).getName())) + "> /" + event.getCommand()); } } diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.form b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.form index 668c96f9..baaa29ad 100644 --- a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.form +++ b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.form @@ -1,6 +1,6 @@
- + @@ -11,47 +11,57 @@ - + - + + + - + - + - + - + + + - + + + + + + + - + @@ -60,6 +70,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java index 236219b3..a936a240 100644 --- a/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java +++ b/SubServers.Console/src/net/ME1312/SubServers/Console/ConsoleWindow.java @@ -1,117 +1,371 @@ package net.ME1312.SubServers.Console; import net.ME1312.SubServers.Bungee.Host.SubLogFilter; +import net.ME1312.SubServers.Bungee.Host.SubLogger; import net.ME1312.SubServers.Bungee.Host.SubServer; import javax.swing.*; -import javax.swing.text.DefaultCaret; -import javax.swing.text.DefaultEditorKit; -import javax.swing.text.JTextComponent; -import javax.swing.text.TextAction; +import javax.swing.text.*; import java.awt.*; import java.awt.event.*; +import java.lang.reflect.InvocationTargetException; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Collections; -import java.util.LinkedList; +import java.util.*; +import java.util.List; import java.util.logging.Level; -public class ConsoleWindow extends JFrame implements SubLogFilter { - private JPanel window; +public class ConsoleWindow implements SubLogFilter { + private JFrame window; + private JPanel panel; private JTextField input; private TextFieldPopup popup; private JTextArea log; - private JScrollPane scroll; + private JScrollPane vScroll; + private JScrollBar hScroll; + private List eScroll = new ArrayList(); + private JPanel find; + private JTextField findT; + private JButton findN; + private JButton findP; + private JButton findD; + private int findO = 0; + private int findI = 0; + private List events; + private boolean running; private boolean open; - private SubServer server; + private SubLogger logger; + private KeyEventDispatcher keys = event -> { + if (window.isVisible() && window.isFocused()) { + switch (event.getID()) { + case KeyEvent.KEY_PRESSED: + if (event.getKeyCode() == KeyEvent.VK_UP) { + popup.prev(input); + } + break; - public ConsoleWindow(SubServer server) { - this.server = server; - this.open = false; - - JMenuBar jMenu = new JMenuBar(); - JMenu menu = new JMenu("View"); - JMenuItem item = new JMenuItem("Scroll to Top"); - item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> scroll.getVerticalScrollBar().setValue(0)); - menu.add(item); - item = new JMenuItem("Scroll to Bottom"); - item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum() - scroll.getVerticalScrollBar().getVisibleAmount())); - menu.add(item); - menu.addSeparator(); - item = new JMenuItem("Reset Text Size"); - item.addActionListener(event -> log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), 12))); - menu.add(item); - item = new JMenuItem("Bigger Text"); - item.setAccelerator(KeyStroke.getKeyStroke('=', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() + KeyEvent.SHIFT_MASK, true)); - item.addActionListener(event -> log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), log.getFont().getSize() + 2))); - menu.add(item); - item = new JMenuItem("Smaller Text"); - item.setAccelerator(KeyStroke.getKeyStroke('-', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); - item.addActionListener(event -> log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), log.getFont().getSize() - 2))); - menu.add(item); - jMenu.add(menu); - setJMenuBar(jMenu); - setContentPane(window); - pack(); - setTitle(server.getName() + " \u2014 SubServers 2"); - setSize(1024, 576); - Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); - int x = (int) ((dimension.getWidth() - getWidth()) / 2); - int y = (int) ((dimension.getHeight() - getHeight()) / 2); - setLocation(x, y); - setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - close(); + case KeyEvent.KEY_RELEASED: + if (event.getKeyCode() == KeyEvent.VK_DOWN) { + popup.next(input); + } + break; } + } + return false; + }; + + public ConsoleWindow(SubLogger logger) { + this.logger = logger; + this.open = false; + this.running = false; + this.events = new LinkedList(); + + events.add(() -> { + window = new JFrame(); + + JMenuBar jMenu = new JMenuBar(); + JMenu menu = new JMenu("View"); + JMenuItem item = new JMenuItem("Scroll to Top"); + item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> vScroll.getVerticalScrollBar().setValue(0)); + menu.add(item); + item = new JMenuItem("Scroll to Bottom"); + item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> vScroll.getVerticalScrollBar().setValue(vScroll.getVerticalScrollBar().getMaximum() - vScroll.getVerticalScrollBar().getVisibleAmount())); + menu.add(item); + item = new JMenuItem("Find"); + item.setAccelerator(KeyStroke.getKeyStroke('F', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> { + if (find.isVisible()) { + find.setVisible(false); + findI = 0; + findO = 0; + } else { + find.setVisible(true); + findT.selectAll(); + findT.requestFocusInWindow(); + } + }); + menu.add(item); + menu.addSeparator(); + item = new JMenuItem("Reset Text Size"); + item.addActionListener(event -> { + log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), 12)); + SwingUtilities.invokeLater(this::hScroll); + }); + menu.add(item); + item = new JMenuItem("Bigger Text"); + item.setAccelerator(KeyStroke.getKeyStroke('=', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> { + log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), log.getFont().getSize() + 2)); + SwingUtilities.invokeLater(this::hScroll); + }); + menu.add(item); + item = new JMenuItem("Smaller Text"); + item.setAccelerator(KeyStroke.getKeyStroke('-', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> { + log.setFont(new Font(log.getFont().getName(), log.getFont().getStyle(), log.getFont().getSize() - 2)); + SwingUtilities.invokeLater(this::hScroll); + }); + menu.add(item); + menu.addSeparator(); + item = new JMenuItem("Clear Screen"); + item.setAccelerator(KeyStroke.getKeyStroke('L', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), true)); + item.addActionListener(event -> clear()); + menu.add(item); + jMenu.add(menu); + window.setJMenuBar(jMenu); + window.setContentPane(panel); + window.pack(); + window.setTitle(logger.getName() + " \u2014 SubServers 2"); + window.setSize(1024, 576); + Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); + int x = (int) ((dimension.getWidth() - window.getWidth()) / 2); + int y = (int) ((dimension.getHeight() - window.getHeight()) / 2); + window.setLocation(x, y); + window.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + window.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + close(); + } + }); + vScroll.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); + new SmartScroller(vScroll, SmartScroller.VERTICAL, SmartScroller.END); + log.setText("\n"); + log.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); + new TextFieldPopup(log, false); + ((AbstractDocument) log.getDocument()).setDocumentFilter(new DocumentFilter() { + @Override + public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { + super.insertString(fb, offset, string, attr); + hScroll(); + } + + @Override + public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { + super.replace(fb, offset, length, text, attrs); + hScroll(); + } + + @Override + public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { + super.remove(fb, offset, length); + hScroll(); + } + }); + + + popup = new TextFieldPopup(input, true); + input.setBorder(BorderFactory.createLineBorder(new Color(69, 73, 74))); + input.addActionListener((ActionEvent event) -> { + if (logger.getHandle() instanceof SubServer && input.getText().length() > 0 && !input.getText().equals(">")) { + if (((SubServer) logger.getHandle()).command((input.getText().startsWith(">")) ? input.getText().substring(1) : input.getText())) { + popup.commands.add((input.getText().startsWith(">")) ? input.getText().substring(1) : input.getText()); + popup.current = 0; + popup.last = true; + input.setText(""); + } + } + }); + ((AbstractDocument) input.getDocument()).setDocumentFilter(new DocumentFilter() { + @Override + public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { + if (offset < 1) { + return; + } + super.insertString(fb, offset, string, attr); + } + + @Override + public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { + if (offset < 1) { + length = Math.max(0, length - 1); + offset = 1; + } + super.replace(fb, offset, length, text, attrs); + } + + @Override + public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { + if (offset < 1) { + length = Math.max(0, length + offset - 1); + offset = 1; + } + if (length > 0) { + super.remove(fb, offset, length); + } + } + }); + + vScroll.getHorizontalScrollBar().addAdjustmentListener(event -> { + if (!eScroll.contains(event.getValue())) { + eScroll.add(event.getValue()); + hScroll.setValue(event.getValue()); + } else { + eScroll.remove((Object) event.getValue()); + } + }); + hScroll.addAdjustmentListener(event -> { + if (!eScroll.contains(event.getValue())) { + eScroll.add(event.getValue()); + vScroll.getHorizontalScrollBar().setValue(event.getValue()); + } else { + eScroll.remove((Object) event.getValue()); + } + }); + + new TextFieldPopup(findT, false); + findT.setBorder(BorderFactory.createLineBorder(new Color(69, 73, 74))); + findP.addActionListener(event -> find(false)); + findN.addActionListener(event -> find(true)); + findD.addActionListener(event -> { + find.setVisible(false); + findI = 0; + findO = 0; + }); + + + if (!(logger.getHandle() instanceof SubServer)) { + input.setVisible(false); + hScroll.setVisible(false); + vScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); + } + + KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keys); }); - scroll.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); - scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); - new SmartScroller(scroll, SmartScroller.VERTICAL, SmartScroller.END); - log.setText("\n"); - log.setForeground(Color.WHITE); - log.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); - new TextFieldPopup(log); - input.setForeground(Color.WHITE); - input.setBorder(BorderFactory.createLineBorder(new Color(40, 44, 45))); - popup = new TextFieldPopup(input); - input.addActionListener(event -> { - if (input.getText().length() > 0 && !input.getText().equals("/")) server.command((input.getText().startsWith("/"))?input.getText().substring(1):input.getText()); - popup.commands.add(input.getText()); - popup.current = 0; - popup.last = true; - input.setText("/"); - }); - input.setText("/"); - server.getLogger().registerFilter(this); + logger.registerFilter(this); + runEvents(); } + private void hScroll() { + hScroll.setMaximum(vScroll.getHorizontalScrollBar().getMaximum()); + hScroll.setMinimum(vScroll.getHorizontalScrollBar().getMinimum()); + hScroll.setVisibleAmount(vScroll.getHorizontalScrollBar().getVisibleAmount()); + } + + private void find(boolean direction) { + if (!direction) findI -= findO + 1; + String find = findT.getText().toLowerCase(); + log.requestFocusInWindow(); + + if (find.length() > 0) { + Document document = log.getDocument(); + int findLength = find.length(); + try { + boolean found = false; + + if (findI + findLength >= document.getLength()) findI = 1; + + while (findLength <= document.getLength()) { + String match = document.getText(findI, findLength).toLowerCase(); + if (match.equals(find)) { + found = true; + break; + } + if (direction) findI++; + else findI--; + } + + if (found) { + Rectangle viewRect = log.modelToView(findI); + log.scrollRectToVisible(viewRect); + + log.setCaretPosition(findI + findLength); + log.moveCaretPosition(findI); + + findI += findLength; + findO = findLength; + } + + } catch (BadLocationException e) { + findI = log.getText().length() - 1; + JOptionPane.showMessageDialog(window, + "There are no more results\nSearch again to start from the " + ((direction)?"top":"bottom"), + "Find", + JOptionPane.WARNING_MESSAGE); + } + } + } + + public void clear() { + events.add(() -> log.setText("\n")); + runEvents(); + } + + public void log(String message) { + events.add(() -> log.setText(log.getText() + ' ' + new SimpleDateFormat("hh:mm:ss").format(Calendar.getInstance().getTime()) + ' ' + message + " \n")); + runEvents(); + } @Override public boolean log(Level level, String message) { - log.setText(log.getText() + ' ' + new SimpleDateFormat("hh:mm:ss").format(Calendar.getInstance().getTime()) + " [" + level.getLocalizedName() + "] " + message + " \n"); + log("[" + level.getLocalizedName() + "] " + message); return !open; } - public SubServer getServer() { - return server; + public boolean runEvents() { + return runEvents(false); } + private boolean runEvents(boolean force) { + if (events.size() > 0 && (force || !running)) { + running = true; + final Runnable event = events.get(0); + SwingUtilities.invokeLater(() -> { + try { + event.run(); + } catch (Throwable e) { + new InvocationTargetException(e, "Exception while running SubServers Console Window Event").printStackTrace(); + } + events.remove(0); + if (!runEvents(true)) running = false; + }); + + return true; + } else return false; + } + + @Override + public void start() { + open(); + } public void open() { - if (!open) { - setVisible(true); - toFront(); - this.open = true; - } + events.add(() -> { + if (!open) { + window.setVisible(true); + this.open = true; + } + window.toFront(); + }); + runEvents(); } + public SubLogger getLogger() { + return logger; + } + + @Override + public void stop() { + close(); + } public void close() { - if (open) { - this.open = false; - setVisible(false); - } + events.add(() -> { + if (open) { + this.open = false; + if (find.isVisible()) { + find.setVisible(false); + findI = 0; + findO = 0; + } + window.setVisible(false); + } + }); + runEvents(); + } + + public void destroy() { + close(); + logger.unregisterFilter(this); + KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(keys); } private class TextFieldPopup extends JPanel { @@ -119,44 +373,26 @@ public class ConsoleWindow extends JFrame implements SubLogFilter { protected int current = 0; protected boolean last = true; - public TextFieldPopup(JTextComponent field) { + public TextFieldPopup(JTextComponent field, boolean command) { JPopupMenu menu = new JPopupMenu(); if (field.isEditable()) { - Action backward = new TextAction("Previous Command") { - public void actionPerformed(ActionEvent e) { - JTextComponent field = getFocusedComponent(); - if (field.isEditable()) { - LinkedList list = new LinkedList(commands); - Collections.reverse(list); - if (list.size() > current) { - if (!last) current++; - last = true; - field.setText(list.get(current++)); - } + if (command) { + Action backward = new TextAction("Previous Command") { + public void actionPerformed(ActionEvent e) { + prev(getFocusedComponent()); } - } - }; - // TODO find a good shortcut key combo - menu.add(backward); + }; + menu.add(backward); - Action forward = new TextAction("Next Command") { - public void actionPerformed(ActionEvent e) { - JTextComponent field = getFocusedComponent(); - if (field.isEditable()) { - LinkedList list = new LinkedList(commands); - Collections.reverse(list); - if (current > 0) { - if (last) current--; - last = false; - field.setText(list.get(--current)); - } else field.setText("/"); + Action forward = new TextAction("Next Command") { + public void actionPerformed(ActionEvent e) { + next(getFocusedComponent()); } - } - }; - // TODO find a good shortcut key combo - menu.add(forward); - menu.addSeparator(); + }; + menu.add(forward); + menu.addSeparator(); + } Action cut = new DefaultEditorKit.CutAction(); cut.putValue(Action.NAME, "Cut"); @@ -188,6 +424,32 @@ public class ConsoleWindow extends JFrame implements SubLogFilter { field.setComponentPopupMenu(menu); } + + public void next(JTextComponent field) { + if (field.isEditable()) { + LinkedList list = new LinkedList(commands); + Collections.reverse(list); + if (current > 0) { + if (last && current != 1) current--; + last = false; + field.setText(list.get(--current)); + } else field.setText(""); + field.setCaretPosition(field.getText().length()); + } + } + + public void prev(JTextComponent field) { + if (field.isEditable()) { + LinkedList list = new LinkedList(commands); + Collections.reverse(list); + if (list.size() > current) { + if (!last) current++; + last = true; + field.setText(list.get(current++)); + field.setCaretPosition(field.getText().length()); + } + } + } } private class SmartScroller implements AdjustmentListener { public final static int HORIZONTAL = 0; @@ -218,7 +480,7 @@ public class ConsoleWindow extends JFrame implements SubLogFilter { { if (scrollDirection != HORIZONTAL && scrollDirection != VERTICAL) - throw new IllegalArgumentException("invalid scroll direction specified"); + throw new IllegalArgumentException("invalid vScroll direction specified"); if (viewportPosition != START && viewportPosition != END) @@ -263,7 +525,7 @@ public class ConsoleWindow extends JFrame implements SubLogFilter { */ private void checkScrollBar(AdjustmentEvent e) { - // The scroll bar listModel contains information needed to determine + // The vScroll bar listModel contains information needed to determine // whether the viewport should be repositioned or not. JScrollBar scrollBar = (JScrollBar)e.getSource(); @@ -286,8 +548,8 @@ public class ConsoleWindow extends JFrame implements SubLogFilter { } // Reset the "value" so we can reposition the viewport and - // distinguish between a user scroll and a program scroll. - // (ie. valueChanged will be false on a program scroll) + // distinguish between a user vScroll and a program vScroll. + // (ie. valueChanged will be false on a program vScroll) if (adjustScrollBar && viewportPosition == END) { diff --git a/SubServers.Console/src/net/ME1312/SubServers/Console/PopoutCommand.java b/SubServers.Console/src/net/ME1312/SubServers/Console/PopoutCommand.java index 0e35823c..9c30dab8 100644 --- a/SubServers.Console/src/net/ME1312/SubServers/Console/PopoutCommand.java +++ b/SubServers.Console/src/net/ME1312/SubServers/Console/PopoutCommand.java @@ -1,5 +1,6 @@ package net.ME1312.SubServers.Console; +import net.ME1312.SubServers.Bungee.Host.Host; import net.ME1312.SubServers.Bungee.Host.SubServer; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -9,67 +10,138 @@ import net.md_5.bungee.command.ConsoleCommandSender; import java.util.List; import java.util.Map; -public class PopoutCommand extends Command { - private ConsolePlugin plugin; - private String label; +public class PopoutCommand { + private PopoutCommand() {} + public static class SERVER extends Command { + private ConsolePlugin plugin; + private String label; - public PopoutCommand(ConsolePlugin plugin, String command) { - super(command); - this.plugin = plugin; - this.label = command; - } + public SERVER(ConsolePlugin plugin, String command) { + super(command); + this.plugin = plugin; + this.label = command; + } - @Override - public void execute(CommandSender sender, String[] args) { - if (sender instanceof ConsoleCommandSender) { - if (args.length > 0) { - Map servers = plugin.getProxy().api.getSubServers(); - if (servers.keySet().contains(args[0].toLowerCase())) { - boolean success = false; - if (servers.get(args[0].toLowerCase()).isRunning()) { - if (!plugin.current.keySet().contains(args[0].toLowerCase())) { - ConsoleWindow window = new ConsoleWindow(servers.get(args[0].toLowerCase())); - plugin.current.put(args[0].toLowerCase(), window); - window.open(); - } else { - plugin.current.get(args[0].toLowerCase()).open(); - } - System.out.println("SubConsole > Opening Window..."); - success = true; - } - - try { - if (args.length > 1) { - if (args[1].equalsIgnoreCase("true")) { - List list = plugin.config.get().getStringList("Enabled-Servers"); - list.add(args[0].toLowerCase()); - plugin.config.get().set("Enabled-Servers", list); - plugin.config.save(); - if (!success) System.out.println("SubConsole > " + servers.get(args[0].toLowerCase()).getName() + " was added to the enabled list"); - success = true; - } else if (args[1].equalsIgnoreCase("false")) { - List list = plugin.config.get().getStringList("Enabled-Servers"); - list.remove(args[0].toLowerCase()); - plugin.config.get().set("Enabled-Servers", list); - if (!success) System.out.println("SubConsole > " + servers.get(args[0].toLowerCase()).getName() + " was removed from the enabled list"); - success = true; + @Override + public void execute(CommandSender sender, String[] args) { + if (sender instanceof ConsoleCommandSender) { + if (args.length > 0) { + Map servers = plugin.getProxy().api.getSubServers(); + if (servers.keySet().contains(args[0].toLowerCase())) { + boolean success = false; + if (servers.get(args[0].toLowerCase()).isRunning()) { + if (!plugin.sCurrent.keySet().contains(args[0].toLowerCase())) { + ConsoleWindow window = new ConsoleWindow(servers.get(args[0].toLowerCase()).getLogger()); + plugin.sCurrent.put(args[0].toLowerCase(), window); + window.open(); + } else { + plugin.sCurrent.get(args[0].toLowerCase()).open(); } + System.out.println("SubConsole > Opening Window..."); + success = true; } - } catch (Exception e) { - e.printStackTrace(); - } - if (!success) System.out.println("SubConsole > That SubServer is not running right now."); + try { + if (args.length > 1) { + if (args[1].equalsIgnoreCase("true")) { + if (!plugin.config.get().getStringList("Enabled-Servers").contains(args[0].toLowerCase())) { + List list = plugin.config.get().getStringList("Enabled-Servers"); + list.add(args[0].toLowerCase()); + plugin.config.get().set("Enabled-Servers", list); + plugin.config.save(); + } + if (!success) System.out.println("SubConsole > " + servers.get(args[0].toLowerCase()).getName() + " was added to the enabled list"); + success = true; + } else if (args[1].equalsIgnoreCase("false")) { + List list = plugin.config.get().getStringList("Enabled-Servers"); + list.remove(args[0].toLowerCase()); + plugin.config.get().set("Enabled-Servers", list); + if (!success) System.out.println("SubConsole > " + servers.get(args[0].toLowerCase()).getName() + " was removed from the enabled list"); + success = true; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + if (!success) System.out.println("SubConsole > That SubServer is not running right now."); + } else { + System.out.println("SubConsole > There is no SubServer with that name."); + } } else { - System.out.println("SubConsole > There is no SubServer with that name."); + System.out.println("SubConsole > Usage: /" + label + " [Remember]"); } } else { - System.out.println("SubConsole > Usage: /" + label + " [Remember]"); + String str = label; + for (String arg : args) str += ' ' + arg; + ((ProxiedPlayer) sender).chat(str); + } + } + } + public static class CREATOR extends Command { + private ConsolePlugin plugin; + private String label; + + public CREATOR(ConsolePlugin plugin, String command) { + super(command); + this.plugin = plugin; + this.label = command; + } + + @Override + public void execute(CommandSender sender, String[] args) { + if (sender instanceof ConsoleCommandSender) { + if (args.length > 0) { + Map hosts = plugin.getProxy().api.getHosts(); + if (hosts.keySet().contains(args[0].toLowerCase())) { + boolean success = false; + if (hosts.get(args[0].toLowerCase()).getCreator().isBusy()) { + if (!plugin.cCurrent.keySet().contains(args[0].toLowerCase())) { + ConsoleWindow window = new ConsoleWindow(hosts.get(args[0].toLowerCase()).getCreator().getLogger()); + plugin.cCurrent.put(args[0].toLowerCase(), window); + window.open(); + } else { + plugin.cCurrent.get(args[0].toLowerCase()).open(); + } + System.out.println("SubConsole > Opening Window..."); + success = true; + } + + try { + if (args.length > 1) { + if (args[1].equalsIgnoreCase("true")) { + if (!plugin.config.get().getStringList("Enabled-Creators").contains(args[0].toLowerCase())) { + List list = plugin.config.get().getStringList("Enabled-Creators"); + list.add(args[0].toLowerCase()); + plugin.config.get().set("Enabled-Creators", list); + plugin.config.save(); + } + if (!success) System.out.println("SubConsole > " + hosts.get(args[0].toLowerCase()).getName() + "/Creator was added to the enabled list"); + success = true; + } else if (args[1].equalsIgnoreCase("false")) { + List list = plugin.config.get().getStringList("Enabled-Creators"); + list.remove(args[0].toLowerCase()); + plugin.config.get().set("Enabled-Creators", list); + if (!success) System.out.println("SubConsole > " + hosts.get(args[0].toLowerCase()).getName() + "/Creator was removed from the enabled list"); + success = true; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + if (!success) System.out.println("SubConsole > That Host's Creator is not running right now."); + } else { + System.out.println("SubConsole > There is no Host with that name."); + } + } else { + System.out.println("SubConsole > Usage: /" + label + " [Remember]"); + } + } else { + String str = label; + for (String arg : args) str += ' ' + arg; + ((ProxiedPlayer) sender).chat(str); } - } else { - String str = label; - for (String arg : args) str += ' ' + arg; - ((ProxiedPlayer) sender).chat(str); } } }