LiteLDev / LegacyScriptEngine

A plugin engine for running LLSE plugins on LeviLamina
GNU General Public License v3.0
48 stars 8 forks source link

[Bug]: 通过 mc.getOnlinePlayers() 获取所有在线玩家时报错 #39

Closed TRDSCSH closed 8 months ago

TRDSCSH commented 8 months ago

Describe the bug

只要在代码中使用 getOnlinePlayers() 则报错。

具体报错内容如下

06:21:11.969 ERROR [legacy-script-engine-quickjs] Fail in GetOnlinePlayers!
06:21:11.981 ERROR [legacy-script-engine-quickjs] C++ Exception: std::runtime_error, from <legacy-script-engine-quickjs>:
06:21:11.981 ERROR [legacy-script-engine-quickjs] bad optional_ref access
06:21:11.981 ERROR [legacy-script-engine-quickjs]
06:21:11.981 ERROR [legacy-script-engine-quickjs] In API: McClass::getOnlinePlayers
06:21:11.981 ERROR [legacy-script-engine-quickjs] In Plugin: getOnlinePlayersTest

To Reproduce

新建一个 Javascript 插件,其内容为:

let onlinePlayers = mc.getOnlinePlayers();

然后运行服务端即可复现报错。

Expected behavior

使用 mc.getOnlinePlayers() 时不出现报错,并且可以正常获取所有在线玩家。

Screenshots

No response

Platform

Windows Server 2022 Datacenter

BDS Version

1.20.62.02

LeviLamina Version

0.8.3

LegacyScriptEngine Version

0.3.1

Additional context

No response

ShrBox commented 8 months ago

不要在服务器未完全启动前调用任何MC相关的API

TRDSCSH commented 8 months ago

不要在服务器未完全启动前调用任何MC相关的API

需要注意的是,在 LiteLoaderBDS 中,仅在插件中写 let onlinePlayers = mc.getOnlinePlayers(); 这一行代码是不会报错的。 我注意到了这个差异,所以留言告知一下。

ShrBox commented 8 months ago

不要在服务器未完全启动前调用任何MC相关的API

需要注意的是,在 LiteLoaderBDS 中,仅在插件中写 let onlinePlayers = mc.getOnlinePlayers(); 这一行代码是不会报错的。 我注意到了这个差异,所以留言告知一下。

已经在0.3.2修复