多開
每個遊戲實例有自己的控制管道,所以一臺測試機可以同時跑好幾個遊戲。克隆一個實例只要幾秒鐘、約 90 MB。
pwsh -NoProfile -File clone-instance.ps1 -Slot 2 # versions\1.26.51.01-hi2,约 90 MB,几秒钟
& .\Start-BeDDGame.ps1 -Instance 1.26.51.01-hi2 # 启动时不把窗口提到前面
Connect-BeDD -PipeName BeDD-1.26.51.01-hi2 # 该实例配置里的 pipeName克隆不存在時,Start-BeDDGame.ps1 -Slot 2(或 -Instance <基础实例>-hi2)會自己先克隆出來。不給 -Instance 時,
它啟動 Be.D.D. 找到的基礎實例,-Slot 2 及以上則啟動它的克隆。clone-instance.ps1 只接受 1 到 32 號槽位;更大的槽位用
BeDDSetup.psm1 的 New-BeDDClone -Source <基础实例> -Slot 41。基礎實例有變化時,已有的克隆會同步更新。
並行測試的規矩
克隆出來的實例有自己的 mods\、日誌、存檔和設置。幾條規矩,免得並行的測試互相打架:
- 每個實例用自己的鎖文件;按實例目錄找自己的遊戲進程,別隻看進程名
Minecraft.Windows(不然會關掉別人的遊戲)。 - 一定以
Minecraft.Windows.exe這個文件名啟動(Start-BeDDGame.ps1就是這樣做的):換個名字,遊戲會改用你平時玩的 Minecraft 數據,而不是這個實例的。 - 測試存檔用
Set-WorldSinglePlayer <存档目录>(框架墊片裡提供)設成單人:同一臺電腦上的遊戲共用一個聯機登錄, 多個多人存檔同時打開會報"發生錯誤"(代碼 "Blaze")。 - 需要在線加入服務器的測試,在
Start-Game之前設$script:ExclusiveSignaling = $true,等其他遊戲關掉後獨佔整臺電腦。
啟動遊戲
Start-BeDDGame.ps1 直接運行 versions\<实例>\Minecraft.Windows.exe,遊戲從不搶前臺(不需要 LeviLauncher:
exe 自己加載 LeviLamina)。它返回遊戲進程。實例的 mods\BeDD 裡必須有模塊(Install-BeDDMod),
管理窗口也必須能啟動,否則它拋出異常。
| 參數 | |
|---|---|
-Instance <名字> | 要啟動的實例(默認:Be.D.D. 找到的那個) |
-Slot N | 改為啟動它的克隆 <基础实例>-hi<N> |
-VersionsDir <目录> | LeviLauncher 的 versions 目錄 |
-Label <文字> | 遊戲在管理窗口裡的名字(默認:調用腳本所在的項目和 worktree) |
管理窗口
本次登錄後第一次運行 Start-BeDDGame.ps1 時會打開管理窗口,之後的運行(不管來自哪個終端、測試框架或 agent)都複用它。
每個遊戲都以實時畫面顯示在裡面,也只顯示在裡面:遊戲自己的窗口留在屏幕外,任務欄上沒有按鈕,Alt+Tab 裡也沒有,
多個測試同時啟動、關閉遊戲時桌面上不會有窗口彈出又消失。它也從不搶焦點。

- 每個遊戲標註啟動它的腳本所在的項目(和 worktree)、實例名、pid,以及是否正在收到輸入。
Start-BeDDGame.ps1 -Label可以自己起名。 - 關掉管理窗口會關掉裡面所有的遊戲(會先確認)。管理窗口被強制結束時遊戲也會一起退出,不會在後臺留下游戲。
- 雙擊某個遊戲只看它一個。右鍵可以打開它的
latest.log或實例目錄,或者關掉它。 - 腳本里:
BeDDManager.ps1 -List列出遊戲,-Game <pid> -Action close關掉一個遊戲,-Shutdown不經確認關掉管理窗口和所有遊戲。
需要 PowerShell 7(pwsh)。遊戲從不脫離管理窗口運行:找不到管理窗口的遊戲會自己啟動一個(配置 managerScript);
90 秒內沒有管理窗口連上、或者徹底失去管理窗口的遊戲會自行關閉(原因寫在它的 latest.log 裡)。