2017-07-06 116 views
0

我正在制作权限插件,并且想用他们的等级标记替换玩家的名字。为此,我有以下代码:Minecraft聊天信息替换

public void playerChat(AsyncPlayerChatEvent e) { 
    Player target = e.getPlayer(); 

    String message = e.getMessage().replaceAll(target.getName(), colorize(rFile.getString("players." + target)) + " " + target.getName()); 
    e.setMessage(message); 
} 

每当我向聊天发送消息时,它就会像通常那样。 我在这里做错了什么?

此外,我正在使用一个配置文件(cFile)和一个ranking.yml文件(rFile)。

+0

您应该使用AsyncPlayerChatEvent#setFormat格式化聊天消息! – Luftbaum

+1

您是否添加了“@ EventHandler”注释?您的听众是否已注册? – AscendedKitten

+0

我加了@eventHandler,但它仍然不起作用。 –

回答

0

首先,请确保包含@EventHandler注释。

@EventHandler 
public void playerChat(AsyncPlayerChatEvent e) { 
    [...] 
} 

接下来,检查您的onEnable()方法中是否注册了侦听器。 getServer().getPluginManager().registerEvents(new YourListener(...), this);

(与this更换YourListener的情况下,它是你的主类)

最后,Luftbaum说,事件中使用AsyncPlayerChatEvent#setFormat。 实例应用:

e.setFormat(colorize(rFile.getString("players." + target)) + ": " + e.getMessage()); 

编辑:

为了翻译颜色代码,例如 '& 3' Bukkit的ChatColor格式,则可以使用ChatColor#translateAlternativeColorCodes方法。

ChatColor.translateAlternateColorCodes('&', stringThatContainsCodes); 
+0

我该如何回报YourListener?我尝试了Listener(),但那不行。 –

+0

取决于;是你主要班级的听众吗?然后只要写下'this'。否则,您的监听器类的名称。 – AscendedKitten

+0

这听起来很愚蠢。听众怎么看?它是playerChat()吗? –

0

使用event.setFormat(playerRank + ": " + event.getMessage());

这基本上格式化消息是你想要的方式。你可以使用ChatColor做颜色。还要确保你有@EventHandler。