何昌浩
就类似manuaddv那样的。

emmm这个是输入了一次称号第二次发言就没称号了。。。
翻了很久文档都没找到,希望大佬们能帮萌新咱解决

我就想实现:输入自己的称号以后发言一直都输入的那个称号。。

零点星辰
首先如果不执行一些必须在主线程内执行的任务的话, 建议 AsyncPlayerChatEvent 替代 PlayerChatEvent, 这样你看着也舒服... 这大删除线... 当然如果想在 AsyncPlayerChatEvent 中执行同步任务也可以通过 runTimer()。

我不是特别清楚 setDisplayName 造成的效果是否持久, 菜鸡大抵只能抛砖引玉下:
我写称号的话都是监听玩家聊天然后每次都设置一下 displayname... 比较菜。你可以试试把玩家称号写进 HashMap 然后每次事件都调用一次 setDisplayName 设置称号。
如果还是不行建议检查插件兼容性, 是否有插件比你更晚修改了称号导致被覆盖, 或者是例如 MiaoChat 这样的聊天格式设置不正确, 需要在聊天格式里将 %playername% 设置为 %playerdisplayname%, 才能显示出 DisplayName。

另外, 一般都是用 HashMap 或者单独的玩家实例来存储玩家是否在设置称号吧, 不清楚为啥要用 ScoreboardTag。

尺素情深
建议使用Vault前置好些awa

何昌浩
新科 发表于 2020-5-17 14:49
首先如果不执行一些必须在主线程内执行的任务的话, 建议 AsyncPlayerChatEvent 替代 PlayerChatEvent, 这样 ...

啊这!谢谢带佬!

1378495772
@EventHandler(priority = EventPriority.LOWEST)
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
    event.setFormat(String.format("§7[§b%s§7]§r%s", "YOUR_TITLE", event.getFormat()));
}