欢迎光临散文网 会员登陆 & 注册

我的世界Minecraft 1.19 Mod开发教程分享-14-网络

2023-06-28 23:49 作者:Flandre芙兰  | 我要投稿


创建类和文件

networking/ModMessage 

输入以下的代码


  • SimpleChannel是Minecraft中发送和接受自定义数据包的类,通过SimpleChannel来创建一个网络通道,注册发送和接受的数据包,这样就可以在Minecraft的客户端和服务器之间进行通讯。

  • 其中packetId是包的标识,用于网络传输的数据包的区分。自增保证唯一。

  • NetworkRegistry是网络管理的类

    • 用于客户端和服务器是否接送该版本的消息。

    • ChannelBuilder是构建网络通道的辅助类,使用ChannelBuilder来指定网络通道的名称,协议版本等。

  • ResourceLocation声明和指定游戏对象的类,辅助查找特定的字符,从mod id下的assets或者data下查找数据。

  • sendToServer方法是SimpleChannel类提供的方法,将一个数据包发送到服务器对应的处理器。

  • send 方法是从一个PacketDistributor instance实例发送一个数据包给 PacketDistributor.PacketTarget

    • PacketDistributor.PacketTarget 指定服务器向客户端发送数据包的目标。

    • PacketTarget.PLAYER 向指定的玩家发送。使用with来提供一个玩家的实例,

    在Tutorialmod类中注册ModMessage


创建一个数据包

创建如下的目录和类

加入如下的代码

这是一个数据包,由客户端向服务器发送的数据包,其中handle是当服务器接受到该包时候的回调方法。

  • ExampleC2SPacket(FriendlyByteBuf buf)方法是用于从缓冲区中读取数据初始化数据包片段

  • toBytes(FriendlyByteBuf buf)将数据包写入缓冲区中

  • handle用于接受到的数据包,并执行逻辑,在发送者的位置生成一只牛

注册Example包

在ModMessage类中加入如下代码

  • messageBuilder构建一个消息,该构建用于创建对象进行网路传输。

  • 参数接受三个参数,第一个数据包类,消息ID,消息方向,这里说明了消息是发送给server

  • 返回消息构建器。

  • decoder是字节流转为对象,反序列化

  • encoder是对象转为字节流,序列化

  • consumerMainThread是回调处理

  • add添加。

发送数据包

修改之前的绑定按键O的触发。将数据包从客户端发送给服务器。

测试O键发包

测试按o之前

测试按o之后

创建喝水的数据包

创建该类 DrinkWaterC2SPacket

写入如下的代码

  • MESSAGE_DRINK_WATER = "message.tutorialmod.drink_water";在之前的发送消息我们使用的是Component类的iternal方法,这个方法会直接将参数的消息发送。但是这样在代码中的语言是不能汉化的。所以这里的translate方法会在语言文件中查找对应的内容,可以在en_us.json中写入对应的文字。这样的话即使友人想翻译为中文时候只需要书写相应的文件就好了。直接卸载代码中的是无法被汉化的、

  • hasWaterAroundThem 方法是判断玩家size周围是否有水源方块。

    • level的getBlockStates方法 是获得一个区域内的所有的方块的状态,接受一个AABB作为参数,返回blockstate的数组。

    • 其中的player.getBounding()是serverplayer的一个方法,获得AABB的一个对象,这个对象描述了玩家所在的空间,inflate是扩在size格子,意思在玩家的空间在向外扩张2格,

    • filter是数组的方法,筛选出是水方块的方块,然后转为数组,判断该数组是否长度大于0。如果大于0就说明周围具有水方块,否则就是没有水方块。

  • serverlevel的playSound方法,第一个参数是 player,第二个参数是位置,第三个参数是播放什么类型的声音,第四个是声音类别和选项,第五个是音量,第六个是音调,

加入语言文件

注册数据包DrinkWaterC2SPacket

修改按键绑定的事件

发送数据包

测试

附近没水源

有水源时候,有提示,并且有喝水的声音。


我的世界Minecraft 1.19 Mod开发教程分享-14-网络的评论 (共 条)

分享到微博请遵守国家法律