如题,好像涉及到NMS。。求教
ActionBarAPI会帮助你:https://www.spigotmc.org/resources/actionbarapi-1-8-1-12-1.1315/
如果你不想你的插件依赖于它,你可以参考它的源代码实现你自己的。
ActionBarAPI:https://github.com/ConnorLinfoot/ActionBarAPI
如果你不想你的插件依赖于它,你可以参考它的源代码实现你自己的。
ActionBarAPI:https://github.com/ConnorLinfoot/ActionBarAPI
谢谢两位大佬=-=
楼上两位,一个没有戳中要点,一个乘机推广UDPL
你可以直接 Player.sendActionBar(String); 来发送
但是,你的IDE用需要使用1.9版本以上的服务端核心才会有这个API
你可以直接 Player.sendActionBar(String); 来发送
但是,你的IDE用需要使用1.9版本以上的服务端核心才会有这个API
 本帖最后由 602723113 于 2017-10-30 23:16 编辑 
5L的评论不知道如何评价...但sendActionbar()这个方法是Paper自己偷偷塞进核心的,你可以去查询最新的BukkitAPI,里面并无该方法
但是你要知道要使用nms的话就差不多找对方向了...
首先我们看 Minecraft协议里的Chat http://wiki.vg/Protocol#Chat_Message_.28clientbound.29
对应过来的就是nms下的PacketPlayOutChat这个封包
那么我们从协议里面得知 封包内的
private IChatBaseComponent a; ---> 就是 JSON Data
private byte b; ---> 就是Position [0: chat (chat box), 1: system message (chat box), 2: game info (above hotbar)]
所以我们就可以这么做,我们要用actionbar,那无非就是 Position 设置为2咯
所以我们可以写出以下代码
复制代码以上便是我利用nms给玩家发送actionbar的研究过程
但是你要知道要使用nms的话就差不多找对方向了...
首先我们看 Minecraft协议里的Chat http://wiki.vg/Protocol#Chat_Message_.28clientbound.29
对应过来的就是nms下的PacketPlayOutChat这个封包
那么我们从协议里面得知 封包内的
private IChatBaseComponent a; ---> 就是 JSON Data
private byte b; ---> 就是Position [0: chat (chat box), 1: system message (chat box), 2: game info (above hotbar)]
所以我们就可以这么做,我们要用actionbar,那无非就是 Position 设置为2咯
所以我们可以写出以下代码
 
 
- PacketPlayOutChat packetPlayOutChat = new PacketPlayOutChat(IChatBaseComponent.ChatSerializer.a("test"), (byte) 2);
 
- EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
 
- entityPlayer.playerConnection.sendPacket(packetPlayOutChat);</p><p>
 
- // 注:以上的代码使用 spigot1.10.2 编写,不同版本代码会有所改变!
 
- // 比如以下为1.12的
 
- IChatBaseComponent iChatBaseComponent = IChatBaseComponent.ChatSerializer.a("test");
 
-         
 
- PacketPlayOutChat packetPlayOutChat = new PacketPlayOutChat(iChatBaseComponent, ChatMessageType.GAME_INFO);
 
- EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
 
- entityPlayer.playerConnection.sendPacket(packetPlayOutChat);
 
- // 可以看到不同的就是nms下把 byte 封装成了ChatMessageType
 
子然君 发表于 2017-10-30 18:47
楼上两位,一个没有戳中要点,一个乘机推广UDPL
你可以直接 Player.sendActionBar(String); 来发送
...
┐(‘~`;)┌大家使用统一的API又没什么不对,再说了如果要知道原理也可以看其中的源码