Parse and serialize minecraft packets, plus authentication and encryption.
Find a file
2016-01-23 17:02:07 -08:00
doc Release 0.16.4 2015-12-22 00:07:27 +01:00
examples Switch on packet type through an anonymous container 2016-01-23 17:02:07 -08:00
src Append \0\FML\0 to hostname in set_protocol packet if Forge enabled 2016-01-23 13:04:50 -08:00
test a few small changes to make the code better 2015-11-30 22:19:56 +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 Test on node v4 2016-01-12 22:16:51 -08:00
gulpfile.js update to babel6 and remove some dependencies 2016-01-20 00:50:04 +01:00
HISTORY.md Release 0.16.6 2016-01-04 20:57:16 +01:00
index.js *facepalm* 2015-02-22 11:27:44 -06:00
package.json use uuid-1345 instead of 3 uuid packages, fix #297 2016-01-22 12:42:04 +01:00
README.md add snapshot version in readme 2016-01-13 22:56:13 +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.8.8 and 1.9 (15w40b)
  • 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.

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