diff --git a/README.md b/README.md index 90c2ac2..ecb1e0a 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,39 @@ client.on(0x03, function(packet) { }); ``` +### Hello World server example + +```js +var mc = require('minecraft-protocol'); +var server = mc.createServer({ + 'online-mode': true, // optional + 'encryption': true, // optional +}); +server.on('connection', function(client) { + client.write(0x01, { + entityId: 0, + levelType: 'default', + gameMode: 0, + dimension: 0, + difficulty: 2, + maxPlayers: 32 + }); + client.write(0x0d, { + x: 0, + y: 1.62, + stance: 0, + z: 0, + yaw: 0, + pitch: 0, + onGround: true + }); + client.write(0x03, { message: 'Hello, world!' }); +}); +server.listen(); + console.log('Server listening on port', server.port); +}); +``` + ## Testing * Ensure your system has the `java` executable in `PATH`. diff --git a/examples/server.js b/examples/server.js new file mode 100644 index 0000000..8f4f8c0 --- /dev/null +++ b/examples/server.js @@ -0,0 +1,76 @@ +var mc = require('../'); + +var yellow = '§e'; +var players = []; + +var options = { + requireAuth: false, + motd: 'Vox Industries', + maxPlayers: 128, +}; + +var server = mc.createServer(options); + +server.on('connection', function(client) { + var player = { + client: client, + username: handshake.username, + index: players.length + }; + players.push(player); + server.players = players.length; + + broadcast(yellow + player.username+' joined the game.'); + var addr = client.socket.remoteAddress + ':' + client.socket.remotePort; + console.log(player.username+' connected', '('+addr+')'); + + client.on('end', function() { + players.splice(player.index, 1); + server.players = players.length; + + broadcast(yellow + player.username+' left the game.', player); + console.log(player.username+' disconnected', '('+addr+')'); + }); + + // send init data so client will start rendering world + client.write(0x01, { + entityId: 0, + levelType: 'default', + gameMode: 1, + dimension: 0, + difficulty: 2, + maxPlayers: 128 + }); + client.write(0x0d, { + x: 0, + y: 256, + stance: 255, + z: 0, + yaw: 0, + pitch: 0, + onGround: 1 + }); + + client.on(0x03, function(data) { + var message = '<'+player.username+'>' + ' ' + data.message; + broadcast(message); + console.log(message); + }); + } +); + +server.on('error', function(error) { + console.log('Error:', error); +}); + +server.listen(function() { + console.log('Server listening on port', server.port); +}); + +function broadcast(message, exclude) { + for(var i = 0; i < players.length; i++) { + if(players[i].username !== exclude && i !== exclude && players[i] !== exclude) { + players[i].client.write(0x03, { message: message }); + } + } +} diff --git a/examples/server_helloworld.js b/examples/server_helloworld.js new file mode 100644 index 0000000..e7b1134 --- /dev/null +++ b/examples/server_helloworld.js @@ -0,0 +1,37 @@ +var mc = require('../'); + +var options = { + 'online-mode': false, +}; + +var server = mc.createServer(options); + +server.on('connection', function(client) { + var addr = client.socket.remoteAddress; + console.log('Incoming connection', '('+addr+')'); + + client.on('end', function() { + console.log('Connection closed', '('+addr+')'); + }); + + // send init data so client will start rendering world + client.write(0x0d, { + x: 0, + y: 1.62, + stance: 0, + z: 0, + yaw: 0, + pitch: 0, + onGround: true + }); + + client.write(0x03, { message: 'Hello, world!' }); +}); + +server.on('error', function(error) { + console.log('Error:', error); +}); + +server.listen(function() { + console.log('Server listening on port', server.port); +});