Bedrock differences
bedboo behaves like mineflayer. The only deviations are inherent Java/Bedrock differences: things the Bedrock protocol, data or game rules make impossible or different. Each of them is documented in the topic pages of this section, entry by entry (what mineflayer does on Java, what Bedrock does instead, what bedboo does). Facts were observed on BDS 1.26.51.1 (protocol 2193).
| page | covers |
|---|---|
| Connection and versions | versions, transports, login, spawn, kicks, settings, dimensions |
| Names, ids and data | the Bedrock registry, block states, items on the wire, data sources |
| World and blocks | waterlogging, block variants, time, weather, game rules, signs, explosions |
| Player state and survival | respawn, dimension changes, experience, abilities, beds, fishing, books |
| Chat, commands and HUD | chat, commands, titles, boss bars, scoreboards, sounds, particles, teams |
| Entities and players | entity ids, metadata, player list, hurt and death, combat, vehicles |
| Movement and physics | the movement engine, server corrections, looking, sprinting, flight, elytra |
| Inventory and windows | item stack requests, windows, resync, off-hand, creative inventory |
| Crafting and stations | recipes, crafting, furnaces, enchanting, anvils, trading |
| Digging and placing | server-authoritative block breaking, dig speed, placement |
| Ecosystem plugin patches | what each plugin patch changes and why |
| BeDD mode | transport: 'bedd', a real client hosted by Be.D.D. |
In short
What a bot author may notice. Everything not listed behaves like mineflayer on Java.
Connection and versions
- Only BDS 1.26.51.x / 1.26.52.x (protocol 2193):
bot.version'1.26.51',bot.protocolVersion2193 (versions). RakNet by default, NetherNet on request (transports). - No
connectbefore login: it fires when the login packet is sent (client);kickedreasons are Bedrock disconnect messages or reason codes (kick reason). bot.game.serverBrandis'vanilla'(server brand);bot.game.maxPlayersis undefined (max players); ofbot.settingsonly the view distance reaches the server (settings).
Names, ids and data
bot.registryis the Bedrock 1.26.51 registry: Bedrock block, item, entity, effect, biome and enchantment names and ids (grass_block,oak_log,villager_v2, …) (registry). Recipes come from the server (recipes); item tags from pmmp/BedrockData (item tags).block.stateIdis the index intoregistry.blockStates, not the network runtime id (a hash on Bedrock) (state ids).- Entities:
entity.idis the runtime id as a number,entity.uniqueId/entity.runtimeIdare BigInts (entity ids);entity.metadatais keyed by Bedrock metadata names (flags,variant,boundingbox_width, …) (metadata); players have noskinData(skins).
World
- Waterlogged blocks:
blockAt()returns the block, with the water layer inblock.superimposed/block.isWaterlogged(waterlogging). - A burning furnace is a separate block (
lit_furnace);bot.bedrock.blockVariants()finds both (block variants). bot.timecomes from Bedrock's world clocks (world time); game rules are inbot.bedrock.gameRules(game rules).
Chat, commands, HUD
bot.chat('/…')sends a command request; its output arrives asmessageevents, one per line (commands). A player cannot/opitself on BDS (op).bot.tabCompletecompletes from the server's command list, client side (tab complete).- No teams (
bot.teamsstays{}) and no tab-list header/footer (no teams, no header); boss bars only exist for bosses (boss bars).
Movement
- Movement is server-authoritative: the bot sends one
player_auth_inputper tick and the server corrects it; a correction rewinds and replays the inputs since (corrections).look()takes effect in the next input, not gradually (look). - A sneak/sprint change is sent with the next tick: clicks right after
setControlState('sneak')wait for it (controls before clicks). A sprint lasts whileforwardis held (sticky sprint).
Entities and combat
entityHurt(entity)has no source entity (hurt and death, hurt source);entityHandSwapnever fires (hand swap).bot.attack()does not turn the bot (like upstream); Bedrock has no attack cooldown, a hurt mob is invulnerable for 10 ticks (combat).
Inventory and windows
- The inventory is server-authoritative:
clickWindowand everything built on it (equip,transfer,craft, …) are item stack requests, with the same results and errors as on Java (click window). bot.creative.setInventorySlotcan create only items of the server's creative catalogue, no arbitrary NBT (creative). The off-hand takes only off-hand items (off-hand).- Using a shield is sneaking (
activateItemraises it) (item use); windows are reported with Java window types (window types).
Digging and placing
- Block breaking is server-authoritative:
dig()resolves on the server's confirmation; dig times use Bedrock's effect factors (protocol, dig speed). In creative, swords, tridents and maces cannot break blocks (creative weapons). - No block placement from the off-hand (off-hand placing); placing against an interactive block sneaks (sneak placing).
Stations and survival
- Furnaces, enchanting tables, anvils and villagers work through Bedrock requests with mineflayer's window API (furnace, enchanting, anvil, trading); fishing, books, beds and riding as upstream with Bedrock packets (fishing, books, beds, riding).
- Respawn, dimension changes and the End credits follow Bedrock's handshakes with mineflayer's events (respawn, dimension change); creative players cannot die (creative death).