在Bukkit config.yml中为字符串添加颜色代码转换

时间:2014-05-20 20:35:39

标签: java plugins colors bukkit

我正在尝试为我的插件添加颜色支持,当我这样做时,它可以工作,但我在它的左侧得到一个奇怪的符号。 (http://postimg.org/image/5tuimwlsb/)。这是我的代码:

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!");
                    //////////////////////////////////////////////////////////
                }
            }
        }

请帮帮我。谢谢。

2 个答案:

答案 0 :(得分:1)

首先,我想我会指出这是Java。 Bukkit插件使用Java编码。 Java就是JavaScript,因为汽车是胡萝卜......你的代码不是用JavaScript。

无论如何,你的代码无法正常工作的原因是因为你无法使用Minecraft的§符号,因为MineCraft不允许所有特殊字符,所以当你尝试用它翻译颜色代码时,它{ {1}}工作,但DOES未被移除,而是替换为§

如果要翻译备用颜色代码,可以使用Å。所以,让我们说,例如,您希望将消息设为绿色,并显示消息 Hi 。你可以使用:

ChatColor.translateAlternetColorCodes(Char, String)

字符串String toTranslate = "&4Donation 1"; String translated = ChatColor.translateAlternetColorCodes('&', toTranslate); 将成为translated

您可以将第一行代码的参数中的ChatColor.DARK_RED + "Donation 1"更改为任何其他字符,例如,您可以使用&。如果你使用了$,那么$也会发出一条暗红色的消息,上面写着"嗨"。但是,您不能使用$4Donation 1符号和其他一些特殊字符来翻译颜色代码。

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

如果您出于某种原因确实需要使用§符号,那么 MAY 可以通过这样做来躲过它:

§

以上可能有用,虽然我不推荐它,因为它有点凌乱,你必须String toTranslate = "§4Donation 1"; String translated = ChatColor.translateAlternetColorCodes('§', toTranslate) String final = translated.replaceAll("Å", "") //replace the special characters with nothing, but keep the color (不是它不好),而且它&#39 ;创建UTF-8符号比创建§符号要困难得多。

答案 1 :(得分:0)

如果您已经有§,那么您不需要做任何事情;我确实相信我的世界会使用特殊字符解析颜色代码。

translateAlternateColorCodes(...)不是符号§时,您只需要使用{{1}}。

否则,jojodmo解释得很好。