diff --git a/pom.xml b/pom.xml index e992e4c..185451d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 Limbo Limbo - 0.3.0-ALPHA + 0.3.1-ALPHA src @@ -68,31 +68,48 @@ com.github.Querz NBT 5.5 + compile com.google.code.gson gson 2.8.5 + compile org.yaml snakeyaml 1.26 + compile com.googlecode.json-simple json-simple 1.1.1 + compile net.md-5 bungeecord-chat 1.16-R0.3 + compile + + + org.fusesource.jansi + jansi + 1.18 + compile + + + org.jline + jline + 3.16.0 + compile jline jline - 2.6 + 2.11 compile diff --git a/src/com/loohp/limbo/Console.java b/src/com/loohp/limbo/Console.java index 29cefa9..73eb405 100644 --- a/src/com/loohp/limbo/Console.java +++ b/src/com/loohp/limbo/Console.java @@ -1,36 +1,59 @@ package com.loohp.limbo; -import java.io.BufferedReader; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; +import java.util.List; import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; import java.util.stream.Collectors; +import org.fusesource.jansi.Ansi; +import org.fusesource.jansi.Ansi.Attribute; +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; +import org.jline.reader.LineReader.SuggestionType; +import org.jline.reader.LineReaderBuilder; +import org.jline.reader.ParsedLine; +import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; + import com.loohp.limbo.Commands.CommandSender; import com.loohp.limbo.GUI.ConsoleTextOutput; import com.loohp.limbo.Utils.CustomStringUtils; +import jline.console.ConsoleReader; +import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.BaseComponent; public class Console implements CommandSender { + protected static final Map replacements = new HashMap<>(); + private final static String CONSOLE = "CONSOLE"; + private final static String PROMPT = "> "; + protected final static String ERROR_RED = "\u001B[31;1m"; + protected final static String RESET_COLOR = "\u001B[0m"; + + private Terminal terminal; + private LineReader tabReader; + private ConsoleReader reader; + private InputStream in; + @SuppressWarnings("unused") private PrintStream out; @SuppressWarnings("unused") private PrintStream err; protected PrintStream logs; - private final String CONSOLE = "CONSOLE"; - - public Console(InputStream in, PrintStream out, PrintStream err) throws FileNotFoundException { + public Console(InputStream in, PrintStream out, PrintStream err) throws IOException { String fileName = new SimpleDateFormat("yyyy'-'MM'-'dd'_'HH'-'mm'-'ss'_'zzz'.log'").format(new Date()); File dir = new File("logs"); dir.mkdirs(); @@ -43,20 +66,38 @@ public class Console implements CommandSender { } else { this.in = null; } - System.setOut(new ConsoleOutputStream(out == null ? new PrintStream(new PrintStream(new OutputStream() { + System.setOut(new ConsoleOutputStream(this, out == null ? new PrintStream(new OutputStream() { @Override public void write(int b) { //DO NOTHING } - })) : out, this.logs)); + }) : out, this.logs)); this.out = System.out; - System.setErr(new ConsoleErrorStream(err == null ? new PrintStream(new PrintStream(new OutputStream() { + + System.setErr(new ConsoleErrorStream(this, err == null ? new PrintStream(new OutputStream() { @Override public void write(int b) { //DO NOTHING } - })) : err, this.logs)); + }) : err, this.logs)); this.err = System.err; + + reader = new ConsoleReader(in, out); + reader.setExpandEvents(false); + + + terminal = TerminalBuilder.builder().streams(in, out).system(true).jansi(true).build(); + tabReader = LineReaderBuilder.builder().terminal(terminal).completer(new Completer() { + @Override + public void complete(LineReader reader, ParsedLine line, List candidates) { + String[] args = CustomStringUtils.splitStringToArgs(line.line()); + List tab = Limbo.getInstance().getPluginManager().getTabOptions(Limbo.getInstance().getConsole(), args); + for (String each : tab) { + candidates.add(new Candidate(each)); + } + } + }).build(); + tabReader.setAutosuggestion(SuggestionType.NONE); } public String getName() { @@ -78,236 +119,348 @@ public class Console implements CommandSender { } public void sendMessage(String message) { - out.println(message); + stashLine(); + String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + message), true); + logs.println(ChatColor.stripColor("[" + date + " Info] " + message)); + try { + reader.getOutput().append("[" + date + " Info] " + translateToConsole(message) + "\n"); + reader.getOutput().flush(); + } catch (IOException e) { + e.printStackTrace(); + } + unstashLine(); } protected void run() { if (in == null) { return; } - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while (true) { - try { - String command = reader.readLine(); - if (command.length() > 0) { - String[] input = CustomStringUtils.splitStringToArgs(command); - Limbo.getInstance().dispatchCommand(this, input); - } - } catch (IOException e) { - e.printStackTrace(); + String command = tabReader.readLine(PROMPT); + if (command.length() > 0) { + String[] input = CustomStringUtils.splitStringToArgs(command); + new Thread(() -> Limbo.getInstance().dispatchCommand(this, input)).start(); } } } + protected void stashLine() { + try { + tabReader.callWidget(LineReader.CLEAR); + } catch (Exception ignore) {} + } + + protected void unstashLine() { + try { + tabReader.callWidget(LineReader.REDRAW_LINE); + tabReader.callWidget(LineReader.REDISPLAY); + tabReader.getTerminal().writer().flush(); + } catch (Exception ignore) {} + } + + static { + replacements.put(ChatColor.BLACK, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.BLACK).boldOff().toString()); + replacements.put(ChatColor.DARK_BLUE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.BLUE).boldOff().toString()); + replacements.put(ChatColor.DARK_GREEN, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.GREEN).boldOff().toString()); + replacements.put(ChatColor.DARK_AQUA, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.CYAN).boldOff().toString()); + replacements.put(ChatColor.DARK_RED, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.RED).boldOff().toString()); + replacements.put(ChatColor.DARK_PURPLE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.MAGENTA).boldOff().toString()); + replacements.put(ChatColor.GOLD, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.YELLOW).boldOff().toString()); + replacements.put(ChatColor.GRAY, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.WHITE).boldOff().toString()); + replacements.put(ChatColor.DARK_GRAY, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.BLACK).bold().toString()); + replacements.put(ChatColor.BLUE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.BLUE).bold().toString()); + replacements.put(ChatColor.GREEN, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.GREEN).bold().toString()); + replacements.put(ChatColor.AQUA, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.CYAN).bold().toString()); + replacements.put(ChatColor.RED, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.RED).bold().toString()); + replacements.put(ChatColor.LIGHT_PURPLE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.MAGENTA).bold().toString()); + replacements.put(ChatColor.YELLOW, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.YELLOW).bold().toString()); + replacements.put(ChatColor.WHITE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.WHITE).bold().toString()); + replacements.put(ChatColor.MAGIC, Ansi.ansi().a(Attribute.BLINK_SLOW).toString()); + replacements.put(ChatColor.BOLD, Ansi.ansi().a(Attribute.UNDERLINE_DOUBLE).toString()); + replacements.put(ChatColor.STRIKETHROUGH, Ansi.ansi().a(Attribute.STRIKETHROUGH_ON).toString()); + replacements.put(ChatColor.UNDERLINE, Ansi.ansi().a(Attribute.UNDERLINE).toString()); + replacements.put(ChatColor.ITALIC, Ansi.ansi().a(Attribute.ITALIC).toString()); + replacements.put(ChatColor.RESET, Ansi.ansi().a(Attribute.RESET).toString()); + } + + protected static String translateToConsole(String str) { + for (Entry entry : replacements.entrySet()) { + str = str.replace(entry.getKey().toString(), entry.getValue()); + } + str = str.replaceAll("(?i)" + ChatColor.COLOR_CHAR + "x(" + ChatColor.COLOR_CHAR + "[0-9a-f]){6}", ""); + return str + RESET_COLOR; + } + public static class ConsoleOutputStream extends PrintStream { private PrintStream logs; + private Console console; - public ConsoleOutputStream(OutputStream out, PrintStream logs) { + public ConsoleOutputStream(Console console, OutputStream out, PrintStream logs) { super(out); this.logs = logs; + this.console = console; } + @SuppressWarnings("resource") @Override public PrintStream printf(Locale l, String format, Object... args) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText(String.format(l, "[" + date + " Info]" + format, args)); - logs.printf(l, "[" + date + " Info]" + format, args); - return super.printf(l, "[" + date + " Info]" + format, args); + ConsoleTextOutput.appendText(ChatColor.stripColor(String.format(l, "[" + date + " Info]" + format, args))); + logs.printf(l, ChatColor.stripColor("[" + date + " Info]" + format), args); + PrintStream stream = super.printf(l, Console.translateToConsole("[" + date + " Info]" + format), args); + console.unstashLine(); + return stream; } + @SuppressWarnings("resource") @Override public PrintStream printf(String format, Object... args) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText(String.format("[" + date + " Info]" + format, args)); - logs.printf("[" + date + " Info]" + format, args); - return super.printf("[" + date + " Info]" + format, args); + ConsoleTextOutput.appendText(ChatColor.stripColor(String.format("[" + date + " Info]" + format, args))); + logs.printf(ChatColor.stripColor("[" + date + " Info]" + format), args); + PrintStream stream = super.printf(ChatColor.stripColor("[" + date + " Info]" + format), args); + console.unstashLine(); + return stream; } @Override public void println() { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info]", true); - logs.println("[" + date + " Info]"); - super.println("[" + date + " Info]"); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info]"), true); + logs.println(ChatColor.stripColor("[" + date + " Info]")); + super.println(ChatColor.stripColor("[" + date + " Info]")); + console.unstashLine(); } @Override public void println(boolean x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + x, true); - logs.println("[" + date + " Info]" + x); - super.println("[" + date + " Info]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Info]" + x)); + super.println(ChatColor.stripColor("[" + date + " Info]" + x)); + console.unstashLine(); } @Override public void println(char x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + x, true); - logs.println("[" + date + " Info]" + x); - super.println("[" + date + " Info]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Info]" + x)); + super.println(ChatColor.stripColor("[" + date + " Info]" + x)); + console.unstashLine(); } @Override public void println(char[] x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + String.valueOf(x), true); - logs.println("[" + date + " Info]" + String.valueOf(x)); - super.println("[" + date + " Info]" + String.valueOf(x)); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + String.valueOf(x)), true); + logs.println(ChatColor.stripColor("[" + date + " Info]" + String.valueOf(x))); + super.println(ChatColor.stripColor("[" + date + " Info]" + String.valueOf(x))); + console.unstashLine(); } @Override public void println(double x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + x, true); - logs.println("[" + date + " Info]" + x); - super.println("[" + date + " Info]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Info]" + x)); + super.println(ChatColor.stripColor("[" + date + " Info]" + x)); + console.unstashLine(); } @Override public void println(float x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + x, true); - logs.println("[" + date + " Info]" + x); - super.println("[" + date + " Info]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Info]" + x)); + super.println(ChatColor.stripColor("[" + date + " Info]" + x)); + console.unstashLine(); } @Override public void println(int x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + x, true); - logs.println("[" + date + " Info]" + x); - super.println("[" + date + " Info]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Info]" + x)); + super.println(ChatColor.stripColor("[" + date + " Info]" + x)); + console.unstashLine(); } @Override public void println(long x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + x, true); - logs.println("[" + date + " Info]" + x); - super.println("[" + date + " Info]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Info]" + x)); + super.println(ChatColor.stripColor("[" + date + " Info]" + x)); + console.unstashLine(); } @Override public void println(Object x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + x, true); - logs.println("[" + date + " Info]" + x); - super.println("[" + date + " Info]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Info]" + x)); + super.println(ChatColor.stripColor("[" + date + " Info]" + x)); + console.unstashLine(); } @Override public void println(String string) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Info] " + string, true); - logs.println("[" + date + " Info] " + string); - super.println("[" + date + " Info] " + string); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Info] " + string), true); + logs.println(ChatColor.stripColor("[" + date + " Info] " + string)); + super.println(ChatColor.stripColor("[" + date + " Info] " + string)); + console.unstashLine(); } } public static class ConsoleErrorStream extends PrintStream { private PrintStream logs; + private Console console; - public ConsoleErrorStream(OutputStream out, PrintStream logs) { + public ConsoleErrorStream(Console console, OutputStream out, PrintStream logs) { super(out); this.logs = logs; + this.console = console; } + @SuppressWarnings("resource") @Override public PrintStream printf(Locale l, String format, Object... args) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText(String.format(l, "[" + date + " Error]" + format, args)); - logs.printf(l, "[" + date + " Error]" + format, args); - return super.printf(l, "[" + date + " Error]" + format, args); + ConsoleTextOutput.appendText(ChatColor.stripColor(String.format(l, "[" + date + " Error]" + format, args))); + logs.printf(l, ChatColor.stripColor("[" + date + " Error]" + format), args); + PrintStream stream = super.printf(l, ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + format + RESET_COLOR), args); + console.unstashLine(); + return stream; } + @SuppressWarnings("resource") @Override public PrintStream printf(String format, Object... args) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText(String.format("[" + date + " Error]" + format, args)); - logs.printf("[" + date + " Error]" + format, args); - return super.printf("[" + date + " Error]" + format, args); + ConsoleTextOutput.appendText(ChatColor.stripColor(String.format("[" + date + " Error]" + format, args))); + logs.printf(ChatColor.stripColor("[" + date + " Error]" + format), args); + PrintStream stream = super.printf(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + format + RESET_COLOR), args); + console.unstashLine(); + return stream; } @Override public void println() { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error]", true); - logs.println("[" + date + " Error]"); - super.println("[" + date + " Error]"); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error]"), true); + logs.println(ChatColor.stripColor("[" + date + " Error]")); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]") + RESET_COLOR); + console.unstashLine(); } @Override public void println(boolean x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + x, true); - logs.println("[" + date + " Error]" + x); - super.println("[" + date + " Error]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Error]" + x)); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + x) + RESET_COLOR); + console.unstashLine(); } @Override public void println(char x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + x, true); - logs.println("[" + date + " Error]" + x); - super.println("[" + date + " Error]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Error]" + x)); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + x) + RESET_COLOR); + console.unstashLine(); } @Override public void println(char[] x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + String.valueOf(x), true); - logs.println("[" + date + " Error]" + String.valueOf(x)); - super.println("[" + date + " Error]" + String.valueOf(x)); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + String.valueOf(x)), true); + logs.println(ChatColor.stripColor("[" + date + " Error]" + String.valueOf(x))); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + String.valueOf(x)) + RESET_COLOR); + console.unstashLine(); } @Override public void println(double x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + x, true); - logs.println("[" + date + " Error]" + x); - super.println("[" + date + " Error]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Error]" + x)); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + x) + RESET_COLOR); + console.unstashLine(); } @Override public void println(float x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + x, true); - logs.println("[" + date + " Error]" + x); - super.println("[" + date + " Error]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Error]" + x)); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + x) + RESET_COLOR); + console.unstashLine(); } @Override public void println(int x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + x, true); - logs.println("[" + date + " Error]" + x); - super.println("[" + date + " Error]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Error]" + x)); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + x) + RESET_COLOR); + console.unstashLine(); } @Override public void println(long x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + x, true); - logs.println("[" + date + " Error]" + x); - super.println("[" + date + " Error]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Error]" + x)); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + x) + RESET_COLOR); + console.unstashLine(); } @Override public void println(Object x) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + x, true); - logs.println("[" + date + " Error]" + x); - super.println("[" + date + " Error]" + x); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + x), true); + logs.println(ChatColor.stripColor("[" + date + " Error]" + x)); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error]" + x) + RESET_COLOR); + console.unstashLine(); } @Override public void println(String string) { + console.stashLine(); String date = new SimpleDateFormat("HH':'mm':'ss").format(new Date()); - ConsoleTextOutput.appendText("[" + date + " Error] " + string, true); - logs.println("[" + date + " Error] " + string); - super.println("[" + date + " Error] " + string); + ConsoleTextOutput.appendText(ChatColor.stripColor("[" + date + " Error] " + string), true); + logs.println(ChatColor.stripColor("[" + date + " Error] " + string)); + super.println(ERROR_RED + ChatColor.stripColor("[" + date + " Error] " + string) + RESET_COLOR); + console.unstashLine(); } } diff --git a/src/com/loohp/limbo/File/ServerProperties.java b/src/com/loohp/limbo/File/ServerProperties.java index c12716b..0beb8d2 100644 --- a/src/com/loohp/limbo/File/ServerProperties.java +++ b/src/com/loohp/limbo/File/ServerProperties.java @@ -73,17 +73,17 @@ public class ServerProperties { if (image.getHeight() == 64 && image.getWidth() == 64) { favicon = Optional.of(image); } else { - System.out.println("Unable to load server-icon.png! The image is not 64 x 64 in size!"); + Limbo.getInstance().getConsole().sendMessage("Unable to load server-icon.png! The image is not 64 x 64 in size!"); } } catch (Exception e) { - System.out.println("Unable to load server-icon.png! Is it a png image?"); + Limbo.getInstance().getConsole().sendMessage("Unable to load server-icon.png! Is it a png image?"); } } else { - System.out.println("No server-icon.png found"); + Limbo.getInstance().getConsole().sendMessage("No server-icon.png found"); favicon = Optional.empty(); } - System.out.println("Loaded server.properties"); + Limbo.getInstance().getConsole().sendMessage("Loaded server.properties"); } public String getServerImplementationVersion() { diff --git a/src/com/loohp/limbo/Plugins/PluginManager.java b/src/com/loohp/limbo/Plugins/PluginManager.java index 393bf06..47f4f81 100644 --- a/src/com/loohp/limbo/Plugins/PluginManager.java +++ b/src/com/loohp/limbo/Plugins/PluginManager.java @@ -58,7 +58,7 @@ public class PluginManager { clazz.setInfo(pluginYaml); plugins.put(clazz.getName(), clazz); clazz.onLoad(); - System.out.println("Loading plugin " + file.getName() + " " + clazz.getInfo().getVersion() + " by " + clazz.getInfo().getAuthor()); + Limbo.getInstance().getConsole().sendMessage("Loading plugin " + file.getName() + " " + clazz.getInfo().getVersion() + " by " + clazz.getInfo().getAuthor()); url.close(); break; } diff --git a/src/com/loohp/limbo/Server/ClientConnection.java b/src/com/loohp/limbo/Server/ClientConnection.java index 094762e..8d234cb 100644 --- a/src/com/loohp/limbo/Server/ClientConnection.java +++ b/src/com/loohp/limbo/Server/ClientConnection.java @@ -299,7 +299,7 @@ public class ClientConnection extends Thread { if (chunk != null) { PacketPlayOutMapChunk chunkdata = new PacketPlayOutMapChunk(x, z, chunk, world.getEnvironment()); sendPacket(chunkdata); - //System.out.println(x + ", " + z); + //Limbo.getInstance().getConsole().sendMessage(x + ", " + z); } } } @@ -351,7 +351,7 @@ public class ClientConnection extends Thread { int size = DataTypeIO.readVarInt(input); int packetId = DataTypeIO.readVarInt(input); Class packetType = Packet.getPlayIn().get(packetId); - //System.out.println(packetId + " -> " + packetType); + //Limbo.getInstance().getConsole().sendMessage(packetId + " -> " + packetType); if (packetType == null) { input.skipBytes(size - DataTypeIO.getVarIntLength(packetId)); } else if (packetType.equals(PacketPlayInPositionAndLook.class)) { diff --git a/src/com/loohp/limbo/Server/Packets/PacketHandshakingIn.java b/src/com/loohp/limbo/Server/Packets/PacketHandshakingIn.java index 988cc0a..88dd780 100644 --- a/src/com/loohp/limbo/Server/Packets/PacketHandshakingIn.java +++ b/src/com/loohp/limbo/Server/Packets/PacketHandshakingIn.java @@ -27,7 +27,6 @@ public class PacketHandshakingIn extends PacketIn { return type; } } - System.out.println("Invalid HandshakeType networkId, expected 0 or 1, but got " + networkId); return null; } } diff --git a/src/com/loohp/limbo/Server/Packets/PacketPlayOutMapChunk.java b/src/com/loohp/limbo/Server/Packets/PacketPlayOutMapChunk.java index 9cc295d..4aadf0a 100644 --- a/src/com/loohp/limbo/Server/Packets/PacketPlayOutMapChunk.java +++ b/src/com/loohp/limbo/Server/Packets/PacketPlayOutMapChunk.java @@ -116,14 +116,14 @@ public class PacketPlayOutMapChunk extends PacketOut { } DataTypeIO.writeVarInt(dataOut, section.getPalette().size()); - //System.out.println(section.getPalette().size()); + //Limbo.getInstance().getConsole().sendMessage(section.getPalette().size()); Iterator itr1 = section.getPalette().iterator(); - //System.out.println("Nonnull -> " + i + " " + newBits); + //Limbo.getInstance().getConsole().sendMessage("Nonnull -> " + i + " " + newBits); counter = 0; while (itr1.hasNext()) { CompoundTag tag = itr1.next(); DataTypeIO.writeVarInt(dataOut, GeneratedBlockDataMappings.getGlobalPaletteIDFromState(tag)); - //System.out.println(tag + " -> " + GeneratedDataUtils.getGlobalPaletteIDFromState(tag)); + //Limbo.getInstance().getConsole().sendMessage(tag + " -> " + GeneratedDataUtils.getGlobalPaletteIDFromState(tag)); } } else { dataOut.writeByte(14); @@ -132,7 +132,7 @@ public class PacketPlayOutMapChunk extends PacketOut { DataTypeIO.writeVarInt(dataOut, section.getBlockStates().length); for (int u = 0; u < section.getBlockStates().length; u++) { dataOut.writeLong(section.getBlockStates()[u]); - //System.out.println(Arrays.toString(section.getBlockStates())); + //Limbo.getInstance().getConsole().sendMessage(Arrays.toString(section.getBlockStates())); } } } diff --git a/src/com/loohp/limbo/Server/ServerConnection.java b/src/com/loohp/limbo/Server/ServerConnection.java index d6c9133..7e458e5 100644 --- a/src/com/loohp/limbo/Server/ServerConnection.java +++ b/src/com/loohp/limbo/Server/ServerConnection.java @@ -7,6 +7,8 @@ import java.net.Socket; import java.util.ArrayList; import java.util.List; +import com.loohp.limbo.Limbo; + public class ServerConnection extends Thread { private ServerSocket serverSocket; @@ -27,11 +29,11 @@ public class ServerConnection extends Thread { public void run() { try { serverSocket = new ServerSocket(port, 50, InetAddress.getByName(ip)); - System.out.println("Limbo server listening on /" + serverSocket.getInetAddress().getHostName() + ":" + serverSocket.getLocalPort()); + Limbo.getInstance().getConsole().sendMessage("Limbo server listening on /" + serverSocket.getInetAddress().getHostName() + ":" + serverSocket.getLocalPort()); while (true) { Socket connection = serverSocket.accept(); //String str = connection.getInetAddress().getHostName() + ":" + connection.getPort(); - //System.out.println("[/127.0.0.1:57310] <-> InitialHandler has pinged); + //Limbo.getInstance().getConsole().sendMessage("[/127.0.0.1:57310] <-> InitialHandler has pinged); ClientConnection sc = new ClientConnection(connection); clients.add(sc); sc.start(); diff --git a/src/com/loohp/limbo/Utils/MojangAPIUtils.java b/src/com/loohp/limbo/Utils/MojangAPIUtils.java index 7227705..694c12a 100644 --- a/src/com/loohp/limbo/Utils/MojangAPIUtils.java +++ b/src/com/loohp/limbo/Utils/MojangAPIUtils.java @@ -49,7 +49,7 @@ public class MojangAPIUtils { return null; } } else { - System.out.println("Connection could not be opened (Response code " + connection.getResponseCode() + ", " + connection.getResponseMessage() + ")"); + System.err.println("Connection could not be opened (Response code " + connection.getResponseCode() + ", " + connection.getResponseMessage() + ")"); return null; } } catch (IOException e) { @@ -81,7 +81,7 @@ public class MojangAPIUtils { String signature = reply.split("\"signature\":\"")[1].split("\"")[0]; return new SkinResponse(skin, signature); } else { - System.out.println("Connection could not be opened (Response code " + connection.getResponseCode() + ", " + connection.getResponseMessage() + ")"); + System.err.println("Connection could not be opened (Response code " + connection.getResponseCode() + ", " + connection.getResponseMessage() + ")"); return null; } } catch (IOException e) {