常见问题
服务端指令和客户端指令的区别
- 服务端指令是指由服务端注册的指令,可以被服务端自己以及其它处于同一服务端的玩家执行。
- 客户端指令完全由客户端自行处理,只能由客户端自身执行,其它玩家和服务端不知道客户端指令的存在。
当LeviLamina运行在Bedrock Dedicated Server(下文简称BDS)上时,模组只可注册服务端指令。
当Minecraft处于本地世界时,本质上就是在Minecraft内部运行了一个BDS,这时既可以注册服务端指令也可以注册客户端指令。
当Minecraft处于多人游戏中时,只能模组只能注册客户端指令。
可以通过
| C++ | |
|---|---|
1 2 | |
在Mod的enable()方法中注册指令,服务端(BDS)成功客户端失败
因为服务端(BDS)和客户端启用所有模组的时机是有区别的。
- 服务端会在服务器初始化完成(世界已经加载完成)时启用所有模组
- 客户端会在游戏启动完成(主界面窗口出现)时启用所有模组
所以在客户端上,在enable()方法中注册指令不会成功,无论是客户端指令还是服务端指令,
解决方案就是监听ServerCommandRegisterEvent然后再注册服务端指令,监听ClientCommandRegisterEvent然后再注册客户端指令。
模组调用MCAPI(比如Player::disconnect())时,出现ACCESS VIOLATION异常
请检查调用MCAPI的代码是否运行在MC_SERVER线程上,绝大多数服务端侧的MCAPI只能在MC_SERVER线程中调用,这是Minecraft的游戏设计限制。