感谢大佬@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