Java 如何添加聊天颜色?
我想给我的插件添加颜色格式(就像essentials在聊天中有颜色一样)。例如,Java 如何添加聊天颜色?,java,bukkit,Java,Bukkit,我想给我的插件添加颜色格式(就像essentials在聊天中有颜色一样)。例如,&6test将变成金色的“test” 我差点加上那些颜色,但我有个问题。它删除整个消息并保留绿色测试消息。如何添加颜色 现在我用的是: public void onPlayerChat(AsyncPlayerChatEvent chatevent){ for (String word : chatevent.getMessage().split(" ")){ word = word.repla
&6test
将变成金色的“test”
我差点加上那些颜色,但我有个问题。它删除整个消息并保留绿色测试消息。如何添加颜色
现在我用的是:
public void onPlayerChat(AsyncPlayerChatEvent chatevent){
for (String word : chatevent.getMessage().split(" ")){
word = word.replaceAll("&2", "§2test");
chatevent.setMessage(word);
if(SysMng.getConfig().getStringList("badwords").contains(word)){
if (!chatevent.getPlayer().hasPermission("bypassbadwords")){
chatevent.setCancelled(true);
chatevent.getPlayer().sendMessage(ChatColor.RED + "Dont use dirty or swear words!");
}
}
}
}
但是,正如我所说,它删除了整个消息并留下了绿色的测试消息。这是由于:
word = word.replaceAll("&2", "§2test");
chatevent.setMessage(word);
忽略“脏话”部分,这只是为了防止人们使用脏话。如何修复此问题,以便玩家可以在聊天中使用颜色代码?使用
ChatColor.{COLORNAME}
例如:
word=word.replaceAll(“&2”,ChatColor.GREEN+“test”)代码>
所有可用颜色代码的完整列表如下:
您可能需要像这样导入org.bukkit.ChatColor
:
import org.bukkit.ChatColor代码>
编辑:至于不更换正确零件的原因,与颜色无关。您正在使用.replaceAll(String regex,String replacement)
,它接受一个正则表达式,因为您不关心正则表达式,所以只需使用.replace(CharSequence target,CharSequence replacement)
函数即可。它仍将替换所有出现的字符串
EDIT2:您也在调用chatevent.setMessage(word)
对于每个单词,您只希望在处理完所有单词后调用它。使用StringBuilder并将每个单词附加到其中,然后将消息设置在末尾(在for循环之外)。解构包含多个单词的字符串。您需要做的是创建一个额外的字符串并在循环中重新编译消息。然后执行:chatevent.setMessage(从您的循环中新构造的消息)
但是我可以想象,无论您使用什么,您可能都必须将它们分割成多个不同的对象,以便从循环中创建消息。如果您想翻译颜色代码(例如,从&
符号),您可以使用
这将自动将所有&
颜色代码转换为带有§
符号的颜色代码,并因此转换为相应的ChatColor
例如,如果您使用
String original = "&atest";
String formatted = ChatColor.translateAlternateColorCodes('&', original);
格式化
将等于“§atest”
,这等于ChatColor.GREEN+“test”
如果您想允许玩家使用&
颜色代码聊天,您可以先侦听AsyncPlayerChatEvent
(在一个类中),然后使用.translateAlternateColorCodes
将消息设置为正确颜色的消息
@EventHandler
public void playerChat(AsyncPlayerChatEvent e){
//get the chat message
String original = e.getMessage();
//format the chat message with &colorCodes
String formatted = ChatColor.translateAlternateColorCodes('&', original);
//set the message to the formatted message
e.setMessage(formatted);
}
使用此方法,如果玩家键入类似“&6Hello,&aWorld!”的内容,它将被转换为ChatColor.GOLD+“Hello,+ChatColor.GREEN+“World!”
将整个消息替换为“§2test”的原因是您正在拆分字符串,而不是重新构建它
相反,你应该在使用后将字符串拆分成,然后在检查它是否是诅咒词之前从使用的字符串中去除颜色(这将防止玩家通过在诅咒词前面放置颜色代码来绕过审查)它与word=word.replaceAll(&2“,“§2test”)相同;它仍然不能解决我的问题。我想我已经在编辑中解决了它。没关系,我发现了另一个错误,这是在编辑中提到的。所以我的代码看起来如何我不明白。我如何使用它?我把它放在哪里。@Reaper123只要你想将&ahi
更改为§ahi
,例如,你就可以使用ChatColor.translateAlternateColorCodes('&',stringToFormat)
。请看最后一个答案示例
@EventHandler
public void playerChat(AsyncPlayerChatEvent e){
//get the chat message
String original = e.getMessage();
//format the chat message with &colorCodes
String formatted = ChatColor.translateAlternateColorCodes('&', original);
//set the message to the formatted message
e.setMessage(formatted);
}