跳到正文
本頁目錄

常見問題

服務端命令和客戶端命令的區別

  • 服務端命令是指由服務端註冊的命令,可以被服務端自己以及其它處於同一服務端的玩家執行。
  • 客戶端命令完全由客戶端自行處理,只能由客戶端自身執行,其它玩家和服務端不知道客戶端命令的存在。

當LeviLamina運行在Bedrock Dedicated Server(下文簡稱BDS)上時,模組只可註冊服務端命令。
當Minecraft處於本地世界時,本質上就是在Minecraft內部運行了一個BDS,這時既可以註冊服務端命令也可以註冊客戶端命令。
當Minecraft處於多人遊戲中時,模組只能註冊客戶端命令。
可以通過

C++
ll::command::CommandRegistrar::getInstance(false); // 服务端
ll::command::CommandRegistrar::getInstance(true); // 客户端

獲取服務端和客戶端的CommandRegistrar來註冊命令。


在模組的enable()方法中註冊命令,服務端(BDS)成功客戶端失敗

因為服務端(BDS)和客戶端啟用所有模組的時機是有區別的。
- 服務端會在服務器初始化完成(世界已經加載完成)時啟用所有模組 - 客戶端會在遊戲啟動完成(主界面窗口出現)時啟用所有模組 所以在客戶端上,在enable()方法中註冊命令不會成功,無論是客戶端命令還是服務端命令,
解決方案就是監聽ServerCommandRegisterEvent然後再註冊服務端命令,監聽ClientCommandRegisterEvent然後再註冊客戶端命令。


模組調用MCAPI(比如Player::disconnect())時,出現ACCESS VIOLATION異常

請檢查調用MCAPI的代碼是否運行在MC_SERVER線程上,絕大多數服務端側的MCAPI只能在MC_SERVER線程中調用,這是Minecraft的遊戲設計限制。