- Баллы
- 96
del
Последнее редактирование:
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
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();
}
}
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";
}
}
}
... прочитай p.sРазве он что-то хотя-бы вообще нужное добавляет?
Ну а зачем его в сеть выкладывать, если он нихрена не добавляет?... прочитай p.s
Скриншот..Ну а зачем его в сеть выкладывать, если он нихрена не добавляет?
Ну и зачем это нужно?Скриншот..
ну типо это нуНу и зачем это нужно?
Баранки гну, ответишь?ну типо это ну
....
Я его сделал, т.к. вдруг кому то нужен будет, тебе не нужен - вот и все.Баранки гну, ответишь?
Ну эт наврятли.вдруг кому то нужен будет
... "Вдруг", я и не утверждал что он кому то нужен будетНу эт наврятли.
А зачем тогда писал его?я и не утверждал что он кому то нужен будет
А зачем тогда писал его?
p.s: Дело было вечером, делать было нечего...
p.s: Дело было вечером, делать было нечего...
Ну а зачем его в сеть выкладывать?