berry64
本帖最后由 berry64 于 2018-8-26 00:33 编辑

进入目录



Chapter 3
CustomPayload, PluginMessage, 以及BC&服务端插件之间的通讯 Part II


发送PluginMessage的正确姿势
在上一个章节中我介绍了监听PluginMessage的方法和注册频道的方法,所以在本篇里将介绍从bc里向一个指定频道发送消息。
和读取byte[]信息同理,我们这里发送的也是byte[]信息,而且在java里有很多种方法可以转化我们的信息至字节组,但是为了方便操作这里我们将会继续使用Google GuavaByteArrayDataOutput类来进行操作


在上篇里介绍过了ServerServerInfo类,也解释了类里的一部分方法,而感谢BC对于PluginMessage的支持,我们如果要发送一条PluginMessage到指定服务器只需要这样操作:



关于如何以正确姿势写入ByteArrayDataOutput:
[spoiler] 首先,你需要确定你需要发送的数据和该数据类型,然后再使用适应的方法写入data。
数据类型方法
UTF字符串data.writeUTF(String);
Int数字data.writeInt(int);
double数组data.writeDouble(double);
boolean值data.writeBoolean(bool);
float数字data.writeFloat(float);
以此类推


举个栗子:
这里我们的数据包需要包含以下数据:
  • 玩家名字
  • 玩家编号
  • 玩家坐标x,y,z
, 那么假设这个玩家的名字叫Steve, 玩家编号为0,坐标依次为123.0, 72.5, -120.32
那么我们可以这样写数组:
代码:                                                                - □ ╳
ServerInfo si = BungeeCord.getInstance().getPlayer("Steve").getServer().getInfo();      
//获取玩家所在的服务器的serverinfo
double posx, posy, posz;        //假设这里都定义好了
ByteArrayDataOutput data = ByteStreams.newDataOutput();
data.writeUTF("Steve");          //先写入玩家的名字,以utf编码
data.writeInt(0);                    //再写入玩家的数字id

data.writeDouble(posx);
data.writeDouble(posy);
data.writeDouble(posz);
//注意这里的位置和顺序是有关系的

//之后我们直接发送
si.sendData("MyChannel", data.toByteArray());
> _
这样,我们的一个包就发送完毕了


接收PluginMessage的正确姿势
在上一章节中,我介绍了如何在各个核心接受数据,那么相信看了上面的各种write方式大概也能猜出来上一章节中所写到的ByteArrayDataInput data如何使用了吧。
比如如果我们确定发送的时候第一行数据是UTF格式的字符串,那么我们就可以直接使用
  1. data.readUTF();
复制代码
来获取这个值,其他类型的也同理,说的简单点就是你发送数据的时候是 write[什么] 读取的时候就是 read[什么]

同楼上的栗子:
代码:                                                                - □ ╳
ByteArrayDataInput data = ByteStreams.newDataInput(message);

String PLAYER_NAME = data.readUTF();
int PLAYER_ID = data.readInt();
double PLAYER_X = data.readDouble();
double PLAYER_Y = data.readDouble();
double PLAYER_Z = data.readDouble();

/*这时候你可能发现了为什么这三个都是一样的,不会读错吗?这是因为他们的顺序,在我们发送数据的时候依次是x,y,z 所以接受的时候也保留了这个顺序,所以像这样读取会读取出三个不同的double*/
> _
至此,你应该学会了基本BC与子服的通讯,剩下的能用这些数据包干♂出什么事就是你自己发挥了


如果本教程有帮到你请考虑给个好评评价/回复一下本帖,P.S. 给人气不会损失金币的哦



进入目录

lliiooll
找了半天终于找到了

C__C
教程很好  希望楼主经常更新一下教程进度  小伙伴都很期待下面的教程

GhostGuJI_Dada
感谢berry64大佬的教程~

第一页 上一页 下一页 最后一页