Parse and serialize minecraft packets, plus authentication and encryption.
Find a file
2016-03-21 15:55:01 +01:00
doc index custom packets by version 2016-02-20 17:19:36 +01:00
examples Update proxy.js 2016-03-21 14:40:53 +00:00
src check if e.field is defined when completing serializer/deserializer errors 2016-03-17 11:15:28 +01:00
test fix tests and fix #360 2016-02-23 19:37:47 +01:00
.editorconfig fix the indent_size in .editorconfig 2015-05-14 22:03:43 +02:00
.gitignore Merge branch 'master' of https://github.com/PrismarineJS/node-minecraft-protocol into es6 2015-03-06 22:50:28 -06:00
.jshintrc fix indentation and a few other stuff webstorm felt like fixing (for example if (condition) -> if(condition) since that was the more frequent style in node-minecraft-protocol) 2015-05-14 22:08:49 +02:00
.npmignore Add npmignore 2015-03-23 02:41:49 +00:00
browser.js move createPacketBuffer and parsePacketData functions to serializer, also move protocol's exports to serializer 2015-05-23 03:31:47 +02:00
circle.yml enabling the debug on circle ci is not a good idea 2016-02-23 19:53:29 +01:00
gulpfile.js update to babel6 and remove some dependencies 2016-01-20 00:50:04 +01:00
HISTORY.md Release 0.19.5 2016-03-17 11:17:41 +01:00
index.js *facepalm* 2015-02-22 11:27:44 -06:00
package.json have some caret, fix #389 2016-03-20 01:34:25 +01:00
README.md update mcdata for 1.9.1-pre2 2016-03-10 21:26:55 +01:00

minecraft protocol

NPM version Build Status Join the chat at https://gitter.im/PrismarineJS/node-minecraft-protocol

Parse and serialize minecraft packets, plus authentication and encryption.

Features

  • Supports Minecraft version 1.7.10, 1.8.8 and 1.9 (15w40b, 1.9 and 1.9.1-pre2)
  • 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.

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.

Usage

Echo client example

var mc = require('minecraft-protocol');
var client = mc.createClient({
  host: "localhost",   // optional
  port: 25565,         // optional
  username: "email@example.com",
  password: "12345678",
});
client.on('chat', function(packet) {
  // Listen for chat messages and echo them back.
  var jsonMsg = JSON.parse(packet.message);
  if(jsonMsg.translate == 'chat.type.announcement' || jsonMsg.translate == 'chat.type.text') {
    var username = jsonMsg.with[0].text;
    var msg = jsonMsg.with[1];
    if(username === client.username) return;
    client.write('chat', {message: msg});
  }
});

If the server is in offline mode, you may leave out the password option.

Hello World server example

var mc = require('minecraft-protocol');
var server = mc.createServer({
  'online-mode': true,   // optional
  encryption: true,      // optional
  host: '0.0.0.0',       // optional
  port: 25565,           // optional
});
server.on('login', function(client) {
  client.write('login', {
    entityId: client.id,
    levelType: 'default',
    gameMode: 0,
    dimension: 0,
    difficulty: 2,
    maxPlayers: server.maxPlayers,
    reducedDebugInfo: false
  });
  client.write('position', {
    x: 0,
    y: 1.62,
    z: 0,
    yaw: 0,
    pitch: 0,
    flags: 0x00
  });
  var msg = {
    translate: 'chat.type.announcement',
    "with": [
      'Server',
      'Hello, world!'
    ]
  };
  client.write("chat", { message: JSON.stringify(msg), position: 0 });
});

Installation

npm install minecraft-protocol

URSA, an optional dependency, should improve login times for servers. However, it can be somewhat complicated to install.

Follow the instructions from Obvious/ursa

Documentation

See doc

Testing

  • Ensure your system has the java executable in PATH.
  • MC_SERVER_JAR_DIR=some/path/to/store/minecraft/server/ MC_USERNAME=email@example.com MC_PASSWORD=password npm test

Debugging

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

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

History

See history