ColorConsole/src/main/java/com/github/games647/colorconsole/sponge/ColorConsoleSponge.java

116 lines
4.7 KiB
Java

package com.github.games647.colorconsole.sponge;
import com.github.games647.colorconsole.common.CommonLogInstaller;
import com.google.inject.Inject;
import java.io.IOException;
import java.io.Serializable;
import java.nio.file.Path;
import ninja.leaping.configurate.commented.CommentedConfigurationNode;
import ninja.leaping.configurate.hocon.HoconConfigurationLoader;
import ninja.leaping.configurate.loader.ConfigurationLoader;
import ninja.leaping.configurate.objectmapping.ObjectMapper;
import ninja.leaping.configurate.objectmapping.ObjectMappingException;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.slf4j.Logger;
import org.spongepowered.api.config.DefaultConfig;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
import org.spongepowered.api.plugin.Plugin;
@Plugin(id = PomData.ARTIFACT_ID, name = PomData.NAME, version = PomData.VERSION
, 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;
@Inject
@DefaultConfig(sharedRoot = true)
private Path configFile;
@Inject
@DefaultConfig(sharedRoot = true)
private ConfigurationLoader<CommentedConfigurationNode> configManager;
private ObjectMapper<ColorConsoleConfig>.BoundInstance configMapper;
private CommentedConfigurationNode rootNode;
@Inject
public ColorConsoleSponge(Logger logger) {
this.logger = logger;
}
public ColorConsoleConfig getConfig() {
return configMapper.getInstance();
}
@Listener //During this state, the plugin gets ready for initialization. Logger and config
public void onPreInit(GamePreInitializationEvent preInitEvent) {
logger.info("Setting up config");
rootNode = configManager.createEmptyNode();
ConfigurationLoader<CommentedConfigurationNode> configLoader = HoconConfigurationLoader.builder()
.setPath(configFile).build();
try {
configMapper = ObjectMapper
.forClass(ColorConsoleConfig.class).bindToNew();
rootNode = configManager.load();
configMapper.populate(rootNode);
//add and save missing values
configMapper.serialize(rootNode);
configLoader.save(rootNode);
} catch (IOException | ObjectMappingException ioEx) {
logger.error("Cannot save default config", ioEx);
return;
}
installLogFormat();
}
private void installLogFormat() {
Appender terminalAppender = CommonLogInstaller.getTerminalAppender(TERMINAL_NAME);
Layout<? extends Serializable> oldLayout = terminalAppender.getLayout();
String logFormat = configMapper.getInstance().getLogFormat();
if (oldLayout.toString().contains("%minecraftFormatting")) {
logFormat = logFormat.replace("%msg", "%minecraftFormatting{%msg}");
}
if (configMapper.getInstance().isColorLoggingLevel()) {
logFormat = logFormat.replace("%level", "%highlight{%level}{"
+ "FATAL=" + configMapper.getInstance().getLevelColors().get("FATAL") + ", "
+ "ERROR=" + configMapper.getInstance().getLevelColors().get("ERROR") + ", "
+ "WARN=" + configMapper.getInstance().getLevelColors().get("WARN") + ", "
+ "INFO=" + configMapper.getInstance().getLevelColors().get("INFO") + ", "
+ "DEBUG=" + configMapper.getInstance().getLevelColors().get("DEBUG") + ", "
+ "TRACE=" + configMapper.getInstance().getLevelColors().get("TRACE") + '}');
}
String dateStyle = configMapper.getInstance().getDateStyle();
logFormat = logFormat.replace("%d{HH:mm:ss}", "%style{" + "%d{HH:mm:ss}" + "}{" + dateStyle + '}');
try {
PatternLayout layout = CommonLogInstaller.createLayout(logFormat);
CommonLogInstaller.setLayout(layout, terminalAppender);
} catch (ReflectiveOperationException ex) {
logger.warn("Cannot install log format", ex);
}
ColorPluginAppender pluginAppender = new ColorPluginAppender(terminalAppender, getConfig());
pluginAppender.initPluginColors(getConfig().getPluginColors(), getConfig().getDefaultPluginColor());
CommonLogInstaller.installAppender(pluginAppender, TERMINAL_NAME);
CommonLogInstaller.installAppender(pluginAppender, "Console");
}
}