From ac6a552e9525865940ed5db46abb786af85230c2 Mon Sep 17 00:00:00 2001 From: Haarolean Date: Tue, 14 Nov 2017 18:44:27 +0300 Subject: [PATCH] Added a workaround for paper' colors. --- pom.xml | 2 +- .../ryanmichela/sshd/ConsoleLogFormatter.java | 52 ++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e116e5c..f6c1f57 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.ryanmichela SSHD - 1.3.1 + 1.3.2 http://dev.bukkit.org/server-mods/sshd/ diff --git a/src/main/java/com/ryanmichela/sshd/ConsoleLogFormatter.java b/src/main/java/com/ryanmichela/sshd/ConsoleLogFormatter.java index 58ad16d..051ce9f 100644 --- a/src/main/java/com/ryanmichela/sshd/ConsoleLogFormatter.java +++ b/src/main/java/com/ryanmichela/sshd/ConsoleLogFormatter.java @@ -4,9 +4,14 @@ package com.ryanmichela.sshd; * Copyright 2013 Ryan Michela */ +import org.bukkit.ChatColor; +import org.fusesource.jansi.Ansi; + import java.io.PrintWriter; import java.io.StringWriter; import java.text.SimpleDateFormat; +import java.util.EnumMap; +import java.util.Map; import java.util.logging.Formatter; import java.util.logging.LogRecord; @@ -19,10 +24,16 @@ public class ConsoleLogFormatter extends Formatter { } public String format(LogRecord logrecord) { + try { + Class.forName("org.bukkit.craftbukkit.command.ColouredConsoleSender"); + } catch (ClassNotFoundException ignored) { + // MEANS WE'RE ON PAPER/TACO/OTHER SHIT + colorize(logrecord); + } StringBuilder stringbuilder = new StringBuilder(); stringbuilder.append(" ["); - stringbuilder.append(this.dateFormat.format(Long.valueOf(logrecord.getMillis()))).append(" "); + stringbuilder.append(this.dateFormat.format(logrecord.getMillis())).append(" "); stringbuilder.append(logrecord.getLevel().getName()).append("]: "); stringbuilder.append(this.formatMessage(logrecord)); @@ -38,5 +49,44 @@ public class ConsoleLogFormatter extends Formatter { return stringbuilder.toString(); } + + private void colorize(LogRecord logrecord) { + // ORIGINAL CODE FROM org.bukkit.craftbukkit.command.ColouredConsoleSender + final Map replacements = new EnumMap<>(ChatColor.class); + + replacements.put(ChatColor.BLACK, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.BLACK).boldOff().toString()); + replacements.put(ChatColor.DARK_BLUE, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.BLUE).boldOff().toString()); + replacements.put(ChatColor.DARK_GREEN, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.GREEN).boldOff().toString()); + replacements.put(ChatColor.DARK_AQUA, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.CYAN).boldOff().toString()); + replacements.put(ChatColor.DARK_RED, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.RED).boldOff().toString()); + replacements.put(ChatColor.DARK_PURPLE, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.MAGENTA).boldOff().toString()); + replacements.put(ChatColor.GOLD, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.YELLOW).boldOff().toString()); + replacements.put(ChatColor.GRAY, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.WHITE).boldOff().toString()); + replacements.put(ChatColor.DARK_GRAY, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.BLACK).bold().toString()); + replacements.put(ChatColor.BLUE, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.BLUE).bold().toString()); + replacements.put(ChatColor.GREEN, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.GREEN).bold().toString()); + replacements.put(ChatColor.AQUA, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.CYAN).bold().toString()); + replacements.put(ChatColor.RED, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.RED).bold().toString()); + replacements.put(ChatColor.LIGHT_PURPLE, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.MAGENTA).bold().toString()); + replacements.put(ChatColor.YELLOW, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.YELLOW).bold().toString()); + replacements.put(ChatColor.WHITE, Ansi.ansi().a(Ansi.Attribute.RESET).fg(Ansi.Color.WHITE).bold().toString()); + replacements.put(ChatColor.MAGIC, Ansi.ansi().a(Ansi.Attribute.BLINK_SLOW).toString()); + replacements.put(ChatColor.BOLD, Ansi.ansi().a(Ansi.Attribute.UNDERLINE_DOUBLE).toString()); + replacements.put(ChatColor.STRIKETHROUGH, Ansi.ansi().a(Ansi.Attribute.STRIKETHROUGH_ON).toString()); + replacements.put(ChatColor.UNDERLINE, Ansi.ansi().a(Ansi.Attribute.UNDERLINE).toString()); + replacements.put(ChatColor.ITALIC, Ansi.ansi().a(Ansi.Attribute.ITALIC).toString()); + replacements.put(ChatColor.RESET, Ansi.ansi().a(Ansi.Attribute.RESET).toString()); + + String result = logrecord.getMessage(); + for (ChatColor color : ChatColor.values()) { + if (replacements.containsKey(color)) { + result = result.replaceAll("(?i)" + color.toString(), replacements.get(color)); + } else { + result = result.replaceAll("(?i)" + color.toString(), ""); + } + } + result += Ansi.ansi().reset().toString(); + logrecord.setMessage(result); + } }