API
bedboo 的 API 就是 mineflayer 的 API。 mineflayer 4.39.0
API 參考中記錄的每一個類、屬性、方法和事件都存在,
名稱、參數、返回值、錯誤消息和事件順序均相同;bedboo 的 TypeScript 定義(index.d.ts)就是 mineflayer 的定義,只是替換了協議
客戶端。完整參考請閱讀上游文檔;本頁只列出不同或新增的內容。因基岩版本身不同而產生的行為差異見
基岩版差異。
模塊導出
require('bedboo') 導出的內容與 require('mineflayer') 相同:
| 導出 | 值 |
|---|---|
createBot(options) | 見下文 |
Location、Painting、ScoreBoard、BossBar | mineflayer 的類,未作修改 |
Particle | mineflayer 的類,針對基岩版粒子數據包做了擴展(粒子) |
latestSupportedVersion、oldestSupportedVersion | '1.26.51' |
testedVersions | ['1.26.51'] |
supportFeature(feature, version) | 依據基岩版特性表作答(特性表) |
createBot 選項
createBot(options) 接受 mineflayer 的選項以及 bedrock-protocol 的
ClientOptions(index.d.ts 中 BotOptions
繼承了它們)。在基岩版需要時,默認值有所不同:
| 選項 | 默認值 | |
|---|---|---|
host | '127.0.0.1' | BDS 地址 |
port | 19132 | BDS 的 server-port(RakNet 用 UDP,NetherNet 用 TCP + UDP) |
username | 'Player' | 離線模式:玩家名;microsoft:令牌緩存的鍵(遊戲內名稱為玩家代號 gamertag) |
auth | 'offline' | 'offline'(無 Xbox Live;服務器需設置 online-mode=false)或 'microsoft'(通過 prismarine-auth 登錄 Xbox Live:profilesFolder、onMsaCode、authTitle、flow、deviceType 與 mineflayer 相同)。'mojang' 會拋出錯誤。 |
version | '1.26.51' | false(自動)即 1.26.51;其他任何值都會拋出錯誤:只支持最新的基岩版(版本) |
transport | 'raknet' | 'nethernet' 表示使用 NetherNet(傳輸層);'bedd' 驅動真實客戶端(BeDD) |
nethernet | { signalling: 'http' } | 僅限 NetherNet:signalling('http' = 服務器端口上的 HTTP,'lan' = UDP 7551 發現,'services' = Xbox)、url(信令源,默認 http://host:port)、serverKey(服務器身份密鑰的 'sha256:<hex>' 固定值)、onServerKey(fingerprint, url) → boolean(批准一個未固定的密鑰;默認接受任意密鑰)、networkId、webrtcBackend、signallingConnectTimeout |
bedd | 僅限 transport: 'bedd':pipe、tapPipe、connect、timeoutMs、modules(BeDD 選項) | |
raknetBackend | 'raknet-native' | 'jsp-raknet' 會被 BDS 拒絕(RakNet 協議 10 與 11 不兼容) |
skipPing | true | 關閉局域網可見性的 BDS 不響應 ping |
conLog | null | bedrock-protocol 的控制台日誌(設為 console.log 可查看連接消息) |
viewDistance | 'far' | mineflayer 的名稱或區塊數;以 request_chunk_radius 發送 |
maxCatchupTicks | 4 | 新增: 卡頓之後,機器人一次最多補發多少個錯過的 player_auth_input tick |
respawn、physicsEnabled、plugins、loadInternalPlugins、chat、colorsEnabled、hideErrors、logErrors、defaultChatPatterns、chatLengthLimit、mainHand、client、brand | 與 mineflayer 相同 | client:任意 bedrock-protocol Client(createClient 的返回值);brand 會被忽略(基岩版沒有 brand 通道) |
基岩版擴展:bot.bedrock
基岩版獨有的新增內容都放在 bot.bedrock 下,絕不會作為新的 bot 頂層成員出現,其類型定義在
types/bedrock.d.ts(BedrockExtras)中:
| 成員 | 類型 | |
|---|---|---|
bot.bedrock.gameRules | { [name: string]: boolean | number } | 服務器的遊戲規則,按基岩版名稱索引(doDayLightCycle、keepInventory、randomTickSpeed……),來自 start_game 和 game_rules_changed(遊戲規則) |
bot.bedrock.blockVariants(block) | (block: string | number) => number[] | Java 版建模為“一個方塊 + 狀態”的那些基岩版方塊的 ID。燃燒中的熔爐是 lit_furnace:bot.findBlock({ matching: bot.bedrock.blockVariants('furnace') }) 也能找到它(方塊變體) |
bot.bedrock.resyncInventory() | () => Promise<boolean> | 向服務器請求玩家物品欄(物品欄、盔甲、光標、副手)的服務端副本;應用完成後解析為 true,2 秒內無應答則為 false。機器人發現某個槽位過時時會自動執行此操作(物品欄重新同步) |
bot.bedrock.bedd | { caps, supports(name), observed } | undefined | 僅在 transport: 'bedd'(由 Be.D.D. 託管的真實客戶端)時存在:caps 將每個 BeDD 操作映射為 'present'、'disabled' 或 'absent';supports(name) 表示某個機器人 API('dig'、'craft'……)在這些操作下是否可用。所需操作缺失的物品堆疊或界面層面 API(clickWindow、craft、從快捷欄以外 equip、creative、writeBook、updateSign……)會拋出 / 拒絕 BeddUnsupportedError(code: 'ERR_BEDD_UNSUPPORTED'、feature、missing)(BeDD) |
bot.bedrock.bedd.observed | { yaw: number, pitch: number, tick: number | null } | null | 僅限 transport 'bedd':真實客戶端最近一次發送的 player_auth_input 中的朝向(基岩版角度)和 tick;在第一次之前為 null。bot.entity 跟隨同一回顯(自身狀態) |
內部實現
不屬於 API(可能會變化),但對調試很有用:
bot._client:bedrock-protocol 的Client(on(packetName, …)、queue、write;數據包名稱和字段採用基岩版的, 見協議文檔)。bot._bedrock:各插件共享的基岩版狀態(輸入隊列、生命週期、物品堆疊請求、窗口……)。