跳到正文
本頁目錄

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、BossBarmineflayer 的類,未作修改
Particlemineflayer 的類,針對基岩版粒子數據包做了擴展(粒子)
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 地址
port19132BDS 的 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 不兼容)
skipPingtrue關閉局域網可見性的 BDS 不響應 ping
conLognullbedrock-protocol 的控制台日誌(設為 console.log 可查看連接消息)
viewDistance'far'mineflayer 的名稱或區塊數;以 request_chunk_radius 發送
maxCatchupTicks4新增: 卡頓之後,機器人一次最多補發多少個錯過的 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:各插件共享的基岩版狀態(輸入隊列、生命週期、物品堆疊請求、窗口……)。