【问题标题】:Minecraft Chat Message Replacement我的世界聊天消息替换
【发布时间】:2017-07-12 07:07:07
【问题描述】:

我正在制作一个权限插件,并想用他们的排名标签替换玩家的名字。为此,我有以下代码:

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) 和一个 rank.yml 文件 (rFile)。

【问题讨论】:

  • 你应该使用 AsyncPlayerChatEvent#setFormat 来格式化聊天消息!
  • 您是否添加了@EventHandler 注释?你的听众注册了吗?
  • 我添加了@eventHandler,但还是不行。

标签: java minecraft bukkit


【解决方案1】:

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

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

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

(如果它是您的主要课程,请将 YourListener 替换为 this

最后,正如Luftbaum 所说,在事件中使用AsyncPlayerChatEvent#setFormat。 示例用法:

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

编辑:

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

ChatColor.translateAlternateColorCodes('&', stringThatContainsCodes);

【讨论】:

  • 我用什么来代替 YourListener?我尝试了 Listener(),但这不起作用。
  • 视情况而定;你的听众在你的主班吗?然后写this。否则,您的侦听器类的名称。
  • 这听起来很愚蠢。听者会怎么看?是 playerChat() 吗?
  • 这种情况下的监听器就是你的类;如果您的事件(在本例中为聊天事件)也在扩展JavaPlugin 的类中,那么您可以只使用this。不过,您可能已将该事件放入一个单独的类中,即一个侦听器。在这种情况下,您必须以这种方式注册它 [...] new YourClassNameHere();
  • 这就是我现在所拥有的:getServer().getPluginManager().registerEvents(this, this); 它给我一个错误:PluginManager 类型中的 registerEvents 不适用于参数(Main,Main)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多