2017-07-06 95 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。