Fix showing chat colors in newer PaperSpigot versions (Fixes #4)

This commit is contained in:
games647 2017-09-24 17:52:26 +02:00
parent 62ec40cc53
commit 8cfe9343a1
No known key found for this signature in database
GPG Key ID: BFC68C8708713A88
4 changed files with 26 additions and 18 deletions

View File

@ -8,7 +8,7 @@
<packaging>jar</packaging>
<name>ColorConsole</name>
<version>2.3.2</version>
<version>2.3.3</version>
<inceptionYear>2016</inceptionYear>
<url>https://dev.bukkit.org/bukkit-plugins/colorconsole/</url>
<description>

View File

@ -7,6 +7,7 @@ import java.io.Serializable;
import java.util.Map;
import java.util.logging.Level;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Layout;
@ -22,8 +23,6 @@ public class ColorConsoleBukkit extends JavaPlugin {
@Override
public void onLoad() {
saveDefaultConfig();
Map<String, String> levelColors = Maps.newHashMap();
levelColors.put("FATAL", getConfig().getString("FATAL"));
levelColors.put("ERROR", getConfig().getString("ERROR"));
@ -71,7 +70,8 @@ public class ColorConsoleBukkit extends JavaPlugin {
oldLayout = terminalAppender.getLayout();
String logFormat = getConfig().getString("logFormat");
if (oldLayout.toString().contains("minecraftFormatting")) {
String appenderClass = terminalAppender.getClass().getName();
if (oldLayout.toString().contains("minecraftFormatting") || appenderClass.contains("minecrell")) {
logFormat = logFormat.replace("%msg", "%minecraftFormatting{%msg}");
}

View File

@ -12,8 +12,25 @@ import org.apache.logging.log4j.message.Message;
public abstract class ColorAppender extends AbstractAppender {
private static final Method loggerClassGetter;
private boolean disabled = loggerClassGetter == null;
static {
Method classGetter = null;
for (Method method : LogEvent.class.getDeclaredMethods()) {
String methodName = method.getName();
if ("getLoggerFqcn".equalsIgnoreCase(methodName)
|| "getFQCN".equalsIgnoreCase(methodName)) {
classGetter = method;
method.setAccessible(true);
break;
}
}
loggerClassGetter = classGetter;
}
private final Appender oldAppender;
private Method loggerClassGetter;
protected final CommonFormatter formatter;
@ -24,14 +41,6 @@ public abstract class ColorAppender extends AbstractAppender {
this.oldAppender = oldAppender;
this.formatter = new CommonFormatter(hideMessages, colorizeTag, truncateColor, levelColors);
for (Method method : LogEvent.class.getDeclaredMethods()) {
String methodName = method.getName();
if ("getLoggerFqcn".equalsIgnoreCase(methodName)
|| "getFQCN".equalsIgnoreCase(methodName)) {
loggerClassGetter = method;
method.setAccessible(true);
}
}
}
public void initPluginColors(Map<String, String> configColors, String def) {
@ -56,12 +65,12 @@ public abstract class ColorAppender extends AbstractAppender {
protected LogEvent clone(LogEvent oldEvent, String loggerName, Message message) {
String className = null;
if (loggerClassGetter != null) {
if (!disabled) {
try {
className = (String) loggerClassGetter.invoke(oldEvent);
} catch (ReflectiveOperationException refEx) {
//if this method cannot be found then the other methods wouldn't work neither
loggerClassGetter = null;
disabled = true;
}
}

View File

@ -26,8 +26,6 @@ import org.spongepowered.api.plugin.Plugin;
, url = PomData.URL, description = PomData.DESCRIPTION)
public class ColorConsoleSponge {
// private static String TERMINAL_NAME = "FmlConsole";
// private static String TERMINAL_NAME = "Console";
private static final String TERMINAL_NAME = "MinecraftConsole";
private final Logger logger;
@ -82,7 +80,8 @@ public class ColorConsoleSponge {
Layout<? extends Serializable> oldLayout = terminalAppender.getLayout();
String logFormat = configMapper.getInstance().getLogFormat();
if (oldLayout.toString().contains("%minecraftFormatting")) {
String appenderClass = terminalAppender.getClass().getName();
if (oldLayout.toString().contains("minecraftFormatting") || appenderClass.contains("minecrell")) {
logFormat = logFormat.replace("%msg", "%minecraftFormatting{%msg}");
}