【我的世界1.19.4mod開發(fā)】解決重生后Capability無法同步到重生玩家實(shí)體的問題
感謝大佬@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
然而同步失敗了,我用/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)寫在上面代碼的注釋中了)修改為:

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