bedrock-protocol
Minecraft Bedrock Edition (aka MCPE) protocol library, supporting authentication and encryption. Help contribute.
Protocol doc
Features
- Supports Minecraft Bedrock version 1.16.201, 1.16.210, 1.16.220, 1.17.0, 1.17.10, 1.17.30, 1.17.40, 1.18.0, 1.18.11, 1.18.30, 1.19.1, 1.19.10, 1.19.20, 1.19.21, 1.19.30, 1.19.40, 1.19.41, 1.19.50, 1.19.60, 1.19.62, 1.19.63, 1.19.70, 1.19.80
- Parse and serialize packets as JavaScript objects
- Automatically respond to keep-alive packets
- Proxy and mitm connections
- Client
- Server
- Autheticate clients with Xbox Live
- Ping status
- Robust test coverage.
- Easily extend with many other PrismarineJS projects, world providers, and more
- Optimized for rapidly staying up to date with Minecraft protocol updates.
Want to contribute on something important for PrismarineJS ? go to https://github.com/PrismarineJS/mineflayer/wiki/Big-Prismarine-projects
Installation
npm install bedrock-protocol
Usage
Client example
Example to connect to a server in offline mode, and relay chat messages back:
const bedrock = require('bedrock-protocol')
const client = bedrock.createClient({
host: 'localhost',
port: 19132,
username: 'Notch',
offline: true
})
client.on('text', (packet) => {
if (packet.source_name != client.username) {
client.queue('text', {
type: 'chat', needs_translation: false, source_name: client.username, xuid: '', platform_chat_id: '',
message: `${packet.source_name} said: ${packet.message} on ${new Date().toLocaleString()}`
})
}
})
Client example joining a Realm
Example to connect to a Realm that the authenticating account is owner of or has been invited to:
const bedrock = require('bedrock-protocol')
const client = bedrock.createClient({
realms: {
pickRealm: (realms) => realms[0]
}
})
Server example
Can't connect locally on Windows? See the faq
const bedrock = require('bedrock-protocol')
const server = bedrock.createServer({
host: '0.0.0.0',
port: 19132,
version: '1.17.10',
})
server.on('connect', client => {
client.on('join', () => {
const d = new Date()
client.disconnect(`Good ${d.getHours() < 12 ? '§emorning§r' : '§3afternoon§r'} :)\n\nMy time is ${d.toLocaleString()} !`)
})
})
Ping example
const { ping } = require('bedrock-protocol')
ping({ host: 'play.cubecraft.net', port: 19132 }).then(res => {
console.log(res)
})
Documentation
For documentation on the protocol, and packets/fields see the protocol documentation.
Testing
npm test
Debugging
You can enable some protocol debugging output using DEBUG
environment variable.
Through node.js, add process.env.DEBUG = 'minecraft-protocol'
at the top of your script.
Contribute
Please read CONTRIBUTING.md and https://github.com/PrismarineJS/prismarine-contribute
History
See history