All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.craftbukkit.command.ColouredConsoleSender Maven / Gradle / Ivy

package org.bukkit.craftbukkit.command;

import jline.Terminal;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.craftbukkit.CraftServer;
import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.Ansi.Attribute;

import java.util.EnumMap;
import java.util.Map;

public class ColouredConsoleSender extends CraftConsoleCommandSender {
  private final Terminal terminal;
  private final Map replacements = new EnumMap(ChatColor.class);
  private final ChatColor[] colors = ChatColor.values();

  protected ColouredConsoleSender() {
    super();
    this.terminal = ((CraftServer) getServer()).getReader().getTerminal();

    replacements.put(ChatColor.BLACK, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.BLACK).boldOff().toString());
    replacements.put(ChatColor.DARK_BLUE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.BLUE).boldOff().toString());
    replacements.put(ChatColor.DARK_GREEN, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.GREEN).boldOff().toString());
    replacements.put(ChatColor.DARK_AQUA, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.CYAN).boldOff().toString());
    replacements.put(ChatColor.DARK_RED, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.RED).boldOff().toString());
    replacements.put(ChatColor.DARK_PURPLE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.MAGENTA).boldOff().toString());
    replacements.put(ChatColor.GOLD, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.YELLOW).boldOff().toString());
    replacements.put(ChatColor.GRAY, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.WHITE).boldOff().toString());
    replacements.put(ChatColor.DARK_GRAY, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.BLACK).bold().toString());
    replacements.put(ChatColor.BLUE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.BLUE).bold().toString());
    replacements.put(ChatColor.GREEN, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.GREEN).bold().toString());
    replacements.put(ChatColor.AQUA, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.CYAN).bold().toString());
    replacements.put(ChatColor.RED, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.RED).bold().toString());
    replacements.put(ChatColor.LIGHT_PURPLE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.MAGENTA).bold().toString());
    replacements.put(ChatColor.YELLOW, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.YELLOW).bold().toString());
    replacements.put(ChatColor.WHITE, Ansi.ansi().a(Attribute.RESET).fg(Ansi.Color.WHITE).bold().toString());
    replacements.put(ChatColor.MAGIC, Ansi.ansi().a(Attribute.BLINK_SLOW).toString());
    replacements.put(ChatColor.BOLD, Ansi.ansi().a(Attribute.UNDERLINE_DOUBLE).toString());
    replacements.put(ChatColor.STRIKETHROUGH, Ansi.ansi().a(Attribute.STRIKETHROUGH_ON).toString());
    replacements.put(ChatColor.UNDERLINE, Ansi.ansi().a(Attribute.UNDERLINE).toString());
    replacements.put(ChatColor.ITALIC, Ansi.ansi().a(Attribute.ITALIC).toString());
    replacements.put(ChatColor.RESET, Ansi.ansi().a(Attribute.RESET).toString());
  }

  public static ConsoleCommandSender getInstance() {
    if (Bukkit.getConsoleSender() != null) {
      return Bukkit.getConsoleSender();
    } else {
      return new ColouredConsoleSender();
    }
  }

  @Override
  public void sendMessage(String message) {
    if (terminal.isAnsiSupported()) {
      if (!conversationTracker.isConversingModaly()) {
        String result = message;
        for (ChatColor color : colors) {
          if (replacements.containsKey(color)) {
            result = result.replaceAll("(?i)" + color.toString(), replacements.get(color));
          } else {
            result = result.replaceAll("(?i)" + color.toString(), "");
          }
        }
        System.out.println(result + Ansi.ansi().reset().toString());
      }
    } else {
      super.sendMessage(message);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy