中娱网

我的世界Minecraft 1.19 Mod开发教程分享-14-网络_最新资讯

2023-06-28 23:55:32 来源:哔哩哔哩

创建类和文件

networking/ModMessage 

输入以下的代码

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


(资料图片仅供参考)

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

NetworkRegistry是网络管理的类

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

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

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

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

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

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

向指定的玩家发送。使用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 = "_water";在之前的发送消息我们使用的是Component类的iternal方法,这个方法会直接将参数的消息发送。但是这样在代码中的语言是不能汉化的。所以这里的translate方法会在语言文件中查找对应的内容,可以在en_中写入对应的文字。这样的话即使友人想翻译为中文时候只需要书写相应的文件就好了。直接卸载代码中的是无法被汉化的、

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

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

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

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

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

加入语言文件

注册数据包DrinkWaterC2SPacket

修改按键绑定的事件

发送数据包

测试

附近没水源

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

标签:

热门推荐