package tc.oc.commons.bukkit.logging; import java.util.logging.Handler; import java.util.logging.LogRecord; import org.bukkit.Bukkit; /** * A log {@link Handler} that shows log messages to all players * with a given permission, and the console, if it also has that * permission. * * Can also generate colored messages from {@link ChatLogRecord}s, * and suppress stack traces for types of errors that don't need them. */ public class ChatLogHandler extends Handler { protected final String permission; public ChatLogHandler(String permission) { this.permission = permission; } protected String formatMessage(LogRecord record) { return record instanceof ChatLogRecord ? ((ChatLogRecord) record).getLegacyFormattedMessage() : record.getMessage(); } @Override public void publish(LogRecord record) { Bukkit.broadcast(formatMessage(record), permission); if(Bukkit.getConsoleSender().hasPermission(permission) && record.getThrown() != null && !(record instanceof ChatLogRecord && ((ChatLogRecord) record).suppressStackTrace())) { record.getThrown().printStackTrace(); } } @Override public void flush() { } @Override public void close() throws SecurityException { } }