Skip to content
On this page

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).

pagecovers
Connection and versionsversions, transports, login, spawn, kicks, settings, dimensions
Names, ids and datathe Bedrock registry, block states, items on the wire, data sources
World and blockswaterlogging, block variants, time, weather, game rules, signs, explosions
Player state and survivalrespawn, dimension changes, experience, abilities, beds, fishing, books
Chat, commands and HUDchat, commands, titles, boss bars, scoreboards, sounds, particles, teams
Entities and playersentity ids, metadata, player list, hurt and death, combat, vehicles
Movement and physicsthe movement engine, server corrections, looking, sprinting, flight, elytra
Inventory and windowsitem stack requests, windows, resync, off-hand, creative inventory
Crafting and stationsrecipes, crafting, furnaces, enchanting, anvils, trading
Digging and placingserver-authoritative block breaking, dig speed, placement
Ecosystem plugin patcheswhat each plugin patch changes and why
BeDD modetransport: '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.protocolVersion 2193 (versions). RakNet by default, NetherNet on request (transports).
  • No connect before login: it fires when the login packet is sent (client); kicked reasons are Bedrock disconnect messages or reason codes (kick reason).
  • bot.game.serverBrand is 'vanilla' (server brand); bot.game.maxPlayers is undefined (max players); of bot.settings only the view distance reaches the server (settings).

Names, ids and data

  • bot.registry is 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.stateId is the index into registry.blockStates, not the network runtime id (a hash on Bedrock) (state ids).
  • Entities: entity.id is the runtime id as a number, entity.uniqueId / entity.runtimeId are BigInts (entity ids); entity.metadata is keyed by Bedrock metadata names (flags, variant, boundingbox_width, …) (metadata); players have no skinData (skins).

World

  • Waterlogged blocks: blockAt() returns the block, with the water layer in block.superimposed / block.isWaterlogged (waterlogging).
  • A burning furnace is a separate block (lit_furnace); bot.bedrock.blockVariants() finds both (block variants).
  • bot.time comes from Bedrock's world clocks (world time); game rules are in bot.bedrock.gameRules (game rules).

Chat, commands, HUD

  • bot.chat('/…') sends a command request; its output arrives as message events, one per line (commands). A player cannot /op itself on BDS (op).
  • bot.tabComplete completes from the server's command list, client side (tab complete).
  • No teams (bot.teams stays {}) 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_input per 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 while forward is held (sticky sprint).

Entities and combat

  • entityHurt(entity) has no source entity (hurt and death, hurt source); entityHandSwap never 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: clickWindow and everything built on it (equip, transfer, craft, …) are item stack requests, with the same results and errors as on Java (click window).
  • bot.creative.setInventorySlot can 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 (activateItem raises 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