【我的世界1.19.4mod开发】解决重生后Capability无法同步到重生玩家实体的问题

2023-08-15 20:17:42 来源:哔哩哔哩

感谢大佬@Flandre芙兰在Kook频道里愿意抽出时间协助我这个小萌新解决问题(鞠躬.jpg)

一、背景描述

我在我的MOD中为玩家添加了一个经验等级系统(Player Level Capability),玩家有阶段(Elite Level)、玩家等级(Player Level)、经验(Experience)三种属性。在的Minecraft中,玩家死亡重生后,Capability的数值会重置为初始值,然而玩家等级理论上来讲是不能随着玩家死亡而重置的,因此需要监听玩家死亡相关的事件,将死亡前的Capability同步到重生后的玩家实体。

二、问题描述

有问题的代码部分如下:


(相关资料图)

我在这里监听了玩家实体克隆事件,从理论上来讲,oldPlayerLevel存储着玩家死亡前的Capability信息,使用newPlayerLevel存储着玩家重生后的Capability信息,我使用如下代码对死亡前后的Capability进行同步:

然而同步失败了,我用/kill指令杀死玩家后重生,结果没有输出“old: 死亡前的经验值 new: 死亡后的经验值”的信息,这说明(Lambda表达式)没有按住预期那样执行Lambda表达式,这也意味着()返回值为false

三、问题解决

我尝试了很多办法,试图让()返回值为true,但是都失败了,于是我换了一种思路解决问题。

我设置了一个静态全局变量cachePlayerLevel用于缓存玩家的Capability信息,这个全局变量在玩家进入游戏的时候缓存玩家的Capability(其实可以用“指向”,因为我直接把玩家的Capability赋值给了这个全局变量),在玩家死亡重生后将重生后Capability的值更新为全局变量缓存的值,然后让全局变量缓存重生后玩家的Capability的值。

修改后的代码如下(也可以不这么写,仅供参考):

这个全局变量定义在PlayerLevel(也就是定义这个Capability的类)中

接着,监听玩家进入游戏的事件:

然后把出问题的部分(哪里出问题已经写在上面代码的注释中了)修改为:

进入游戏后,一切按照计划运行,大功告成!

如果这篇文章帮到了你,麻烦长按点赞给一个免费的三连吧

标签:

Copyright ©  2015-2022 欧洲快报网版权所有  备案号:沪ICP备2022005074号-23   联系邮箱: 58 55 97 3@qq.com