1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Неподтвержденные плагины", создана пользователем xDark, 1 авг 2016.

  1. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    del
     
    Последнее редактирование: 12 июл 2018
  2. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    сурцы:
    Код:
    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");
        }
    }
    
    Код:
    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();
        }
    }
     
    Последнее редактирование: 1 авг 2016
  3. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Код:
    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);
                }
            }
        }
    }
    Код:
    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";
            }
        }
    }
    
     
  4. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Разве он что-то хотя-бы вообще нужное добавляет?
     
  5. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    ... прочитай p.s
     
  6. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Ну а зачем его в сеть выкладывать, если он нихрена не добавляет?
     
  7. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Скриншот..
     
  8. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Ну и зачем это нужно?
     
  9. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    ну типо это ну
    ....
     
  10. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Баранки гну, ответишь?
     
  11. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Я его сделал, т.к. вдруг кому то нужен будет, тебе не нужен - вот и все.
     
  12. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Ну эт наврятли.
     
  13. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    ... "Вдруг", я и не утверждал что он кому то нужен будет
     
  14. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    А зачем тогда писал его?
     
  15. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
     
  16. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
     
  17. Автор темы
    xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Мы так будем вечно крутиться, кпк белка в колесе
     
  18. Bobrov

    Bobrov Новичок

    Баллы:
    6
    Имя в Minecraft:
    Bobrov
    Действительно, бесполезный плагин.
     

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