java - 如何添加聊天颜色?

标签 java bukkit

我想为我的插件添加颜色格式(就像 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/

相关文章:

java - Bukkit java 插件中的 ClassNotFoundException

java - 如何在谷歌应用引擎上部署 "vosao"CMS web

java - Hello World 上出现 NoClassDefFoundError

java - 读取嵌入式 H2 数据库

java - 获取启动播放器的准确寻找方向

java - 怎样才能让鸡蛋不会对队友造成击退?

java - Java 8中评估/path/a是否是/path的子目录的正确方法是什么?

java - 滚动后 GridView 项的选定背景消失

java - 如何获取bukkit版本?

java - 如何在配置中设置爆炸威力?