无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

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

【我的世界1.19.4mod開發(fā)】解決重生后Capability無法同步到重生玩家實(shí)體的問題

2023-08-15 20:12 作者:尤爾沃克不會(huì)解方程  | 我要投稿

感謝大佬@Flandre芙蘭在Kook頻道里愿意抽出時(shí)間協(xié)助我這個(gè)小萌新解決問題(鞠躬.jpg)

一、背景描述

我在我的MOD中為玩家添加了一個(gè)經(jīng)驗(yàn)等級(jí)系統(tǒng)(Player Level Capability),玩家有階段(Elite Level)、玩家等級(jí)(Player Level)、經(jīng)驗(yàn)(Experience)三種屬性。在1.19.4的Minecraft中,玩家死亡重生后,Capability的數(shù)值會(huì)重置為初始值,然而玩家等級(jí)理論上來講是不能隨著玩家死亡而重置的,因此需要監(jiān)聽玩家死亡相關(guān)的事件,將死亡前的Capability同步到重生后的玩家實(shí)體。



二、問題描述

有問題的代碼部分如下:

我在這里監(jiān)聽了玩家實(shí)體克隆事件,從理論上來講,oldPlayerLevel存儲(chǔ)著玩家死亡前的Capability信息,使用newPlayerLevel存儲(chǔ)著玩家重生后的Capability信息,我使用如下代碼對(duì)死亡前后的Capability進(jìn)行同步:

然而同步失敗了,我用/kill指令殺死玩家后重生,結(jié)果沒有輸出“old: 死亡前的經(jīng)驗(yàn)值 new: 死亡后的經(jīng)驗(yàn)值”的信息,這說明oldPlayerLevel.ifPresent(Lambda表達(dá)式)沒有按住預(yù)期那樣執(zhí)行Lambda表達(dá)式,這也意味著oldPlayerLevel.isPrensent()返回值為false。



三、問題解決

我嘗試了很多辦法,試圖讓oldPlayerLevel.isPrensent()返回值為true,但是都失敗了,于是我換了一種思路解決問題。

我設(shè)置了一個(gè)靜態(tài)全局變量cachePlayerLevel用于緩存玩家的Capability信息,這個(gè)全局變量在玩家進(jìn)入游戲的時(shí)候緩存玩家的Capability(其實(shí)可以用“指向”,因?yàn)槲抑苯影淹婕业腃apability賦值給了這個(gè)全局變量),在玩家死亡重生后將重生后Capability的值更新為全局變量緩存的值,然后讓全局變量緩存重生后玩家的Capability的值。

修改后的代碼如下(也可以不這么寫,僅供參考):

這個(gè)全局變量定義在PlayerLevel(也就是定義這個(gè)Capability的類)中

接著,監(jiān)聽玩家進(jìn)入游戲的事件:

然后把出問題的部分(哪里出問題已經(jīng)寫在上面代碼的注釋中了)修改為:

進(jìn)入游戲后,一切按照計(jì)劃運(yùn)行,大功告成!

如果這篇文章幫到了你,麻煩長按點(diǎn)贊給一個(gè)免費(fèi)的三連吧


【我的世界1.19.4mod開發(fā)】解決重生后Capability無法同步到重生玩家實(shí)體的問題的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
通州市| 蓝山县| 安仁县| 隆昌县| 朔州市| 饶平县| 仙居县| 诸暨市| 外汇| 盈江县| 仪陇县| 望江县| 屯门区| 兴文县| 甘洛县| 新沂市| 山阳县| 古田县| 凉城县| 遂宁市| 大港区| 开阳县| 定西市| 社旗县| 定兴县| 山东省| 富裕县| 荃湾区| 莎车县| 靖州| 永平县| 滨海县| 南川市| 平塘县| 西华县| 江山市| 石屏县| 宝坻区| 张家口市| 富宁县| 瓦房店市|