基岩版差异
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()在服务器确认后完成;挖掘时间使用基岩版的状态效果系数(协议、 挖掘速度)。在创造模式下,剑、三叉戟和重锤无法破坏方块(创造模式武器)。 - 不能从副手放置方块(副手放置);对着可交互方块放置时会潜行 (潜行放置)。
工作站与生存