Java 如何从配置中正确添加颜色

Java 如何从配置中正确添加颜色,java,yaml,config,bukkit,regex,Java,Yaml,Config,Bukkit,Regex,经过大量的研究,我发现了几十种基本上相同的方法;这是为了进入聊天室 但是 publicstaticvoidsendplayer(播放器p,字符串s){ if(sm.getPrefixUse()){ //-方法1 String String=s.replaceAll(“(&([a-f0-9])”,“\u00A7$2”); p、 sendMessage(“[”+sm.getPrefixName().replaceAll(&([a-f0-9])”,“\u00A7$2”)+“]”字符串); //这是一种

经过大量的研究,我发现了几十种基本上相同的方法;这是为了进入聊天室

但是

publicstaticvoidsendplayer(播放器p,字符串s){
if(sm.getPrefixUse()){
//-方法1
String String=s.replaceAll(“(&([a-f0-9])”,“\u00A7$2”);
p、 sendMessage(“[”+sm.getPrefixName().replaceAll(&([a-f0-9])”,“\u00A7$2”)+“]”字符串);
//这是一种方法,但不起作用-聊天中没有颜色
//-方法2
p、 sendMessage(ChatColor.translateAlternateColorCodes('&',sm.getPrefixName())+ChatColor.translateAlternateColorCodes('&',s));
//这是另一个-聊天中没有颜色
//-方法3
字符串working=“&4This works.replaceAll”(&a-f0-9])”,“\u00A7$2”);
p、 发送消息(工作);
//-方法4
String thisttoo=“&4这太有效了”;
p、 sendMessage(ChatColor.translateAlternateColorCodes('&',thisttoo));
}否则{
p、 发送消息;
}
}
方法1和2在聊天中不显示颜色-当我从配置中获取字符串时

方法3和4起作用,基本上与上面相同,但字符串在这里定义

如何从配置中获取字符串并将其发送给具有正确颜色的播放器

编辑: 假设这是我的配置

前缀:
用法:true#默认为true[真/假]
#true=为消息添加前缀
#false=不向消息添加前缀
姓名:&4Hub
#插件前缀-出现在消息之前的前缀
如果我在消息中添加颜色代码,它将返回null

PlayerJoin上的公共无效(PlayerJoin事件e){
if(sm.getMotdUse()){
sendPlayer(p,sm.getMotdMessage());
回来
}
……什么

然后

publicstaticvoidsendplayer(播放器p,字符串s){
if(sm.getPrefixUse()){
p、 sendMessage(ChatColor.translateAlternateColorCodes('&',s));
p、 sendMessage(s.replaceAll(“&”和“§”);
}否则{
p、 发送消息;
}
}
基本摘要如果motd为真,则发送motd彩色消息+前缀 但前缀返回null 消息返回时少了一个单词

假设motd消息是“&4WelcometoServer” 它发送不带颜色的“到服务器”

您可以使用

&(?=[0-9a-fA-F])
替换为
ChatColor.COLOR\u CHAR

public static void replaceVirtualColorCodes(String str) {
    return str.replaceAll("&(?=[0-9a-fA-F])", Character.toString(ChatColor.COLOR_CHAR));
}

是一个正则表达式演示。

类型字符串中的方法replaceAll(字符串,字符串)不适用于参数(字符串,字符)@Raizer呃,我的错。我添加了一个字符串转换。好吧,我想我做错了什么。我已经尝试修复这个错误三天了,但现在我卡住了!-这个方法工作得很好,但当我从配置文件中获取字符串时。它要么返回null,要么删除第一个word@Raizer我想你可能在别的地方做错了,是吗你想发布测试插件的全部代码(以及测试文件)吗在某个描述的文本托管软件中,然后将其保留在注释中?虽然有时我可能很忙,但我的回答中提到的方法确实有效。已解决-在配置文件中,字符串需要用引号括起来