驅動遊戲
PowerShell 模塊 BeDD.psm1 就放在模塊旁邊,通過遊戲的控制管道與它通信(默認 \\.\pipe\BeDD,配置裡可以另起名字):
Import-Module .\mods\BeDD\BeDD.psm1
Connect-BeDD # 等游戏启动好
Send-BeDDKey E # 打开背包
Send-BeDDMouse click -RX 0.5 -RY 0.474 # 按窗口比例位置点击
Send-BeDDKey T; Send-BeDDText '/give @s apple 3'; Send-BeDDKey ENTER
Save-BeDDScreenshot C:\temp\shot.png # 窗口被挡住也能截每個輸入調用都等遊戲線程處理完輸入才返回(或拋出異常)。這些調用都不會移動真實光標、按下真實按鍵或改變前臺窗口。

命令
| 命令 | 作用 |
|---|---|
Connect-BeDD [-PipeName p] | 等遊戲就緒,並選定之後的調用發給哪個遊戲 |
Send-BeDDKey E | 按一下鍵;-Action down/up 按住或鬆開,-Vk 0x10 指定任意虛擬鍵碼 |
Send-BeDDText '...' | 輸入文字(不產生按鍵,所以 t 不會打開聊天欄);-DelayMs 設定每個字的間隔 |
Send-BeDDMouse click -RX 0.5 -RY 0.5 | move、down、up、click、wheel,位置用 -X -Y 像素或 -RX -RY 比例;-Button right 右鍵 |
Send-BeDDRaw move -Dx 200 | 在世界裡轉視角;click -Button right 使用物品 |
Clear-BeDDInput | 鬆開所有還按著的鍵和鼠標按鈕 |
Save-BeDDScreenshot path.png / Get-BeDDBitmap | 遊戲畫面,被擋住也照樣截 |
Set-BeDDWindow 1600 900 | 調整遊戲窗口大小,不會把它提到前面 |
Get-BeDDState | 遊戲是否在線、收到了多少輸入、是否搶過前臺 |
Get-BeDDWorld | 是否在世界中、當前界面、鼠標是否鎖定、是否打開菜單、玩家位置與朝向(gameHooks) |
Set-BeDDLook 90 -30 | 把玩家轉到指定的偏航角和俯仰角(度,gameHooks) |
Set-BeDDInput -Z 1 -Sprint -TtlMs 2000 | 通過遊戲自己的輸入系統讓玩家行走、跳躍、潛行或疾跑一段時間,與按鍵綁定無關(gameHooks) |
Set-BeDDSlot 3 / Invoke-BeDDAction inventory | 選擇快捷欄格子;丟棄、全部丟棄、打開背包、切換視角、暫停(gameHooks) |
Set-BeDDButton attack -Action down -ReleaseOnBlockChange | 按遊戲刻或直到目標方塊破壞為止按住攻擊/使用/選取,不阻塞管道(gameHooks) |
Send-BeDDPacket -Base64 ... | 讓玩家發送腳本序列化好的聊天或命令數據包(allowSend) |
Send-BeDDStack -Buffer ... / -View | 讓玩家發送腳本序列化好的物品堆請求;-View 顯示客戶端看到的背包(allowStack) |
標著 gameHooks、allowSend 或 allowStack 的命令需要打開對應的配置項;它們是為
bedboo 的 bedd 傳輸準備的。Invoke-BeDD @{ op = '...' } 可以原樣發送
控制管道協議裡的任意請求。
按鍵名
字母、數字、ESC、ENTER、BACK、TAB、SPACE、SHIFT、CTRL、ALT、方向鍵(LEFT、UP、RIGHT、DOWN)、
HOME、END、PGUP、PGDN、INSERT、DELETE、F1..F24、SLASH、GRAVE、MINUS、EQUALS。其他鍵用 -Vk
傳虛擬鍵碼。
位置
Send-BeDDMouse 的座標在遊戲窗口客戶區內:-X -Y 是像素,-RX -RY 是寬高的比例。固定好窗口大小(配置
clientWidth/clientHeight,或 Set-BeDDWindow),每次運行點擊位置才一樣。
鼠標按鈕和滾輪發給一個虛擬鼠標,遊戲讀它而不讀你的鼠標。Send-BeDDRaw 按原始計數移動這個鼠標,遊戲鎖定鼠標時
(在世界裡、沒打開界面)就是轉視角。
聊天和命令

Send-BeDDText 以字符形式輸入文字,不產生按鍵,所以先用 Send-BeDDKey T(或 SLASH)打開聊天欄,再用
Send-BeDDKey ENTER 發送。這樣輸入的命令,遊戲就像玩家親手輸入一樣執行。
截圖
Save-BeDDScreenshot 和 Get-BeDDBitmap 能截到遊戲畫面,儘管遊戲窗口在屏幕外,管理窗口被其他窗口擋住時也一樣。
選哪個遊戲
Connect-BeDD -PipeName <名字> 選定之後的調用發給哪個遊戲;BEDD_PIPE 設定默認值。同時運行多個遊戲時,每個實例要有自己的管道名:
見多開。
其他腳本也可以同時使用同一個遊戲的管道(配置 pipeInstances)。某個腳本斷開或進程退出時,它還按著的鍵和按鈕會被鬆開。