Java 在Bukkit config.yml中为字符串添加颜色代码翻译

Java 在Bukkit config.yml中为字符串添加颜色代码翻译,java,plugins,colors,bukkit,Java,Plugins,Colors,Bukkit,我正在尝试为我的插件添加颜色支持,当我这样做时,它工作了,但我在它的左侧得到了一个奇怪的符号。(). 这是我的密码: public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if(sender instanceof Player) { Player player = (Player)sender;

我正在尝试为我的插件添加颜色支持,当我这样做时,它工作了,但我在它的左侧得到了一个奇怪的符号。(). 这是我的密码:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
    if(sender instanceof Player)
        {
            Player player = (Player)sender;

            if(player.hasPermission("di.use"))
                { 
                if(label.equalsIgnoreCase("di"))
                {
                if(args.length == 0)
                {
                    ///////////////////////////////////////////////////////
                    player.sendMessage(ChatColor.DARK_GRAY+""+ChatColor.BOLD + "+" + ChatColor.AQUA+""+ChatColor.BOLD + "---------------" + ChatColor.GREEN+""+ChatColor.BOLD + "[" + ChatColor.YELLOW+""+ChatColor.BOLD + "DonationInfo" + ChatColor.GREEN+""+ChatColor.BOLD + "]" + ChatColor.AQUA+""+ChatColor.BOLD + "--------------" + ChatColor.DARK_GRAY+""+ChatColor.BOLD + "+");
                    player.sendMessage(ChatColor.AQUA+""+ChatColor.BOLD + "/di" + ChatColor.DARK_AQUA+""+ChatColor.BOLD+ " Spinel " + ChatColor.BLUE+""+ChatColor.BOLD + " - " + ChatColor.AQUA+""+ChatColor.BOLD + "Spinel Donation Info");
                    player.sendMessage(ChatColor.AQUA+""+ChatColor.BOLD + "/di" + ChatColor.DARK_BLUE+""+ChatColor.BOLD+ " Sapphire " +  ChatColor.BLUE+""+ChatColor.BOLD + " - " + ChatColor.AQUA+""+ChatColor.BOLD + "Sapphire Donation Info");
                    player.sendMessage(ChatColor.AQUA+""+ChatColor.BOLD + "/di" + ChatColor.RED+""+ChatColor.BOLD+ " Ruby " +  ChatColor.BLUE+""+ChatColor.BOLD + " - " + ChatColor.AQUA+""+ChatColor.BOLD + "Ruby Donation Info");
                    player.sendMessage(ChatColor.AQUA+""+ChatColor.BOLD + "/di" + ChatColor.LIGHT_PURPLE+""+ChatColor.BOLD+ " Amethyst " +  ChatColor.BLUE+""+ChatColor.BOLD + " - " + ChatColor.AQUA+""+ChatColor.BOLD + "Amethyst Donation Info");
                    player.sendMessage(ChatColor.DARK_GRAY+""+ChatColor.BOLD + "+" + ChatColor.AQUA+""+ChatColor.BOLD + "-----------------------------------------" + ChatColor.DARK_GRAY+""+ChatColor.BOLD + "+");
                    return true;
                    //////////////////////////////////////////////////////
                }
            }
        }else{
            player.sendMessage(ChatColor.RED + "Your do not have permissions to use this command!");
        }
            if(args[0].equalsIgnoreCase("Spinel"))
            {String a = getConfig().getString("Spinel");
            String coloredText = ChatColor.translateAlternateColorCodes('§', a);
                ///////////////////////////////////////////////////////////
                player.sendMessage(coloredText);
                return true;
                ///////////////////////////////////////////////////////////
            }
            if(args[0].equalsIgnoreCase("Sapphire"))
            {String b = getConfig().getString("Sapphire");
            String coloredText = ChatColor.translateAlternateColorCodes('§', b);
                ///////////////////////////////////////////////////////////
                player.sendMessage(coloredText);
                return true; 
                ///////////////////////////////////////////////////////////
            }
            if(args[0].equalsIgnoreCase("Ruby"))
            {String c = getConfig().getString("Ruby");
            String coloredText = ChatColor.translateAlternateColorCodes('§', c);
                ///////////////////////////////////////////////////////////
                player.sendMessage(coloredText);
                return true;
                ///////////////////////////////////////////////////////////
            }
            if(args[0].equalsIgnoreCase("Amethyst"))
            {String d = getConfig().getString("Amethyst");
            String coloredText = ChatColor.translateAlternateColorCodes('§', d);
                ///////////////////////////////////////////////////////////
                player.sendMessage(coloredText);
                return true;
                ///////////////////////////////////////////////////////////
            }
            if(player.hasPermission("di.admin"))
            {
                if(args[0].equalsIgnoreCase("reload"))
                {
                                        this.reloadConfig();
                    //////////////////////////////////////////////////////////
                    player.sendMessage(ChatColor.AQUA+""+ChatColor.BOLD+"[Donation_Info]" + ChatColor.DARK_AQUA+""+ChatColor.BOLD + " || " + ChatColor.AQUA+""+ChatColor.BOLD + "Plugin reloaded!");
                    //////////////////////////////////////////////////////////
                }
            }
        }

请帮帮我。谢谢。

首先,我想指出这是
Java
。Bukkit插件是用
Java
编码的。Java之于JavaScript就像汽车之于胡萝卜。。。您的代码不是JavaScript

无论如何,您的代码不能正常工作的原因是您不能为Minecraft使用
§
符号,因为Minecraft不允许使用所有特殊字符,因此当您尝试使用它翻译颜色代码时,它
确实工作,但
§
不会被删除,而是被
Å
替换

如果要翻译备用颜色代码,可以使用
ChatColor.translateAlternetColorCodes(Char,String)
。比如说,你想让一条信息变成绿色,让信息显示为Hi。您可以使用:

String toTranslate = "&4Donation 1";
String translated = ChatColor.translateAlternetColorCodes('&', toTranslate);
翻译后的字符串
将变成
ChatColor.DARK\u RED+“捐赠1”

您可以将第一行代码的参数中的
&
更改为任何其他字符,例如,您可以使用
$
。如果您使用了
$
,则
$4Donation 1
还会显示一条暗红色消息,表示“嗨”。但是,不能使用
§
符号和其他一些特殊字符来翻译颜色代码

以下是颜色代码的完整列表:

如果出于某种原因确实需要使用§§
符号,您可以通过执行以下操作侥幸逃脱:

String toTranslate = "§4Donation 1";
String translated = ChatColor.translateAlternetColorCodes('§', toTranslate)
String final = translated.replaceAll("Å", "") //replace the special characters with nothing, but keep the color

上面的方法可能有效,但我不推荐,因为它有点凌乱,你必须
UTF-8
(这并不坏),而且创建
§
符号比创建
&
符号要困难得多;我相信minecraft自己会使用特殊字符解析颜色代码

如果不是符号
§
,则只需使用
translateAlternateColorCodes(…)

否则,Jodmo解释得很好。

?您是否阅读了ChatColor.translateAlternateColorCodes的说明?