基岩版差異
bedboo 的行為與 mineflayer 一致。唯一的偏差是 Java 版與基岩版之間的固有差異:基岩版的協議、數據或遊戲規則使之無法實現或表現不同 的地方。每一項都在本節的各主題頁中逐條記錄(mineflayer 在 Java 版上怎麼做、基岩版改為怎麼做、bedboo 怎麼做)。所有事實均在 BDS 1.26.51.1(protocol 2193)上觀察得出。
| 頁面 | 涵蓋內容 |
|---|---|
| 連接與版本 | 版本、傳輸層、登錄、生成、踢出、設置、維度 |
| 名稱、id 與數據 | 基岩版註冊表、方塊狀態、線上傳輸的物品、數據來源 |
| 世界與方塊 | 含水、方塊變體、時間、天氣、遊戲規則、告示牌、爆炸 |
| 玩家狀態與生存 | 重生、維度切換、經驗、能力、床、釣魚、書 |
| 聊天、命令與 HUD | 聊天、命令、標題、Boss 欄、計分板、聲音、粒子、隊伍 |
| 實體與玩家 | 實體 ID、元數據、玩家列表、受傷與死亡、戰鬥、載具 |
| 移動與物理 | 移動引擎、服務端糾正、視角、疾跑、飛行、鞘翅 |
| 物品欄與窗口 | 物品堆疊請求、窗口、重新同步、副手、創造模式物品欄 |
| 合成與工作站 | 配方、合成、熔爐、附魔、鐵砧、交易 |
| 挖掘與放置 | 服務端權威的方塊破壞、挖掘速度、放置 |
| 生態插件補丁 | 每個插件補丁改了什麼、為什麼改 |
| BeDD 模式 | transport: 'bedd',由 Be.D.D. 託管的真實客戶端 |
概要
機器人作者可能會注意到的地方。未列出的一切都與 mineflayer 在 Java 版上的行為相同。
連接與版本
- 僅支持 BDS 1.26.51.x / 1.26.52.x(protocol 2193):
bot.version為'1.26.51',bot.protocolVersion為 2193 (版本)。默認 RakNet,按需使用 NetherNet(傳輸層)。 - 登錄之前沒有
connect:它在發送登錄數據包時觸發(客戶端);kicked的原因是基岩版的斷開消息或 原因代碼(踢出原因)。 bot.game.serverBrand為'vanilla'(服務器品牌);bot.game.maxPlayers為 undefined(最大玩家數);bot.settings中只有視距會傳到服務器 (設置)。
名稱、ID 與數據
bot.registry是基岩版 1.26.51 的註冊表:基岩版的方塊、物品、實體、狀態效果、生物群系和附魔的名稱與 ID (grass_block、oak_log、villager_v2……)(註冊表)。配方來自服務器 (配方);物品標籤來自 pmmp/BedrockData(物品標籤)。block.stateId是registry.blockStates中的索引,而不是網絡運行時 ID(在基岩版上是一個哈希值) (狀態 ID)。- 實體:
entity.id是數字形式的運行時 ID,entity.uniqueId/entity.runtimeId是 BigInt (實體 ID);entity.metadata以基岩版元數據名稱為鍵(flags、variant、boundingbox_width……)(元數據);玩家沒有skinData(皮膚)。
世界
- 含水方塊:
blockAt()返回方塊本身,水層放在block.superimposed/block.isWaterlogged中 (含水)。 - 燃燒中的熔爐是一個獨立的方塊(
lit_furnace);bot.bedrock.blockVariants()能同時找到兩者 (方塊變體)。 bot.time來自基岩版的世界時鐘(世界時間);遊戲規則在bot.bedrock.gameRules中 (遊戲規則)。
聊天、命令、HUD
bot.chat('/…')發送命令請求;其輸出以message事件到達,每行一個(命令)。在 BDS 上玩家無法給自己/op(op)。bot.tabComplete在客戶端根據服務器的命令列表補全(Tab 補全)。- 沒有隊伍(
bot.teams始終為{}),也沒有 Tab 列表的頁眉/頁腳(沒有隊伍、 沒有頁眉);Boss 欄只為 Boss 存在(Boss 欄)。
移動
- 移動是服務端權威的:機器人每 tick 發送一個
player_auth_input,由服務器糾正;糾正時會回退並重放此後的輸入 (糾正)。look()在下一次輸入中生效,而不是逐漸轉動(視角)。 - 潛行/疾跑的變化隨下一 tick 發送:緊跟在
setControlState('sneak')之後的點擊會等待它 (點擊前的控制狀態)。只要按住forward,疾跑就會持續 (粘滯疾跑)。
實體與戰鬥
entityHurt(entity)沒有來源實體(受傷與死亡、 傷害來源);entityHandSwap永遠不會觸發(交換手中物品)。bot.attack()不會讓機器人轉向(與上游相同);基岩版沒有攻擊冷卻,受傷的生物有 10 tick 的無敵時間 (戰鬥)。
物品欄與窗口
- 物品欄是服務端權威的:
clickWindow以及基於它的一切(equip、transfer、craft……)都是物品堆疊請求,結果和錯誤與 Java 版相同(點擊窗口)。 bot.creative.setInventorySlot只能創建服務器創造模式物品目錄中的物品,不能使用任意 NBT (創造模式)。副手只能放副手物品(副手)。- 使用盾牌就是潛行(
activateItem會舉起盾牌)(物品使用);窗口以 Java 版的窗口類型報告 (窗口類型)。
挖掘與放置
- 方塊破壞是服務端權威的:
dig()在服務器確認後完成;挖掘時間使用基岩版的狀態效果係數(協議、 挖掘速度)。在創造模式下,劍、三叉戟和重錘無法破壞方塊(創造模式武器)。 - 不能從副手放置方塊(副手放置);對著可交互方塊放置時會潛行 (潛行放置)。
工作站與生存