Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Плагин [ADMIN] ConsoleColour - цветная консоль? втф? v1.1 [1.8.x]

xDark

Активный участник
Пользователь
Баллы
96
del
 
Последнее редактирование:
сурцы:
CSS:
package me.xDark.ConsoleColour.Spigot;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.util.logging.Level;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.bukkit.plugin.java.JavaPlugin;

public class ConsoleColour extends JavaPlugin {
    private Layout<? extends Serializable> old;
    @Override
    public void onLoad() {
        saveDefaultConfig();
        // Запуск как можно быстрее
        install();
    }
    @Override
    public void onEnable() {
        saveDefaultConfig();
        install();
        this.getLogger().info("enabled");
    }
    @Override
    public void onDisable() {
        install();
        this.getLogger().info("disabled");
        Appender terminalAppender = getTerminalAppender();
        Logger rootLogger = ((Logger) LogManager.getRootLogger());
      
        ColorAppender colorAppender = null;
        for (Appender value : rootLogger.getAppenders().values()) {
            if (value instanceof ColorAppender) {
                colorAppender = (ColorAppender) value;
                break;
            }
        }
        if (colorAppender != null) {
            rootLogger.removeAppender(terminalAppender);
            rootLogger.addAppender(ColorAppender.getOldAppender());
        }
        setLayout(old);
    }
    private void install() {
        Appender terminalAppender = getTerminalAppender();

        old = terminalAppender.getLayout();
        String logFormat = getConfig().getString("logFormat");
        if (getConfig().getBoolean("colorLoggingLevel")) {
            logFormat = "%highlight{" + logFormat + "}{"
                    + "FATAL=" + getConfig().getString("FATAL") + ", "
                    + "ERROR=" + getConfig().getString("ERROR") + ", "
                    + "WARN=" + getConfig().getString("WARN") + ", "
                    + "INFO=" + getConfig().getString("INFO") + ", "
                    + "TRACE=" + getConfig().getString("TRACE") + ", "
                    + "DEBUG=" + getConfig().getString("DEBUG") + ", ";
        }

        PatternLayout layout = PatternLayout
                .createLayout(logFormat, new DefaultConfiguration(), null, Charset.defaultCharset().name(), "true");
        setLayout(layout);

        if (getConfig().getBoolean("colorPluginTag")) {
            Logger rootLogger = ((Logger) LogManager.getRootLogger());

            ColorAppender pluginAppender = new ColorAppender(terminalAppender, this);
            pluginAppender.start();

            rootLogger.removeAppender(terminalAppender);
            rootLogger.addAppender(pluginAppender);
        }
    }
    private void setLayout(Layout<? extends Serializable> layout) {
        Appender terminalAppender = getTerminalAppender();
        try {
            Field field = terminalAppender.getClass().getSuperclass().getDeclaredField("layout");
            field.setAccessible(true);
            field.set(terminalAppender, layout);
        } catch (Exception ex) {
            getLogger().log(Level.SEVERE, "Failed to install log format", ex);
        }
    }

    private Appender getTerminalAppender() {
        LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
        Configuration conf = ctx.getConfiguration();

        return conf.getAppenders().get("TerminalConsole");
    }
}
JavaScript:
package me.xDark.ConsoleColour.Spigot;

import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AbstractAppender;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.SimpleMessage;
import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.Ansi.Attribute;
import org.fusesource.jansi.AnsiRenderer;
import org.fusesource.jansi.AnsiRenderer.Code;

public class ColorAppender extends AbstractAppender {

   public static Appender oldAppender;

    private final ConsoleColour plugin;

    private final String reset = Ansi.ansi().a(Attribute.RESET).toString();
    private final String defaultPluginColor;

    public ColorAppender(Appender oldAppender, ConsoleColour plugin) {
        super(oldAppender.getName(), null, oldAppender.getLayout());

        this.plugin = plugin;

        ColorAppender.oldAppender = oldAppender;
        this.defaultPluginColor = format(plugin.getConfig().getString("PLUGIN"));
    }

    @Override
    public void append(LogEvent event) {
        if (oldAppender.isStarted()) {
            Message newMessage = new SimpleMessage(colorizePluginTag(event.getMessage().getFormattedMessage()
                    , event.getLevel().name()));

            LogEvent newEvent = new Log4jLogEvent(event.getLoggerName(), event.getMarker(), event.getFQCN()
                    , event.getLevel(), newMessage, event.getThrown(), event.getContextMap()
                    , event.getContextStack(), event.getThreadName(), event.getSource(), event.getMillis());
            oldAppender.append(newEvent);
        }
    }

    public static Appender getOldAppender() {
        return oldAppender;
    }

    private String colorizePluginTag(String message, String level) {
        if (!message.contains("[") || !message.contains("]")) {
            return message;
        }

        String levelColor = "";
        if (plugin.getConfig().getBoolean("colorLoggingLevel")) {
            levelColor = format(plugin.getConfig().getString(level));
        }

        int startTag = message.indexOf('[') + 1;
        int endTag = message.indexOf(']', startTag);

        String pluginName = message.substring(startTag, endTag);
        String pluginColor = plugin.getConfig().getString("P-" + pluginName);
        if (pluginColor == null) {
            pluginColor = defaultPluginColor;
        } else {
            pluginColor = format(pluginColor);
        }

        return reset + '[' + pluginColor + pluginName + reset + ']' + levelColor + message.substring(endTag + 1);
    }

    private String format(String pluginFormat) {
        String[] formatParts = pluginFormat.split(" ");
        Ansi ansi = Ansi.ansi();
        for (String format : formatParts) {
            for (Code ansiCode : AnsiRenderer.Code.values()) {
                if (ansiCode.name().equalsIgnoreCase(format)) {
                    if (ansiCode.isAttribute()) {
                        ansi.a(ansiCode.getAttribute());
                    } else if (ansiCode.isBackground()) {
                        ansi.bg(ansiCode.getColor());
                    } else {
                        ansi.fg(ansiCode.getColor());
                    }
                }
            }

            if ("blink".equalsIgnoreCase(format)) {
                ansi.a(Attribute.BLINK_SLOW);
                continue;
            }

            if ("strikethrough".equalsIgnoreCase(format)) {
                ansi.a(Attribute.STRIKETHROUGH_ON);
                continue;
            }

            if ("hidden".equalsIgnoreCase(format)) {
                ansi.a(Attribute.CONCEAL_OFF);
                continue;
            }

            if ("dim".equalsIgnoreCase(format)) {
                ansi.a(Attribute.INTENSITY_FAINT);
                continue;
            }

            if ("reverse".equalsIgnoreCase(format)) {
                ansi.a(Attribute.NEGATIVE_ON);
                continue;
            }

            for (Ansi.Color color : Ansi.Color.values()) {
                if (format.equalsIgnoreCase(color.name())) {
                    ansi.fg(color);
                    break;
                }
            }
        }

        return ansi.toString();
    }
}
 
Последнее редактирование:
JavaScript:
package me.xDark.ConsoleColour.BungeeCord;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;

import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.YamlConfiguration;
import net.md_5.bungee.log.ColouredWriter;

public class ConsoleColour extends Plugin {

    private Configuration configuration;

    @Override
    public void onLoad() {
        saveDefaultConfig();

        File configFile = new File(getDataFolder(), "config.yml");
        try {
            configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
        } catch (IOException ioEx) {
            getLogger().log(Level.SEVERE, "Unable to load configuration", ioEx);
            return;
        }

        install();
    }

    @Override
    public void onDisable() {
        BungeeCord bungee = BungeeCord.getInstance();
        Logger bungeeLogger = bungee.getLogger();

        Handler[] handlers = bungeeLogger.getHandlers();
        for (Handler handler : handlers) {
            if (handler instanceof ColouredWriter) {
                Formatter formatter = handler.getFormatter();
                if (formatter instanceof ColorFormatter) {
                    handler.setFormatter(((ColorFormatter) formatter).getOldFormatter());
                }
            }
        }
    }

    public Configuration getConfiguration() {
        return configuration;
    }

    private void install() {
        BungeeCord bungee = BungeeCord.getInstance();
        Logger bungeeLogger = bungee.getLogger();

        Handler[] handlers = bungeeLogger.getHandlers();
        for (Handler handler : handlers) {
            if (handler instanceof ColouredWriter) {
                Formatter oldFormatter = handler.getFormatter();
                handler.setFormatter(new ColorFormatter(this, oldFormatter));
            }
        }
    }

    private void saveDefaultConfig() {
        getDataFolder().mkdir();
        File configFile = new File(getDataFolder(), "config.yml");
        if (!configFile.exists()) {
            try (InputStream in = getResourceAsStream("config.yml")) {
                Files.copy(in, configFile.toPath());
            } catch (IOException ioExc) {
                getLogger().log(Level.SEVERE, "Error saving default config", ioExc);
            }
        }
    }
}
JavaScript:
package me.xDark.ConsoleColour.BungeeCord;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;

import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.Ansi.Attribute;
import org.fusesource.jansi.AnsiRenderer;
import org.fusesource.jansi.AnsiRenderer.Code;

public class ColorFormatter extends Formatter {

    private ConsoleColour plugin;
    private Formatter oldFormatter;

    private final DateFormat date = new SimpleDateFormat("HH:mm:ss");

    private final String reset = Ansi.ansi().a(Attribute.RESET).toString();
    private String defaultPluginColor;

    public ColorFormatter(ConsoleColour plugin, Formatter oldFormatter) {
        this.plugin = plugin;
        this.oldFormatter = oldFormatter;

        this.defaultPluginColor = format(plugin.getConfiguration().getString("PLUGIN"));
    }

    @Override
    public String format(LogRecord record) {
        StringBuilder formatted = new StringBuilder();
      
        String levelColor = "";
        if (plugin.getConfiguration().getBoolean("colorLoggingLevel")) {
            String log4JName = translateToLog4JName(record.getLevel());
            levelColor = format(plugin.getConfiguration().getString(log4JName));
        }

        formatted.append(levelColor);

        formatted.append(this.date.format(Long.valueOf(record.getMillis())));
        formatted.append(" [");
        formatted.append(record.getLevel().getName());
        formatted.append("] ");

        String message = oldFormatter.formatMessage(record);
        if (plugin.getConfiguration().getBoolean("colorPluginTag")) {
            message = colorizePluginTag(message, levelColor);
        }

        formatted.append(message);

        formatted.append('\n');
        if (record.getThrown() != null) {
            StringWriter writer = new StringWriter();
            record.getThrown().printStackTrace(new PrintWriter(writer));
            formatted.append(writer);
        }

        return formatted.toString();
    }

    public Formatter getOldFormatter() {
        return oldFormatter;
    }

    private String colorizePluginTag(String message, String levelColor) {
        if (!message.contains("[") || !message.contains("]")) {
            return message;
        }

        int startTag = message.indexOf('[') + 1;
        int endTag = message.indexOf(']', startTag);

        String pluginName = message.substring(startTag, endTag);
        String pluginColor = plugin.getConfiguration().getString("P-" + pluginName);
        if (pluginColor == null || pluginColor.isEmpty()) {
            pluginColor = defaultPluginColor;
        } else {
            pluginColor = format(pluginColor);
        }

        return reset + '[' + pluginColor + pluginName + reset + ']' + levelColor + message.substring(endTag + 1);
    }

    private String format(String pluginFormat) {
        String[] formatParts = pluginFormat.split(" ");
        Ansi ansi = Ansi.ansi();
        for (String format : formatParts) {
            for (Code ansiCode : AnsiRenderer.Code.values()) {
                if (ansiCode.name().equalsIgnoreCase(format)) {
                    if (ansiCode.isAttribute()) {
                        ansi.a(ansiCode.getAttribute());
                    } else if (ansiCode.isBackground()) {
                        ansi.bg(ansiCode.getColor());
                    } else {
                        ansi.fg(ansiCode.getColor());
                    }
                }
            }

            if ("blink".equalsIgnoreCase(format)) {
                ansi.a(Attribute.BLINK_SLOW);
                continue;
            }

            if ("strikethrough".equalsIgnoreCase(format)) {
                ansi.a(Attribute.STRIKETHROUGH_ON);
                continue;
            }

            if ("hidden".equalsIgnoreCase(format)) {
                ansi.a(Attribute.CONCEAL_OFF);
                continue;
            }

            if ("dim".equalsIgnoreCase(format)) {
                ansi.a(Attribute.INTENSITY_FAINT);
                continue;
            }

            if ("reverse".equalsIgnoreCase(format)) {
                ansi.a(Attribute.NEGATIVE_ON);
                continue;
            }

            for (Ansi.Color color : Ansi.Color.values()) {
                if (format.equalsIgnoreCase(color.name())) {
                    ansi.fg(color);
                    break;
                }
            }
        }

        return ansi.toString();
    }

    private String translateToLog4JName(Level level) {
        if (level == Level.SEVERE) {
            return "ERROR";
        } else if (level == Level.WARNING) {
            return "WARN";
        } else if (level == Level.INFO) {
            return "INFO";
        } else if (level == Level.CONFIG) {
            return "DEBUG";
        } else {
            return "TRACE";
        }
    }
}
 
Разве он что-то хотя-бы вообще нужное добавляет?
 
Мы так будем вечно крутиться, кпк белка в колесе
 

Поделиться этой страницей

Назад
Верх