mirror of
https://github.com/PrismarineJS/node-minecraft-protocol.git
synced 2025-05-16 00:00:39 -04:00
commit
63dea28bab
8 changed files with 32 additions and 12 deletions
|
@ -56,10 +56,12 @@ server.on('listening', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
function broadcast(message, exclude, username) {
|
function broadcast(message, exclude, username) {
|
||||||
var client, translate, username;
|
var client, translate;
|
||||||
translate = username ? 'chat.type.announcement' : 'chat.type.text';
|
translate = username ? 'chat.type.announcement' : 'chat.type.text';
|
||||||
username = username || 'Server';
|
username = username || 'Server';
|
||||||
for (var clientId in server.clients) {
|
for (var clientId in server.clients) {
|
||||||
|
if (!server.clients.hasOwnProperty(clientId)) continue;
|
||||||
|
|
||||||
client = server.clients[clientId];
|
client = server.clients[clientId];
|
||||||
if (client !== exclude) {
|
if (client !== exclude) {
|
||||||
var msg = {
|
var msg = {
|
||||||
|
|
1
index.js
1
index.js
|
@ -9,6 +9,7 @@ var EventEmitter = require('events').EventEmitter
|
||||||
, Client = require('./lib/client')
|
, Client = require('./lib/client')
|
||||||
, Server = require('./lib/server')
|
, Server = require('./lib/server')
|
||||||
, debug = protocol.debug
|
, debug = protocol.debug
|
||||||
|
;
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
createClient: createClient,
|
createClient: createClient,
|
||||||
|
|
|
@ -6,6 +6,7 @@ var net = require('net')
|
||||||
, createPacketBuffer = protocol.createPacketBuffer
|
, createPacketBuffer = protocol.createPacketBuffer
|
||||||
, parsePacket = protocol.parsePacket
|
, parsePacket = protocol.parsePacket
|
||||||
, debug = protocol.debug
|
, debug = protocol.debug
|
||||||
|
;
|
||||||
|
|
||||||
module.exports = Client;
|
module.exports = Client;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
var net = require('net')
|
var net = require('net')
|
||||||
, Client = require('./client')
|
, Client = require('./client')
|
||||||
, protocol = require('./protocol')
|
, protocol = require('./protocol')
|
||||||
|
;
|
||||||
|
|
||||||
module.exports = ping;
|
module.exports = ping;
|
||||||
|
|
||||||
|
|
|
@ -605,12 +605,14 @@ var entityMetadataTypes = {
|
||||||
// maps string type name to number
|
// maps string type name to number
|
||||||
var entityMetadataTypeBytes = {};
|
var entityMetadataTypeBytes = {};
|
||||||
for (var n in entityMetadataTypes) {
|
for (var n in entityMetadataTypes) {
|
||||||
|
if (!entityMetadataTypes.hasOwnProperty(n)) continue;
|
||||||
|
|
||||||
entityMetadataTypeBytes[entityMetadataTypes[n]] = n;
|
entityMetadataTypeBytes[entityMetadataTypes[n]] = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
function sizeOfEntityMetadata(value) {
|
function sizeOfEntityMetadata(value) {
|
||||||
var size = 1 + value.length;
|
var size = 1 + value.length;
|
||||||
var item, dataType;
|
var item;
|
||||||
for (var i = 0; i < value.length; ++i) {
|
for (var i = 0; i < value.length; ++i) {
|
||||||
item = value[i];
|
item = value[i];
|
||||||
size += sizeOf(item.type, item.value);
|
size += sizeOf(item.type, item.value);
|
||||||
|
@ -636,7 +638,7 @@ function sizeOfObjectData(value) {
|
||||||
|
|
||||||
function writeObjectData(value, buffer, offset) {
|
function writeObjectData(value, buffer, offset) {
|
||||||
buffer.writeInt32BE(value.intField, offset);
|
buffer.writeInt32BE(value.intField, offset);
|
||||||
if (value.intField === 0) return;
|
if (value.intField === 0) return -1;
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
|
||||||
buffer.writeInt16BE(value.velocityX, offset);
|
buffer.writeInt16BE(value.velocityX, offset);
|
||||||
|
@ -1120,7 +1122,7 @@ function readPropertyArray (buffer, offset) {
|
||||||
|
|
||||||
property.elementList = [];
|
property.elementList = [];
|
||||||
for (var j = 0; j < elementListLength ; j++) {
|
for (var j = 0; j < elementListLength ; j++) {
|
||||||
property.elementList[j] = {}
|
property.elementList[j] = {};
|
||||||
|
|
||||||
results = readUUID(buffer, cursor);
|
results = readUUID(buffer, cursor);
|
||||||
if (! results) return null;
|
if (! results) return null;
|
||||||
|
@ -1276,7 +1278,7 @@ function writeSlot(value, buffer, offset) {
|
||||||
buffer.writeInt16BE(nbtDataSize, offset + 5);
|
buffer.writeInt16BE(nbtDataSize, offset + 5);
|
||||||
value.nbtData.copy(buffer, offset + 7);
|
value.nbtData.copy(buffer, offset + 7);
|
||||||
return offset + 7 + value.nbtData.length;
|
return offset + 7 + value.nbtData.length;
|
||||||
};
|
}
|
||||||
|
|
||||||
function sizeOfString(value) {
|
function sizeOfString(value) {
|
||||||
assert.ok(value.length < STRING_MAX_LENGTH, "string greater than max length");
|
assert.ok(value.length < STRING_MAX_LENGTH, "string greater than max length");
|
||||||
|
@ -1297,7 +1299,7 @@ function writeString(value, buffer, offset) {
|
||||||
offset += 2;
|
offset += 2;
|
||||||
}
|
}
|
||||||
return offset;
|
return offset;
|
||||||
};
|
}
|
||||||
|
|
||||||
function sizeOfAscii(value) {
|
function sizeOfAscii(value) {
|
||||||
return 2 + value.length;
|
return 2 + value.length;
|
||||||
|
@ -1312,7 +1314,7 @@ function writeAscii(value, buffer, offset) {
|
||||||
offset += 1;
|
offset += 1;
|
||||||
}
|
}
|
||||||
return offset;
|
return offset;
|
||||||
};
|
}
|
||||||
|
|
||||||
function sizeOfByteArray16(value) {
|
function sizeOfByteArray16(value) {
|
||||||
assert.ok(Buffer.isBuffer(value), "non buffer passed to ByteArray16Writer");
|
assert.ok(Buffer.isBuffer(value), "non buffer passed to ByteArray16Writer");
|
||||||
|
@ -1323,7 +1325,7 @@ function writeByteArray16(value, buffer, offset) {
|
||||||
buffer.writeInt16BE(value.length, offset);
|
buffer.writeInt16BE(value.length, offset);
|
||||||
value.copy(buffer, offset + 2);
|
value.copy(buffer, offset + 2);
|
||||||
return offset + 2 + value.length;
|
return offset + 2 + value.length;
|
||||||
};
|
}
|
||||||
|
|
||||||
function writeByte(value, buffer, offset) {
|
function writeByte(value, buffer, offset) {
|
||||||
buffer.writeInt8(value, offset);
|
buffer.writeInt8(value, offset);
|
||||||
|
@ -1338,7 +1340,7 @@ function writeBool(value, buffer, offset) {
|
||||||
function writeUByte(value, buffer, offset) {
|
function writeUByte(value, buffer, offset) {
|
||||||
buffer.writeUInt8(value, offset);
|
buffer.writeUInt8(value, offset);
|
||||||
return offset + 1;
|
return offset + 1;
|
||||||
};
|
}
|
||||||
|
|
||||||
function writeFloat(value, buffer, offset) {
|
function writeFloat(value, buffer, offset) {
|
||||||
buffer.writeFloatBE(value, offset);
|
buffer.writeFloatBE(value, offset);
|
||||||
|
|
|
@ -3,6 +3,7 @@ var net = require('net')
|
||||||
, util = require('util')
|
, util = require('util')
|
||||||
, assert = require('assert')
|
, assert = require('assert')
|
||||||
, Client = require('./client')
|
, Client = require('./client')
|
||||||
|
;
|
||||||
|
|
||||||
module.exports = Server;
|
module.exports = Server;
|
||||||
|
|
||||||
|
@ -53,6 +54,8 @@ Server.prototype.listen = function(port, host) {
|
||||||
Server.prototype.close = function() {
|
Server.prototype.close = function() {
|
||||||
var client;
|
var client;
|
||||||
for(var clientId in this.clients) {
|
for(var clientId in this.clients) {
|
||||||
|
if (!this.clients.hasOwnProperty(clientId)) continue;
|
||||||
|
|
||||||
client = this.clients[clientId];
|
client = this.clients[clientId];
|
||||||
client.end('ServerShutdown');
|
client.end('ServerShutdown');
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ var FakeSocket = function() {
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
};
|
};
|
||||||
util.inherits(FakeSocket, EventEmitter);
|
util.inherits(FakeSocket, EventEmitter);
|
||||||
FakeSocket.prototype.write = function(){}
|
FakeSocket.prototype.write = function(){};
|
||||||
|
|
||||||
var client = new Client();
|
var client = new Client();
|
||||||
var socket = new FakeSocket();
|
var socket = new FakeSocket();
|
||||||
|
|
14
test/test.js
14
test/test.js
|
@ -14,6 +14,7 @@ var mc = require('../')
|
||||||
, MC_SERVER_JAR = process.env.MC_SERVER_JAR
|
, MC_SERVER_JAR = process.env.MC_SERVER_JAR
|
||||||
, SURVIVE_TIME = 10000
|
, SURVIVE_TIME = 10000
|
||||||
, MC_SERVER_PATH = path.join(__dirname, 'server')
|
, MC_SERVER_PATH = path.join(__dirname, 'server')
|
||||||
|
;
|
||||||
|
|
||||||
var defaultServerProps = {
|
var defaultServerProps = {
|
||||||
'generator-settings': "",
|
'generator-settings': "",
|
||||||
|
@ -127,6 +128,8 @@ describe("packets", function() {
|
||||||
});
|
});
|
||||||
var packetId, packetInfo, field;
|
var packetId, packetInfo, field;
|
||||||
for(packetId in protocol.packets) {
|
for(packetId in protocol.packets) {
|
||||||
|
if (!protocol.packets.hasOwnProperty(packetId)) continue;
|
||||||
|
|
||||||
packetId = parseInt(packetId, 10);
|
packetId = parseInt(packetId, 10);
|
||||||
packetInfo = protocol.packets[packetId];
|
packetInfo = protocol.packets[packetId];
|
||||||
it("0x" + zfill(parseInt(packetId, 10).toString(16), 2),
|
it("0x" + zfill(parseInt(packetId, 10).toString(16), 2),
|
||||||
|
@ -150,7 +153,6 @@ describe("packets", function() {
|
||||||
// empty object uses default values
|
// empty object uses default values
|
||||||
var packet = {};
|
var packet = {};
|
||||||
packetInfo.forEach(function(field) {
|
packetInfo.forEach(function(field) {
|
||||||
var value = field.type;
|
|
||||||
packet[field.name] = values[field.type];
|
packet[field.name] = values[field.type];
|
||||||
});
|
});
|
||||||
serverClient.once(packetId, function(receivedPacket) {
|
serverClient.once(packetId, function(receivedPacket) {
|
||||||
|
@ -169,7 +171,7 @@ describe("packets", function() {
|
||||||
packetInfo.forEach(function(field) {
|
packetInfo.forEach(function(field) {
|
||||||
assert.deepEqual(p1[field], p2[field]);
|
assert.deepEqual(p1[field], p2[field]);
|
||||||
});
|
});
|
||||||
var field, cmp;
|
var field;
|
||||||
for (field in p1) {
|
for (field in p1) {
|
||||||
assert.ok(field in p2, "field " + field + " missing in p2");
|
assert.ok(field in p2, "field " + field + " missing in p2");
|
||||||
}
|
}
|
||||||
|
@ -187,9 +189,13 @@ describe("client", function() {
|
||||||
var props = {};
|
var props = {};
|
||||||
var prop;
|
var prop;
|
||||||
for (prop in defaultServerProps) {
|
for (prop in defaultServerProps) {
|
||||||
|
if (!defaultServerProps.hasOwnProperty(prop)) continue;
|
||||||
|
|
||||||
props[prop] = defaultServerProps[prop];
|
props[prop] = defaultServerProps[prop];
|
||||||
}
|
}
|
||||||
for (prop in propOverrides) {
|
for (prop in propOverrides) {
|
||||||
|
if (!propOverrides.hasOwnProperty(prop)) continue;
|
||||||
|
|
||||||
props[prop] = propOverrides[prop];
|
props[prop] = propOverrides[prop];
|
||||||
}
|
}
|
||||||
var batch = new Batch();
|
var batch = new Batch();
|
||||||
|
@ -197,6 +203,8 @@ describe("client", function() {
|
||||||
batch.push(function(cb) {
|
batch.push(function(cb) {
|
||||||
var str = "";
|
var str = "";
|
||||||
for (var prop in props) {
|
for (var prop in props) {
|
||||||
|
if (!props.hasOwnProperty(prop)) continue;
|
||||||
|
|
||||||
str += prop + "=" + props[prop] + "\n";
|
str += prop + "=" + props[prop] + "\n";
|
||||||
}
|
}
|
||||||
fs.writeFile(path.join(MC_SERVER_PATH, "server.properties"), str, cb);
|
fs.writeFile(path.join(MC_SERVER_PATH, "server.properties"), str, cb);
|
||||||
|
@ -547,6 +555,8 @@ describe("mc-server", function() {
|
||||||
function broadcast(message, exclude) {
|
function broadcast(message, exclude) {
|
||||||
var client;
|
var client;
|
||||||
for (var clientId in server.clients) {
|
for (var clientId in server.clients) {
|
||||||
|
if (!server.clients.hasOwnProperty(clientId)) continue;
|
||||||
|
|
||||||
client = server.clients[clientId];
|
client = server.clients[clientId];
|
||||||
if (client !== exclude) client.write(0x03, { message: message });
|
if (client !== exclude) client.write(0x03, { message: message });
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue