mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 17:37:42 +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