最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

我的世界Minecraft 1.19 Mod開(kāi)發(fā)教程分享-14-網(wǎng)絡(luò)

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


創(chuàng)建類和文件

networking/ModMessage?

輸入以下的代碼


  • SimpleChannel是Minecraft中發(fā)送和接受自定義數(shù)據(jù)包的類,通過(guò)SimpleChannel來(lái)創(chuàng)建一個(gè)網(wǎng)絡(luò)通道,注冊(cè)發(fā)送和接受的數(shù)據(jù)包,這樣就可以在Minecraft的客戶端和服務(wù)器之間進(jìn)行通訊。

  • 其中packetId是包的標(biāo)識(shí),用于網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)包的區(qū)分。自增保證唯一。

  • NetworkRegistry是網(wǎng)絡(luò)管理的類

    • 用于客戶端和服務(wù)器是否接送該版本的消息。

    • ChannelBuilder是構(gòu)建網(wǎng)絡(luò)通道的輔助類,使用ChannelBuilder來(lái)指定網(wǎng)絡(luò)通道的名稱,協(xié)議版本等。

  • ResourceLocation聲明和指定游戲?qū)ο蟮念?,輔助查找特定的字符,從mod id下的assets或者data下查找數(shù)據(jù)。

  • sendToServer方法是SimpleChannel類提供的方法,將一個(gè)數(shù)據(jù)包發(fā)送到服務(wù)器對(duì)應(yīng)的處理器。

  • send 方法是從一個(gè)PacketDistributor instance實(shí)例發(fā)送一個(gè)數(shù)據(jù)包給 PacketDistributor.PacketTarget

    • PacketDistributor.PacketTarget 指定服務(wù)器向客戶端發(fā)送數(shù)據(jù)包的目標(biāo)。

    • PacketTarget.PLAYER 向指定的玩家發(fā)送。使用with來(lái)提供一個(gè)玩家的實(shí)例,

    在Tutorialmod類中注冊(cè)ModMessage


創(chuàng)建一個(gè)數(shù)據(jù)包

創(chuàng)建如下的目錄和類

加入如下的代碼

這是一個(gè)數(shù)據(jù)包,由客戶端向服務(wù)器發(fā)送的數(shù)據(jù)包,其中handle是當(dāng)服務(wù)器接受到該包時(shí)候的回調(diào)方法。

  • ExampleC2SPacket(FriendlyByteBuf buf)方法是用于從緩沖區(qū)中讀取數(shù)據(jù)初始化數(shù)據(jù)包片段

  • toBytes(FriendlyByteBuf buf)將數(shù)據(jù)包寫入緩沖區(qū)中

  • handle用于接受到的數(shù)據(jù)包,并執(zhí)行邏輯,在發(fā)送者的位置生成一只牛

注冊(cè)Example包

在ModMessage類中加入如下代碼

  • messageBuilder構(gòu)建一個(gè)消息,該構(gòu)建用于創(chuàng)建對(duì)象進(jìn)行網(wǎng)路傳輸。

  • 參數(shù)接受三個(gè)參數(shù),第一個(gè)數(shù)據(jù)包類,消息ID,消息方向,這里說(shuō)明了消息是發(fā)送給server

  • 返回消息構(gòu)建器。

  • decoder是字節(jié)流轉(zhuǎn)為對(duì)象,反序列化

  • encoder是對(duì)象轉(zhuǎn)為字節(jié)流,序列化

  • consumerMainThread是回調(diào)處理

  • add添加。

發(fā)送數(shù)據(jù)包

修改之前的綁定按鍵O的觸發(fā)。將數(shù)據(jù)包從客戶端發(fā)送給服務(wù)器。

測(cè)試O鍵發(fā)包

測(cè)試按o之前

測(cè)試按o之后

創(chuàng)建喝水的數(shù)據(jù)包

創(chuàng)建該類 DrinkWaterC2SPacket

寫入如下的代碼

  • MESSAGE_DRINK_WATER = "message.tutorialmod.drink_water";在之前的發(fā)送消息我們使用的是Component類的iternal方法,這個(gè)方法會(huì)直接將參數(shù)的消息發(fā)送。但是這樣在代碼中的語(yǔ)言是不能漢化的。所以這里的translate方法會(huì)在語(yǔ)言文件中查找對(duì)應(yīng)的內(nèi)容,可以在en_us.json中寫入對(duì)應(yīng)的文字。這樣的話即使友人想翻譯為中文時(shí)候只需要書寫相應(yīng)的文件就好了。直接卸載代碼中的是無(wú)法被漢化的、

  • hasWaterAroundThem 方法是判斷玩家size周圍是否有水源方塊。

    • level的getBlockStates方法 是獲得一個(gè)區(qū)域內(nèi)的所有的方塊的狀態(tài),接受一個(gè)AABB作為參數(shù),返回blockstate的數(shù)組。

    • 其中的player.getBounding()是serverplayer的一個(gè)方法,獲得AABB的一個(gè)對(duì)象,這個(gè)對(duì)象描述了玩家所在的空間,inflate是擴(kuò)在size格子,意思在玩家的空間在向外擴(kuò)張2格,

    • filter是數(shù)組的方法,篩選出是水方塊的方塊,然后轉(zhuǎn)為數(shù)組,判斷該數(shù)組是否長(zhǎng)度大于0。如果大于0就說(shuō)明周圍具有水方塊,否則就是沒(méi)有水方塊。

  • serverlevel的playSound方法,第一個(gè)參數(shù)是 player,第二個(gè)參數(shù)是位置,第三個(gè)參數(shù)是播放什么類型的聲音,第四個(gè)是聲音類別和選項(xiàng),第五個(gè)是音量,第六個(gè)是音調(diào),

加入語(yǔ)言文件

注冊(cè)數(shù)據(jù)包DrinkWaterC2SPacket

修改按鍵綁定的事件

發(fā)送數(shù)據(jù)包

測(cè)試

附近沒(méi)水源

有水源時(shí)候,有提示,并且有喝水的聲音。


我的世界Minecraft 1.19 Mod開(kāi)發(fā)教程分享-14-網(wǎng)絡(luò)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
青河县| 都匀市| 克什克腾旗| 甘肃省| 多伦县| 大宁县| 伊春市| 上杭县| 象州县| 吉林省| 唐海县| 山阳县| 双桥区| 十堰市| 泊头市| 喀什市| 行唐县| 安图县| 阳曲县| 泸定县| 新化县| 辽源市| 福鼎市| 高碑店市| 岚皋县| 山阳县| 沂源县| 秦安县| 辽源市| 若尔盖县| 庆城县| 日土县| 余干县| 朝阳县| 乌兰察布市| 调兵山市| 涿鹿县| 虞城县| 时尚| 喀喇沁旗| 抚顺市|