武吉。聊天中的颜色支持 (&) ?和用户名 onplayerjoin 不起作用?

Bukkit. Color support in chat (&) ? and Username onplayerjoin does not work?

我有两个问题。

问题 1

我想获得聊天中必需品的颜色,但我不知道该怎么做我试过这个:

@EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent chatevent){
        chatevent.getMessage().replaceAll("&", "§");
        for (String word : chatevent.getMessage().split(" ")){
            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!");
             }
          }
        }
     }

这一行:chatevent.getMessage().replaceAll("&", "§");但它不起作用。我怎样才能在聊天中获得颜色支持?

问题 1 更新 好的,这就是我所做的:

public void onPlayerChat(AsyncPlayerChatEvent chatevent){
        for (String word : chatevent.getMessage().split(" ")){
            word.replaceAll("&", "§");
            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!");
             }
          }
        }
     }

但是还是不行。我怎样才能在聊天颜色中修复它?我知道你不需要告诉我的字符串。我是一名游戏开发者,我知道这些简单的东西。

2 问题已解决

另一个问题是我希望 onplayerjoin 事件在服务器所有者加入时宣布名称匹配并且它确实有效但现在它不是我做错了什么?控制台说名称不能为空。怎么了?这是活动:

@EventHandler
public void onPlayerJoin(PlayerJoinEvent joinevent){
    Player getplayer = joinevent.getPlayer();
    getplayer.sendMessage(ChatColor.AQUA + "Hey " + getplayer.getName() + "! Welcome to the Ultimate Prison server!");
    // Spawning player in spawn location
    if(SysMng.getspawnsdata().getConfigurationSection("spawn") == null){
        getplayer.sendMessage(ChatColor.RED + "Spawn is not set!. Report this problem to owner INSTANTLY!");
    }
    World w = Bukkit.getServer().getWorld(SysMng.getspawnsdata().getString("spawn.world"));
    double x = SysMng.getspawnsdata().getDouble("spawn.x");
    double y = SysMng.getspawnsdata().getDouble("spawn.y");
    double z = SysMng.getspawnsdata().getDouble("spawn.z");
    getplayer.teleport(new Location(w, x, y, z));
    // ----------------------------------------------------------------
    if(getplayer.getName() == "Herobrine112211"){
        Bukkit.getServer().broadcastMessage(ChatColor.WHITE + "[" + ChatColor.GOLD + "BROADCAST" + ChatColor.WHITE + "] " + ChatColor.GOLD + "Server Creator Herobrine112211 has joined the game!!!!!!!!!!");
    }
}

行 if(getplayer.getName() == "Herobrine112211"){ 是我认为的问题。我确实尝试将其更改为完全相同的名称,但仍然出现相同的错误。我该如何解决?

问题 2 修复

if(getplayer.getName().equalsIgnoreCase("Herobrine112211")){

我知道应该是 1 个问题,但我不想 post 2 个问题比 1 个更好。

谢谢。如果您需要更多信息,我会一直在这里阅读答案。

问题 1 "Thomas"

像这样?

@EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent chatevent){
        for (String word : chatevent.getMessage().split(" ")){
            word = word.replaceAll("&", "§");
            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!");
             }
          }
        }
     }

还是不行。

字符串是不可变的。您不能就地更改它们。调用 replaceAll() returns 一个新字符串。如果你想用新词替换旧词,你需要做:

word = word.replaceAll("&", "§");