如题,想要在聊天消息的玩家名之前添加一段点击后能执行指令的消息Bukkit 1.15.2
- TextComponent message = new TextComponent( "Click me" );
 
- message.setClickEvent( new ClickEvent( ClickEvent.Action.RUN_COMMAND, "xxxx" ) );
Sssss... 发表于 2020-7-7 10:56
不对啊
AsyncPlayerChatEvent#setFormat里面是String啊
这东西要怎么放进聊天格式? ...
Jdoc上的例子。。。
- @EventHandler
 
- public void onChat(AsyncPlayerChatEvent e) {
 
-     Player p = e.getPlayer();
 
-     e.setCancelled(true);
 
-     e.getRecipients().clear();
 
-     
 
-     TextComponent message = new TextComponent( "Click me" );
 
-     message.setClickEvent( new ClickEvent( ClickEvent.Action.RUN_COMMAND, "xxxx" ) );
 
 
-     for(Player player : Bukkit.getOnlinePlayers()) {
 
-         player.spigot().sendMessage(message);
 
-     }
 
- }
疾风暗影 发表于 2020-7-7 11:01
Jdoc上的例子。。。
那我是不是还要判定是否正在与其他插件对话(如qs)和是否被禁言(如ess)一类的东西?
Sssss... 发表于 2020-7-7 11:05
那我是不是还要判定是否正在与其他插件对话(如qs)和是否被禁言(如ess)一类的东西? ...
禁言不用判断 AsyncPlayerChatEvent就是玩家已经发送出来的信息
但是还是有可能会是别的插件的对话
所以你的优先级应该调到Hightest(好像是这么拼)
然后ignorecancelled
南柯郡守 发表于 2020-7-7 12:31
禁言不用判断 AsyncPlayerChatEvent就是玩家已经发送出来的信息
但是还是有可能会是别的插件的对话
但如果是插件的对话,这样写还是会发出来吧?
Sssss... 发表于 2020-7-7 12:38
但如果是插件的对话,这样写还是会发出来吧?
不会啊
比如你ignorecancelled
就不会发别的插件的对话了
因为一般插件的对话都会被cancelled(true)
你优先级最高之后你就不用担心那些奇怪的消息了
直接cancelled掉然后加上你的event再发出去就行了
南柯郡守 发表于 2020-7-7 12:44
不会啊
比如你ignorecancelled
就不会发别的插件的对话了
哦哦原来ignorecancelled是取消以后直接跳过其他监听器啊
我还以为是忽略cancel的意思