我想为我的插件添加颜色格式(就像 essentials 在聊天中有颜色一样)。例如,&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.translateAlternateColorCodes
ChatColor.translateAlternateColorCodes('&', str);
这会自动将所有 &
颜色代码转换为带有 §
符号的颜色代码,并因此转换为相应的 ChatColor
。
所以,例如,如果你使用
String original = "&atest";
String formatted = ChatColor.translateAlternateColorCodes('&', original);
formatted
将等于 "§atest"
,等于 ChatColor.GREEN + "test"
。
如果你想让玩家使用 &
颜色代码聊天,你可以先监听 AsyncPlayerChatEvent
(在 implements Listener
的类中),然后使用 .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” 替换的原因是因为您正在拆分字符串,而不是重建它。
相反,您应该在 使用 translateAlternateColorCodes
后拆分字符串, 然后使用 ChatColor.stripColor(String)
从字符串中去除颜色在检查它是否是诅咒词之前(这将防止玩家通过在诅咒词前面放置颜色代码来绕过审查)
关于java - 如何添加聊天颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079636/