Sssss...
如题,想要在聊天消息的玩家名之前添加一段点击后能执行指令的消息Bukkit 1.15.2


天辉胡萝卜
  1. TextComponent message = new TextComponent( "Click me" );
  2. message.setClickEvent( new ClickEvent( ClickEvent.Action.RUN_COMMAND, "xxxx" ) );
复制代码

Sssss...

不对啊
AsyncPlayerChatEvent#setFormat里面是String啊
这东西要怎么放进聊天格式?

天辉胡萝卜
Sssss... 发表于 2020-7-7 10:56
不对啊
AsyncPlayerChatEvent#setFormat里面是String啊
这东西要怎么放进聊天格式? ...

Jdoc上的例子。。。

  1. @EventHandler
  2. public void onChat(AsyncPlayerChatEvent e) {
  3.     Player p = e.getPlayer();
  4.     e.setCancelled(true);
  5.     e.getRecipients().clear();
  6.    
  7.     TextComponent message = new TextComponent( "Click me" );
  8.     message.setClickEvent( new ClickEvent( ClickEvent.Action.RUN_COMMAND, "xxxx" ) );

  9.     for(Player player : Bukkit.getOnlinePlayers()) {
  10.         player.spigot().sendMessage(message);
  11.     }
  12. }
复制代码

Sssss...
疾风暗影 发表于 2020-7-7 11:01
Jdoc上的例子。。。

那我是不是还要判定是否正在与其他插件对话(如qs)和是否被禁言(如ess)一类的东西?

南柯郡守
Sssss... 发表于 2020-7-7 11:05
那我是不是还要判定是否正在与其他插件对话(如qs)和是否被禁言(如ess)一类的东西? ...

禁言不用判断 AsyncPlayerChatEvent就是玩家已经发送出来的信息
但是还是有可能会是别的插件的对话

所以你的优先级应该调到Hightest(好像是这么拼)
然后ignorecancelled


Sssss...
南柯郡守 发表于 2020-7-7 12:31
禁言不用判断 AsyncPlayerChatEvent就是玩家已经发送出来的信息
但是还是有可能会是别的插件的对话

但如果是插件的对话,这样写还是会发出来吧?

南柯郡守
Sssss... 发表于 2020-7-7 12:38
但如果是插件的对话,这样写还是会发出来吧?

不会啊
比如你ignorecancelled
就不会发别的插件的对话了

因为一般插件的对话都会被cancelled(true)
你优先级最高之后你就不用担心那些奇怪的消息了

直接cancelled掉然后加上你的event再发出去就行了

Sssss...
南柯郡守 发表于 2020-7-7 12:44
不会啊
比如你ignorecancelled
就不会发别的插件的对话了

哦哦原来ignorecancelled是取消以后直接跳过其他监听器啊

我还以为是忽略cancel的意思