跳到正文
本頁目錄

多開

每個遊戲實例有自己的控制管道,所以一臺測試機可以同時跑好幾個遊戲。克隆一個實例只要幾秒鐘、約 90 MB。

powershell
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 裡)。