• Stars
    star
    1,206
  • Rank 38,845 (Top 0.8 %)
  • Language
    JavaScript
  • License
    BSD 3-Clause "New...
  • Created almost 12 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Parse and serialize minecraft packets, plus authentication and encryption.

minecraft protocol

NPM version Build Status Discord Gitter Irc

Try it on gitpod

Parse and serialize minecraft packets, plus authentication and encryption.

Features

  • Supports Minecraft PC version 1.7.10, 1.8.8, 1.9 (15w40b, 1.9, 1.9.1-pre2, 1.9.2, 1.9.4), 1.10 (16w20a, 1.10-pre1, 1.10, 1.10.1, 1.10.2), 1.11 (16w35a, 1.11, 1.11.2), 1.12 (17w15a, 17w18b, 1.12-pre4, 1.12, 1.12.1, 1.12.2), and 1.13 (17w50a, 1.13, 1.13.1, 1.13.2-pre1, 1.13.2-pre2, 1.13.2), 1.14 (1.14, 1.14.1, 1.14.3, 1.14.4) , 1.15 (1.15, 1.15.1, 1.15.2) and 1.16 (20w13b, 20w14a, 1.16-rc1, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4), 1.17 (21w07a, 1.17, 1.17.1), 1.18 (1.18, 1.18.1 and 1.18.2), 1.19 (1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4), 1.20 (1.20, 1.20.1)
  • Parses all packets and emits events with packet fields as JavaScript objects.
  • Send a packet by supplying fields as a JavaScript object.
  • Client
    • Authenticating and logging in
    • Encryption
    • Compression
    • Both online and offline mode
    • Respond to keep-alive packets.
    • Ping a server for status
  • Server
    • Online/Offline mode
    • Encryption
    • Compression
    • Handshake
    • Keep-alive checking
    • Ping status
  • Robust test coverage.
  • 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

Third Party Plugins

node-minecraft-protocol is pluggable.

Projects Using node-minecraft-protocol

  • mineflayer - Create minecraft bots with a stable, high level API.
  • mcserve - Runs and monitors your minecraft server, provides real-time web interface, allow your users to create bots.
  • flying-squid - Create minecraft servers with a high level API, also a minecraft server by itself.
  • pakkit - A GUI tool to monitor Minecraft packets in real time, allowing you to view their data and interactively edit and resend them.
  • minecraft-packet-debugger - A tool to capture Minecraft packets in a buffer then view them in a browser.
  • aresrpg - An open-source mmorpg minecraft server.
  • SteveProxy - Proxy for Minecraft with the ability to change the gameplay using plugins.
  • and several thousands others

Installation

npm install minecraft-protocol

Documentation

Usage

Echo client example

const mc = require('minecraft-protocol');
const client = mc.createClient({
  host: "localhost",   // optional
  port: 25565,         // optional
  username: "[email protected]",
  password: "12345678",
  auth: 'microsoft' // optional; by default uses offline mode, if using a microsoft account, set to 'microsoft'
});

client.on('chat', function(packet) {
  // Listen for chat messages and echo them back.
  const jsonMsg = JSON.parse(packet.message);
  
  if (jsonMsg.translate == 'chat.type.announcement' || jsonMsg.translate == 'chat.type.text') {
    const username = jsonMsg.with[0].text;
    const msg = jsonMsg.with[1];

    if (username === client.username) return;

    client.write('chat', {message: msg.text});
  }
});

If the server is in offline mode, you may leave out the password option and switch auth to offline. You can also leave out password when using a Microsoft account. If provided, password based auth will be attempted first which may fail. Note: if using a Microsoft account, your account age must be >= 18 years old.

Client example joining a Realm

Example to connect to a Realm that the authenticating account is owner of or has been invited to:

const mc = require('minecraft-protocol');
const client = mc.createClient({
  realms: {
    pickRealm: (realms) => realms[0] // Function which recieves an array of joined/owned Realms and must return a single Realm. Can be async
  },
  auth: 'microsoft'
})

Hello World server example

const mc = require('minecraft-protocol');
const server = mc.createServer({
  'online-mode': true,   // optional
  encryption: true,      // optional
  host: '0.0.0.0',       // optional
  port: 25565,           // optional
  version: '1.16.3'
});
const mcData = require('minecraft-data')(server.version)

server.on('login', function(client) {
  const loginPacket = mcData.loginPacket

  client.write('login', {
    entityId: client.id,
    isHardcore: false,
    gameMode: 0,
    previousGameMode: 255,
    worldNames: loginPacket.worldNames,
    dimensionCodec: loginPacket.dimensionCodec,
    dimension: loginPacket.dimension,
    worldName: 'minecraft:overworld',
    hashedSeed: [0, 0],
    maxPlayers: server.maxPlayers,
    viewDistance: 10,
    reducedDebugInfo: false,
    enableRespawnScreen: true,
    isDebug: false,
    isFlat: false
  });

  client.write('position', {
    x: 0,
    y: 255,
    z: 0,
    yaw: 0,
    pitch: 0,
    flags: 0x00
  });

  const msg = {
    translate: 'chat.type.announcement',
    "with": [
      'Server',
      'Hello, world!'
    ]
  };
  
  client.write("chat", { message: JSON.stringify(msg), position: 0, sender: '0' });
});

Testing

  • Ensure your system has the java executable in PATH.
  • MC_SERVER_JAR_DIR=some/path/to/store/minecraft/server/ [email protected] MC_PASSWORD=password npm test

Debugging

You can enable some protocol debugging output using DEBUG environment variable:

DEBUG="minecraft-protocol" node [...]

On Windows:

set DEBUG=minecraft-protocol
node your_script.js

Contribute

Please read https://github.com/PrismarineJS/prismarine-contribute

History

See history

Related

  • node-rcon can be used to access the rcon server in the minecraft server
  • map-colors can be used to convert any image into a buffer of minecraft compatible colors

More Repositories

1

mineflayer

Create Minecraft bots with a powerful, stable, and high level JavaScript API.
JavaScript
4,956
star
2

minecraft-data

Language independent module providing minecraft data for minecraft clients, servers and libraries.
JavaScript
657
star
3

flying-squid

Create Minecraft servers with a powerful, stable, and high level JavaScript API.
JavaScript
531
star
4

prismarine-web-client

Minecraft web client running in your browser
JavaScript
437
star
5

bedrock-protocol

Minecraft Bedrock protocol library, with authentication and encryption
JavaScript
311
star
6

prismarine-viewer

Web based viewer for servers and bots
JavaScript
248
star
7

mineflayer-pathfinder

Pathfinding plugin that gives bot the ability to go from A to B
JavaScript
213
star
8

mineflayer-statemachine

A state machine plugin for Mineflayer to aid in designing more complex behavior trees.
TypeScript
108
star
9

node-minecraft-data

Provide easy access to minecraft-data in node.js
JavaScript
100
star
10

prismarine-nbt

An NBT parser for node-minecraft-protocol
JavaScript
93
star
11

prismarine-chunk

A class to hold chunk data for Minecraft
JavaScript
61
star
12

mineflayer-navigate

mineflayer plugin which gives bots a high level 3d navigating API using A*
JavaScript
59
star
13

minecraft-assets

Provide minecraft assets along with json files that help to use them.
59
star
14

node-minecraft-protocol-forge

Plugin to add FML/Forge client support (including auto-versioning) to node-minecraft-protocol
JavaScript
52
star
15

mineflayer-pvp

Adds support for basic PVP and PVE to Mineflayer bots.
TypeScript
50
star
16

prismarine-auth

Microsoft/Xbox Live authentication
JavaScript
48
star
17

node-vec3

3d vector math with robust unit tests
JavaScript
42
star
18

node-yggdrasil

Node.js library to interact with Mojang's authentication system, known as Yggdrasil
JavaScript
40
star
19

prismarine-windows

Represent minecraft windows
JavaScript
37
star
20

mineflayer-radar

(unmaintained) A plugin to give you a web-based radar interface to your mineflayer bot.
JavaScript
36
star
21

mineflayer-collectblock

A simple utility plugin for Mineflayer that add a higher level API for collecting blocks.
TypeScript
36
star
22

prismarine-physics

Provide the physics engine for minecraft entities
JavaScript
35
star
23

prismarine-world

The core implementation of worlds for prismarine
JavaScript
34
star
24

prismarine-chat

A parser for a minecraft chat message
JavaScript
33
star
25

numerous-alpaca

A Minecraft Bedrock Edition server in JavaScript
JavaScript
29
star
26

prismarine-block

Represent a minecraft block with its associated data
JavaScript
29
star
27

prismarine-server

NodeJS Game Server compatible with Minecraft Client
JavaScript
26
star
28

mineflayer-scaffold

mineflayer plugin to build or break blocks to get to a certain point
JavaScript
26
star
29

prismarine-proxy

Provide features to build proxies using Prismarine modules
JavaScript
25
star
30

dazed-sheep

A Minecraft Classic server in JavaScript
JavaScript
24
star
31

MineflayerArmorManager

TypeScript
24
star
32

node-minecraft-wrap

Download and wrap the vanilla minecraft server and client in node.js
JavaScript
24
star
33

prismarine-entity

Represent a minecraft entity
JavaScript
23
star
34

mineflayer-builder

JavaScript
22
star
35

prismarine-schematic

Read and write schematic of any minecraft version, provide them in a convenient and stable API
JavaScript
21
star
36

mineflayer-tool

A tool/weapon selection Mineflayer plugin for automatically selecting the best tool to use for a specific task.
TypeScript
20
star
37

prismarine-item

Represent a minecraft item with its associated data
JavaScript
19
star
38

node-minecraft-assets

Provide minecraft assets in node.js
JavaScript
17
star
39

node-mojangson

A mojangson parser written in node.js
JavaScript
16
star
40

bedrock-provider

Minecraft bedrock level provider for disk and network with caching support
TypeScript
14
star
41

prismarine-contribute

What is PrismarineJS and how to contribute
13
star
42

prismarine-provider-anvil

Anvil Storage Provider implementation.
JavaScript
13
star
43

prismarine-gameplay

A high level gameplay API for making Mineflayer bots.
TypeScript
12
star
44

prismarinejs.github.io

https://prismarinejs.github.io
JavaScript
11
star
45

minecraft-packets

Stores minecraft packets to test implementation of the minecraft protocol
11
star
46

prismarine-realms

Library for interacting with Minecraft Realms
JavaScript
11
star
47

minecraft-wiki-extractor

Extract structured data from the minecraft wiki
JavaScript
10
star
48

prismarine-recipe

Represent minecraft recipes
JavaScript
10
star
49

minecraft-inventory-gui

Render minecraft inventory GUIs in the browser and (soon) headless
JavaScript
10
star
50

diamond-square

A diamond square minecraft generation
JavaScript
9
star
51

minecraft-chunk-dumper

Dumps chunks for any minecraft version
JavaScript
9
star
52

minecraft-classic-protocol

[En][de]code Minecraft 0.30c packets
JavaScript
8
star
53

minecraft-jar-extractor

Extract structured data from the minecraft jar
JavaScript
8
star
54

prismarine-template

A template repository to make it easy to create new prismarine repo
JavaScript
7
star
55

minecraft-data-generator-server

Java
7
star
56

speedrun-challenge-ssgp

JavaScript
7
star
57

mineflayer-cmd

A command handler plugin for Mineflayer.
TypeScript
6
star
58

prismarine-registry

JavaScript
6
star
59

prismarine-biome

Represent a minecraft biome with its associated data
JavaScript
5
star
60

flying-squid-modpe

Flying squid modpe api
JavaScript
4
star
61

mineflayer-test-api

An automated testing library for Mineflayer and Mineflayer plugins with CI/CD.
JavaScript
4
star
62

minecraft-classic-protocol-extension

A plugin for minecraft-classic-protocol that adds experimental and bleeding-edge CPE features
JavaScript
4
star
63

auto-sheep

Automatically update and start dazed-sheep without a githook!
Shell
4
star
64

McDataExtracting

Extract block collision shapes to JSON using Fabric mod loader
Java
4
star
65

node-minecraft-packets

Access minecraft packets examples in node
JavaScript
4
star
66

prismarine-yggdrasil

An implementation of Minecraft's yggdrasil login API
JavaScript
3
star
67

prismarine-rng

JavaScript
3
star
68

gdmc-challenge-2021

The PrismarineJS entry for the 2021 Generative in Design Minecraft Competition.
JavaScript
3
star
69

auto-alpaca

Automatically update and start numerous-alpaca without a githook!
Shell
3
star
70

mineflayer-gptj

JavaScript
3
star
71

prismarine-packet-dumper

Dump minecraft packets
JavaScript
3
star
72

prismarine-updates

Summary of work being done in PrismarineJS modules and user modules, useful for communication
3
star
73

mcdevs-wiki-extractor

Extract structured data from the mcdevs wiki
JavaScript
3
star
74

prismarine-world-sync

A sync proxy to prismarine-world
JavaScript
3
star
75

burger-extractor

Convert burger to minecraft-data
JavaScript
3
star
76

minecraft-assets-pixel-perfection

Assets for the Pixel Perfection pack
GLSL
2
star
77

entity-model-extractor

JavaScript
2
star
78

prismarine-design

Discuss about design and big refactoring that can affects many modules
2
star
79

minecraft-data-auto-updater

Automatically run minecraft data extractors and create pull request for minecraft-data
2
star
80

marketing-and-media

Media/Marketing Materials
1
star
81

prismarine-provider-raw

Raw (prismarine-chunk based) Storage Provider implementation.
JavaScript
1
star
82

prismarine-meta

Make it easy to do chores and maintenance work using the meta package
JavaScript
1
star
83

prismarine-repo-actions

Github Action implementing issue/PR comment commands for repo automation
JavaScript
1
star