mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-20 09:57:43 +01:00
PaperPR - Add hex color code support for console logging
This commit is contained in:
@@ -0,0 +1,64 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||||
|
Date: Sun, 20 Sep 2020 12:25:18 -0500
|
||||||
|
Subject: [PATCH] PaperPR - Add hex color code support for console logging
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/com/destroystokyo/paper/console/TerminalConsoleCommandSender.java b/src/main/java/com/destroystokyo/paper/console/TerminalConsoleCommandSender.java
|
||||||
|
index 685deaa0e..73c2bdd58 100644
|
||||||
|
--- a/src/main/java/com/destroystokyo/paper/console/TerminalConsoleCommandSender.java
|
||||||
|
+++ b/src/main/java/com/destroystokyo/paper/console/TerminalConsoleCommandSender.java
|
||||||
|
@@ -1,17 +1,52 @@
|
||||||
|
package com.destroystokyo.paper.console;
|
||||||
|
|
||||||
|
+import java.awt.Color;
|
||||||
|
+import java.util.regex.Matcher;
|
||||||
|
+import java.util.regex.Pattern;
|
||||||
|
+import net.minecrell.terminalconsole.MinecraftFormattingConverter;
|
||||||
|
+import net.minecrell.terminalconsole.TerminalConsoleAppender;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
+import org.apache.logging.log4j.util.PropertiesUtil;
|
||||||
|
+import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.craftbukkit.command.CraftConsoleCommandSender;
|
||||||
|
|
||||||
|
public class TerminalConsoleCommandSender extends CraftConsoleCommandSender {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LogManager.getRootLogger();
|
||||||
|
+ private static final char ANSI_ESC_CHAR = '\u001B';
|
||||||
|
+ private static final String RGB_STRING = ANSI_ESC_CHAR + "[38;2;%d;%d;%dm";
|
||||||
|
+ private static final String ANSI_RESET = ANSI_ESC_CHAR + "[0m";
|
||||||
|
+ private static final Pattern HEX_PATTERN = Pattern.compile("(?i)(" + ChatColor.COLOR_CHAR + "x(" + ChatColor.COLOR_CHAR + "[0-9a-f]){6})");
|
||||||
|
+ private static final boolean keepFormatting = PropertiesUtil.getProperties().getBooleanProperty(MinecraftFormattingConverter.KEEP_FORMATTING_PROPERTY);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendRawMessage(String message) {
|
||||||
|
// TerminalConsoleAppender supports color codes directly in log messages
|
||||||
|
- LOGGER.info(message);
|
||||||
|
+ // However, we need to convert hex colors manually, as those do not get transformed
|
||||||
|
+ LOGGER.info(hexMagicToAnsi(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
+ private static String hexMagicToAnsi(String input) {
|
||||||
|
+ // If formatting should be kept, just leave the input as-is
|
||||||
|
+ if (keepFormatting)
|
||||||
|
+ return input;
|
||||||
|
+
|
||||||
|
+ // If Ansi is not supported, just strip out any hex coloring
|
||||||
|
+ if (!TerminalConsoleAppender.isAnsiSupported())
|
||||||
|
+ return HEX_PATTERN.matcher(input).replaceAll("");
|
||||||
|
+
|
||||||
|
+ Matcher matcher = HEX_PATTERN.matcher(input);
|
||||||
|
+ StringBuffer buffer = new StringBuffer();
|
||||||
|
+ while (matcher.find()) {
|
||||||
|
+ String hex = matcher.group().replace(String.valueOf(ChatColor.COLOR_CHAR), "").replace('x', '#');
|
||||||
|
+ Color color = Color.decode(hex);
|
||||||
|
+ String replacement = String.format(RGB_STRING, color.getRed(), color.getGreen(), color.getBlue());
|
||||||
|
+ matcher.appendReplacement(buffer, replacement);
|
||||||
|
+ }
|
||||||
|
+ matcher.appendTail(buffer);
|
||||||
|
+
|
||||||
|
+ // We add the Ansi reset to the end of each message to prevent the color from carrying over to the next logged message
|
||||||
|
+ return buffer.toString() + ANSI_RESET;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user