跳到正文
本頁目錄

基岩版差異

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() 在服務器確認後完成;挖掘時間使用基岩版的狀態效果係數(協議、 挖掘速度)。在創造模式下,劍、三叉戟和重錘無法破壞方塊(創造模式武器)。
  • 不能從副手放置方塊(副手放置);對著可交互方塊放置時會潛行 (潛行放置)。

工作站與生存

  • 熔爐、附魔臺、鐵砧和村民通過基岩版請求實現,使用 mineflayer 的窗口 API(熔爐、 附魔、鐵砧、交易);釣魚、書、床和騎乘與上游相同, 只是使用基岩版數據包(釣魚、書、床、 騎乘)。
  • 重生、維度切換和末地製作人員名單遵循基岩版的握手流程,並觸發 mineflayer 的事件(重生、 維度切換);創造模式玩家不會死亡(創造模式死亡)。