mirror of
https://github.com/PrismarineJS/node-minecraft-protocol.git
synced 2025-05-20 10:10:25 -04:00
a few small changes to make the code better
This commit is contained in:
parent
f3a653ef1c
commit
b2b53c9343
14 changed files with 40 additions and 47 deletions
examples
src
test
|
@ -55,7 +55,7 @@ if(process.argv.length < 5) {
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
process.argv.forEach(function(val, index, array) {
|
process.argv.forEach(function(val) {
|
||||||
if(val == "-h") {
|
if(val == "-h") {
|
||||||
print_help();
|
print_help();
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
|
@ -167,9 +167,9 @@ function parseChat(chatObj, parentState) {
|
||||||
|
|
||||||
chat += color(util.format.apply(this, args), getColorize(parentState));
|
chat += color(util.format.apply(this, args), getColorize(parentState));
|
||||||
}
|
}
|
||||||
for(var i in chatObj.extra) {
|
chatObj.extra.forEach(function(i) {
|
||||||
chat += parseChat(chatObj.extra[i], parentState);
|
chat += parseChat(chatObj.extra[i], parentState);
|
||||||
}
|
});
|
||||||
return chat;
|
return chat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ if(process.argv.length < 4) {
|
||||||
printHelpAndExit(1);
|
printHelpAndExit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
process.argv.forEach(function(val, index, array) {
|
process.argv.forEach(function(val) {
|
||||||
if(val == "-h") {
|
if(val == "-h") {
|
||||||
printHelpAndExit(0);
|
printHelpAndExit(0);
|
||||||
}
|
}
|
||||||
|
@ -175,8 +175,8 @@ srv.on('login', function(client) {
|
||||||
function shouldDump(name, direction) {
|
function shouldDump(name, direction) {
|
||||||
if(matches(printNameBlacklist[name])) return false;
|
if(matches(printNameBlacklist[name])) return false;
|
||||||
if(printAllNames) return true;
|
if(printAllNames) return true;
|
||||||
if(matches(printNameWhitelist[name])) return true;
|
return matches(printNameWhitelist[name]);
|
||||||
return false;
|
|
||||||
function matches(result) {
|
function matches(result) {
|
||||||
return result != null && result.indexOf(direction) !== -1;
|
return result != null && result.indexOf(direction) !== -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
var mc = require('minecraft-protocol');
|
var mc = require('minecraft-protocol');
|
||||||
var states = mc.states;
|
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
motd: 'Vox Industries',
|
motd: 'Vox Industries',
|
||||||
'max-players': 127,
|
'max-players': 127,
|
||||||
port: 25565,
|
port: 25565,
|
||||||
'online-mode': false,
|
'online-mode': false
|
||||||
};
|
};
|
||||||
|
|
||||||
var server = mc.createServer(options);
|
var server = mc.createServer(options);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
var mc = require('minecraft-protocol');
|
var mc = require('minecraft-protocol');
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
'online-mode': true,
|
'online-mode': true
|
||||||
};
|
};
|
||||||
|
|
||||||
var server = mc.createServer(options);
|
var server = mc.createServer(options);
|
||||||
|
|
|
@ -86,6 +86,7 @@ function createClient(options) {
|
||||||
client.connect(port, host);
|
client.connect(port, host);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var timeout = null;
|
||||||
return client;
|
return client;
|
||||||
|
|
||||||
function onConnect() {
|
function onConnect() {
|
||||||
|
@ -104,7 +105,6 @@ function createClient(options) {
|
||||||
function onCompressionRequest(packet) {
|
function onCompressionRequest(packet) {
|
||||||
client.compressionThreshold = packet.threshold;
|
client.compressionThreshold = packet.threshold;
|
||||||
}
|
}
|
||||||
var timeout = null;
|
|
||||||
function onKeepAlive(packet) {
|
function onKeepAlive(packet) {
|
||||||
if (timeout)
|
if (timeout)
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
|
@ -153,7 +153,7 @@ function createClient(options) {
|
||||||
var encryptedVerifyTokenBuffer = pubKey.encrypt(packet.verifyToken, undefined, undefined, ursa.RSA_PKCS1_PADDING);
|
var encryptedVerifyTokenBuffer = pubKey.encrypt(packet.verifyToken, undefined, undefined, ursa.RSA_PKCS1_PADDING);
|
||||||
client.write('encryption_begin', {
|
client.write('encryption_begin', {
|
||||||
sharedSecret: encryptedSharedSecretBuffer,
|
sharedSecret: encryptedSharedSecretBuffer,
|
||||||
verifyToken: encryptedVerifyTokenBuffer,
|
verifyToken: encryptedVerifyTokenBuffer
|
||||||
});
|
});
|
||||||
client.setEncryption(sharedSecret);
|
client.setEncryption(sharedSecret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ function createServer(options) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function onKeepAlive(packet) {
|
function onKeepAlive() {
|
||||||
lastKeepAlive = new Date();
|
lastKeepAlive = new Date();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ function createServer(options) {
|
||||||
clearTimeout(loginKickTimer);
|
clearTimeout(loginKickTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onPing(packet) {
|
function onPing() {
|
||||||
var response = {
|
var response = {
|
||||||
"version": {
|
"version": {
|
||||||
"name": version.minecraftVersion,
|
"name": version.minecraftVersion,
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
var nbt = require('prismarine-nbt');
|
var nbt = require('prismarine-nbt');
|
||||||
var types=require("protodef").types;
|
|
||||||
var uuid = require('node-uuid');
|
var uuid = require('node-uuid');
|
||||||
|
|
||||||
// TODO : remove type-specific, replace with generic containers and arrays.
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
'UUID': [readUUID, writeUUID, 16],
|
'UUID': [readUUID, writeUUID, 16],
|
||||||
'nbt': [readNbt, writeNbt, sizeOfNbt],
|
'nbt': [readNbt, writeNbt, sizeOfNbt],
|
||||||
|
@ -14,7 +12,7 @@ module.exports = {
|
||||||
function readUUID(buffer, offset) {
|
function readUUID(buffer, offset) {
|
||||||
return {
|
return {
|
||||||
value: uuid.unparse(buffer, offset),
|
value: uuid.unparse(buffer, offset),
|
||||||
size: 16,
|
size: 16
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,37 +69,37 @@ function sizeOfRestBuffer(value) {
|
||||||
return value.length;
|
return value.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
function readEntityMetadata(buffer, offset, typeArgs) {
|
function readEntityMetadata(buffer, offset, {type,endVal}) {
|
||||||
var cursor = offset;
|
var cursor = offset;
|
||||||
var metadata = [];
|
var metadata = [];
|
||||||
var item;
|
var item;
|
||||||
while(true) {
|
while(true) {
|
||||||
item = buffer.readUInt8(cursor);
|
item = buffer.readUInt8(cursor);
|
||||||
if(item === typeArgs.endVal) {
|
if(item === endVal) {
|
||||||
return {
|
return {
|
||||||
value: metadata,
|
value: metadata,
|
||||||
size: cursor + 1 - offset
|
size: cursor + 1 - offset
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
var results = this.read(buffer, cursor, typeArgs.type, {});
|
var results = this.read(buffer, cursor, type, {});
|
||||||
metadata.push(results.value);
|
metadata.push(results.value);
|
||||||
cursor += results.size;
|
cursor += results.size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeEntityMetadata(value, buffer, offset, typeArgs) {
|
function writeEntityMetadata(value, buffer, offset, {type,endVal}) {
|
||||||
var self = this;
|
var self = this;
|
||||||
value.forEach(function(item) {
|
value.forEach(function(item) {
|
||||||
offset = self.write(item, buffer, offset, typeArgs.type, {});
|
offset = self.write(item, buffer, offset, type, {});
|
||||||
});
|
});
|
||||||
buffer.writeUInt8(typeArgs.endVal, offset);
|
buffer.writeUInt8(endVal, offset);
|
||||||
return offset + 1;
|
return offset + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
function sizeOfEntityMetadata(value, typeArgs) {
|
function sizeOfEntityMetadata(value, {type}) {
|
||||||
var size = 1;
|
var size = 1;
|
||||||
for(var i = 0; i < value.length; ++i) {
|
for(var i = 0; i < value.length; ++i) {
|
||||||
size += this.sizeOf(value[i], typeArgs.type, {});
|
size += this.sizeOf(value[i], type, {});
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var util = require('util')
|
var util = require('util');
|
||||||
|
|
||||||
var debug;
|
var debug;
|
||||||
if(process.env.NODE_DEBUG && /(minecraft-protocol|mc-proto)/.test(process.env.NODE_DEBUG)) {
|
if(process.env.NODE_DEBUG && /(minecraft-protocol|mc-proto)/.test(process.env.NODE_DEBUG)) {
|
||||||
|
|
|
@ -4,11 +4,11 @@ var Transform = require("readable-stream").Transform;
|
||||||
|
|
||||||
module.exports.createCompressor = function(threshold) {
|
module.exports.createCompressor = function(threshold) {
|
||||||
return new Compressor(threshold);
|
return new Compressor(threshold);
|
||||||
}
|
};
|
||||||
|
|
||||||
module.exports.createDecompressor = function(threshold) {
|
module.exports.createDecompressor = function(threshold) {
|
||||||
return new Decompressor(threshold);
|
return new Decompressor(threshold);
|
||||||
}
|
};
|
||||||
|
|
||||||
class Compressor extends Transform {
|
class Compressor extends Transform {
|
||||||
constructor(compressionThreshold = -1) {
|
constructor(compressionThreshold = -1) {
|
||||||
|
@ -47,8 +47,7 @@ class Decompressor extends Transform {
|
||||||
}
|
}
|
||||||
|
|
||||||
_transform(chunk, enc, cb) {
|
_transform(chunk, enc, cb) {
|
||||||
var size, value, error;
|
var { size, value, error } = readVarInt(chunk, 0);
|
||||||
({ size, value, error } = readVarInt(chunk, 0));
|
|
||||||
if (error)
|
if (error)
|
||||||
return cb(error);
|
return cb(error);
|
||||||
if (value === 0)
|
if (value === 0)
|
||||||
|
|
|
@ -3,11 +3,11 @@ var Transform = require("readable-stream").Transform;
|
||||||
|
|
||||||
module.exports.createSplitter = function() {
|
module.exports.createSplitter = function() {
|
||||||
return new Splitter();
|
return new Splitter();
|
||||||
}
|
};
|
||||||
|
|
||||||
module.exports.createFramer = function() {
|
module.exports.createFramer = function() {
|
||||||
return new Framer();
|
return new Framer();
|
||||||
}
|
};
|
||||||
|
|
||||||
class Framer extends Transform {
|
class Framer extends Transform {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -30,10 +30,9 @@ class Splitter extends Transform {
|
||||||
}
|
}
|
||||||
_transform(chunk, enc, cb) {
|
_transform(chunk, enc, cb) {
|
||||||
this.buffer = Buffer.concat([this.buffer, chunk]);
|
this.buffer = Buffer.concat([this.buffer, chunk]);
|
||||||
var value, size, error;
|
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
|
|
||||||
({ value, size, error } = readVarInt(this.buffer, offset) || { error: "Not enough data" });
|
var { value, size, error } = readVarInt(this.buffer, offset) || { error: "Not enough data" };
|
||||||
while (!error && this.buffer.length >= offset + size + value)
|
while (!error && this.buffer.length >= offset + size + value)
|
||||||
{
|
{
|
||||||
this.push(this.buffer.slice(offset + size, offset + size + value));
|
this.push(this.buffer.slice(offset + size, offset + size + value));
|
||||||
|
|
|
@ -7,7 +7,7 @@ var states = mc.states;
|
||||||
var testDataWrite = [
|
var testDataWrite = [
|
||||||
{name: 'keep_alive', params: {keepAliveId: 957759560}},
|
{name: 'keep_alive', params: {keepAliveId: 957759560}},
|
||||||
{name: 'chat', params: {message: '<Bob> Hello World!'}},
|
{name: 'chat', params: {message: '<Bob> Hello World!'}},
|
||||||
{name: 'position_look', params: {x: 6.5, y: 65.62, stance: 67.24, z: 7.5, yaw: 0, pitch: 0, onGround: true}},
|
{name: 'position_look', params: {x: 6.5, y: 65.62, stance: 67.24, z: 7.5, yaw: 0, pitch: 0, onGround: true}}
|
||||||
// TODO: add more packets for better quality data
|
// TODO: add more packets for better quality data
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ mc.supportedVersions.forEach(function(supportedVersion){
|
||||||
var deserializer=new mc.createDeserializer({state:states.PLAY,isServer:true,version:version.majorVersion});
|
var deserializer=new mc.createDeserializer({state:states.PLAY,isServer:true,version:version.majorVersion});
|
||||||
console.log('Beginning read test');
|
console.log('Beginning read test');
|
||||||
start = Date.now();
|
start = Date.now();
|
||||||
for (j = 0; j < inputData.length; j++) {
|
for (var j = 0; j < inputData.length; j++) {
|
||||||
deserializer.parsePacketBuffer(inputData[j]);
|
deserializer.parsePacketBuffer(inputData[j]);
|
||||||
}
|
}
|
||||||
console.log('Finished read test in ' + (Date.now() - start) / 1000 + ' seconds');
|
console.log('Finished read test in ' + (Date.now() - start) / 1000 + ' seconds');
|
||||||
|
|
|
@ -43,7 +43,7 @@ mc.supportedVersions.forEach(function(supportedVersion) {
|
||||||
});
|
});
|
||||||
wrap.startServer({
|
wrap.startServer({
|
||||||
motd: 'test1234',
|
motd: 'test1234',
|
||||||
'max-players': 120,
|
'max-players': 120
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
if(err)
|
if(err)
|
||||||
return done(err);
|
return done(err);
|
||||||
|
|
|
@ -41,9 +41,9 @@ var values = {
|
||||||
var results = {
|
var results = {
|
||||||
"..": context
|
"..": context
|
||||||
};
|
};
|
||||||
for(var index in typeArgs) {
|
Object.keys(typeArgs).forEach(function(index){
|
||||||
results[typeArgs[index].name] = getValue(typeArgs[index].type, results);
|
results[typeArgs[index].name] = getValue(typeArgs[index].type, results);
|
||||||
}
|
});
|
||||||
delete context[".."];
|
delete context[".."];
|
||||||
return results;
|
return results;
|
||||||
},
|
},
|
||||||
|
@ -100,7 +100,7 @@ var values = {
|
||||||
intField: 9,
|
intField: 9,
|
||||||
velocityX: 1,
|
velocityX: 1,
|
||||||
velocityY: 2,
|
velocityY: 2,
|
||||||
velocityZ: 3,
|
velocityZ: 3
|
||||||
},
|
},
|
||||||
'UUID': "00112233-4455-6677-8899-aabbccddeeff",
|
'UUID': "00112233-4455-6677-8899-aabbccddeeff",
|
||||||
'position': {x: 12, y: 332, z: 4382821},
|
'position': {x: 12, y: 332, z: 4382821},
|
||||||
|
@ -155,7 +155,7 @@ mc.supportedVersions.forEach(function(supportedVersion){
|
||||||
client.end();
|
client.end();
|
||||||
});
|
});
|
||||||
var packetName, packetInfo, field;
|
var packetName, packetInfo, field;
|
||||||
for(state in packets) {
|
for(var state in packets) {
|
||||||
if(!packets.hasOwnProperty(state)) continue;
|
if(!packets.hasOwnProperty(state)) continue;
|
||||||
for(packetName in packets[state].toServer) {
|
for(packetName in packets[state].toServer) {
|
||||||
if(!packets[state].toServer.hasOwnProperty(packetName)) continue;
|
if(!packets[state].toServer.hasOwnProperty(packetName)) continue;
|
||||||
|
@ -210,14 +210,13 @@ mc.supportedVersions.forEach(function(supportedVersion){
|
||||||
packetInfo.forEach(function(field) {
|
packetInfo.forEach(function(field) {
|
||||||
assert.deepEqual(p1[field], p2[field]);
|
assert.deepEqual(p1[field], p2[field]);
|
||||||
});
|
});
|
||||||
var field;
|
Object.keys(p1).forEach(function(field){
|
||||||
for(field in p1) {
|
|
||||||
if (p1[field] !== undefined)
|
if (p1[field] !== undefined)
|
||||||
assert.ok(field in p2, "field " + field + " missing in p2, in p1 it has value " + JSON.stringify(p1[field]));
|
assert.ok(field in p2, "field " + field + " missing in p2, in p1 it has value " + JSON.stringify(p1[field]));
|
||||||
}
|
});
|
||||||
for(field in p2) {
|
Object.keys(p2).forEach(function(field){
|
||||||
assert.ok(field in p1, "field " + field + " missing in p1, in p2 it has value " + JSON.stringify(p2[field]));
|
assert.ok(field in p1, "field " + field + " missing in p1, in p2 it has value " + JSON.stringify(p2[field]));
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
var mc = require('../');
|
var mc = require('../');
|
||||||
var Client = mc.Client;
|
|
||||||
var assert = require('power-assert');
|
var assert = require('power-assert');
|
||||||
|
|
||||||
mc.supportedVersions.forEach(function(supportedVersion){
|
mc.supportedVersions.forEach(function(supportedVersion){
|
||||||
|
@ -271,4 +270,4 @@ mc.supportedVersions.forEach(function(supportedVersion){
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue