EarthDLL 发表于 2023-6-13 11:25:05

基岩版脚本升级1.20必须避坑

本帖最后由 EarthDLL 于 2023-6-13 12:01 编辑

最近,Minecraft终于出了1.20.0正式版
一般来讲,我们只需要修改把mojang改名的API就行了
但是,在1.20中,貌似...

?doesn't not have required privileges?
之前没遇到这样的错误啊?而且我也没改对应的地方啊!
这个错误直译过来就是“没权限”
什么权限?作弊?我打开了啊?
仔细看了看文档,基本上没有改动,仅仅多了个提示:

This function can't be called in read-only mode.
只能在只读模式下运行?这又是什么意思?

在网上搜,无论是错误信息还是这条提示,都没有结果。
gametest框架的GitHub界面也没有。
最后我把希望寄托于抹酱的bug反馈界面

当我搜到“Entity.kill()”的时候,终于找到答案了!
链接
评论区的大佬指向了一个BedrockDev的教程
(这个网站的gametest页面很久很久很久没更新了,所以我没看)

简单来说,before类型的事件往往要在1tick内完成回调,但是kill()之类的能修改存档的函数需要1tick运行,如果多次修改就会发生报错。
举例:在一个before事件中你修改5次游戏时间,但是由于系统的原理,一个tick只能修改一次,因此需要5tick,但是before事件限制了1tick!

在旧版本,这会导致你的游戏卡住4个tick。所以新版本直接报错,避免卡顿!
也就是所谓的“没权限”

那我们要修改的话,就像上面的图片一样使用system.run来延迟执行!
system.run会等到有空闲tick再执行
(其他事件就不必担心,只有before事件才有这个问题

看着我6000行的代码,欸~

EarthDLL 发表于 2023-6-13 12:02:35

应该放教程区的,但是我觉得大部分开发者也不会看啊[哔哩_笑哭]

11mo 发表于 2023-6-13 16:01:27

你玩mc是为了什么?

STONEHXX 发表于 2024-7-19 17:35:13

谢,终于找到问题了 报错:Unhandled promise rejection: ReferenceError: Native property setter does not have required privileges. 我还以为我自己有问题...

夜雨星璃 发表于 2024-7-24 00:02:15

好哦,谢谢大佬
页: [1]
查看完整版本: 基岩版脚本升级1.20必须避坑