Merge pull request #528 from PrismarineJS/15w50a

17w50a support
This commit is contained in:
Romain Beaumont 2018-01-01 23:00:59 +01:00 committed by GitHub
commit 6ce09ba9b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 22 additions and 14 deletions

View File

@ -9,7 +9,7 @@ Parse and serialize minecraft packets, plus authentication and encryption.
## Features ## Features
* Supports Minecraft PC version 1.7.10, 1.8.8, 1.9 (15w40b, 1.9, 1.9.1-pre2, 1.9.2, 1.9.4), * Supports Minecraft PC version 1.7.10, 1.8.8, 1.9 (15w40b, 1.9, 1.9.1-pre2, 1.9.2, 1.9.4),
1.10 (16w20a, 1.10-pre1, 1.10, 1.10.1, 1.10.2), 1.11 (16w35a, 1.11, 1.11.2), and 1.12 (17w15a, 17w18b, 1.12-pre4, 1.12, 1.12.1) 1.10 (16w20a, 1.10-pre1, 1.10, 1.10.1, 1.10.2), 1.11 (16w35a, 1.11, 1.11.2), 1.12 (17w15a, 17w18b, 1.12-pre4, 1.12, 1.12.1, 1.12.2), and 1.13 (17w50a)
* Parses all packets and emits events with packet fields as JavaScript * Parses all packets and emits events with packet fields as JavaScript
objects. objects.
* Send a packet by supplying fields as a JavaScript object. * Send a packet by supplying fields as a JavaScript object.

View File

@ -41,9 +41,9 @@
"endian-toggle": "^0.0.0", "endian-toggle": "^0.0.0",
"lodash.get": "^4.1.2", "lodash.get": "^4.1.2",
"lodash.merge": "^4.3.0", "lodash.merge": "^4.3.0",
"minecraft-data": "^2.20.0", "minecraft-data": "^2.25.0",
"node-rsa": "^0.4.2", "node-rsa": "^0.4.2",
"prismarine-nbt": "^1.0.0", "prismarine-nbt": "^1.2.0",
"protodef": "^1.5.1", "protodef": "^1.5.1",
"readable-stream": "^2.0.5", "readable-stream": "^2.0.5",
"uuid-1345": "^0.99.6", "uuid-1345": "^0.99.6",

View File

@ -97,7 +97,8 @@ class Client extends EventEmitter
parsed.data=parsed.data.params; parsed.data=parsed.data.params;
parsed.metadata.state=state; parsed.metadata.state=state;
debug("read packet " + state + "." + parsed.metadata.name); debug("read packet " + state + "." + parsed.metadata.name);
debug(parsed.data); const s=JSON.stringify(parsed.data,null,2);
debug(s.length > 10000 ? parsed.data : s);
this.emit('packet', parsed.data, parsed.metadata); this.emit('packet', parsed.data, parsed.metadata);
this.emit(parsed.metadata.name, parsed.data, parsed.metadata); this.emit(parsed.metadata.name, parsed.data, parsed.metadata);
this.emit('raw.' + parsed.metadata.name, parsed.buffer, parsed.metadata); this.emit('raw.' + parsed.metadata.name, parsed.buffer, parsed.metadata);

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
module.exports={ module.exports={
defaultVersion:'1.12.1', defaultVersion:'1.12.2',
supportedVersions:['1.7','1.8','1.9','1.10','1.11.2','1.12.1'] supportedVersions:['1.7','1.8','1.9','1.10','1.11.2','1.12.2','17w50a']
}; };

View File

@ -117,15 +117,15 @@ mc.supportedVersions.forEach(function(supportedVersion,i) {
assert.strictEqual(message.translate, "chat.type.text"); assert.strictEqual(message.translate, "chat.type.text");
assert.deepEqual(message["with"][0].clickEvent, { assert.deepEqual(message["with"][0].clickEvent, {
action: "suggest_command", action: "suggest_command",
value: "/msg Player " value: mcData.version.version>340 ? "/tell Player " : "/msg Player "
}); });
assert.deepEqual(message["with"][0].text, "Player"); assert.deepEqual(message["with"][0].text, "Player");
assert.strictEqual(message["with"][1], "hello everyone; I have logged in."); assert.strictEqual(message["with"][1], "hello everyone; I have logged in.");
} else if (chatCount === 2) { } else if (chatCount === 2) {
assert.strictEqual(message.translate, "chat.type.announcement"); assert.strictEqual(message.translate, "chat.type.announcement");
assert.strictEqual(message["with"][0].text ? message["with"][0].text : message["with"][0], "Server"); assert.strictEqual(message["with"][0].text ? message["with"][0].text : message["with"][0], "Server");
assert.deepEqual(message["with"][1].extra[0].text ? assert.deepEqual(message["with"][1].extra ? (message["with"][1].extra[0].text ?
message["with"][1].extra[0].text : message["with"][1].extra[0], "hello"); message["with"][1].extra[0].text : message["with"][1].extra[0]) : message["with"][1].text, "hello");
wrap.removeListener('line', lineListener); wrap.removeListener('line', lineListener);
client.end(); client.end();
done(); done();

View File

@ -42,7 +42,7 @@ const values = {
"..": context "..": context
}; };
Object.keys(typeArgs).forEach(function(index){ Object.keys(typeArgs).forEach(function(index){
const v=getValue(typeArgs[index].type, results); const v=typeArgs[index].name==="type" && typeArgs[index].type==="string" ? "crafting_shapeless" : getValue(typeArgs[index].type, results);
if(typeArgs[index].anon) { if(typeArgs[index].anon) {
Object.keys(v).forEach(key => { Object.keys(v).forEach(key => {
results[key]=v[key]; results[key]=v[key];
@ -130,21 +130,26 @@ const values = {
'restBuffer': new Buffer(0), 'restBuffer': new Buffer(0),
'switch': function(typeArgs, context) { 'switch': function(typeArgs, context) {
const i = typeArgs.fields[getField(typeArgs.compareTo, context)]; const i = typeArgs.fields[getField(typeArgs.compareTo, context)];
if (typeof i === "undefined") if (typeof i === "undefined") {
if(typeArgs.default === undefined)
throw new Error("couldn't find the field "+typeArgs.compareTo+" of the compareTo and the default is not defined");
return getValue(typeArgs.default, context); return getValue(typeArgs.default, context);
}
else else
return getValue(i, context); return getValue(i, context);
}, },
'option': function(typeArgs, context) { 'option': function(typeArgs, context) {
return getValue(typeArgs, context); return getValue(typeArgs, context);
}, },
'bitfield': function(typeArgs) { 'bitfield': function(typeArgs, context) {
const results={}; const results={};
Object.keys(typeArgs).forEach(function(index){ Object.keys(typeArgs).forEach(function(index){
results[typeArgs[index].name] = 1; results[typeArgs[index].name] = 1;
context[typeArgs[index].name] = 1;
}); });
return results; return results;
} },
'tags':[{'tagName':'hi','entries':[1,2,3,4,5]}]
}; };
function getValue(_type, packet) { function getValue(_type, packet) {
@ -192,7 +197,9 @@ mc.supportedVersions.forEach(function(supportedVersion,i){
let packetInfo, field; let packetInfo, field;
Object.keys(packets).filter(function(state){return state!=="types"}).forEach(function(state){ Object.keys(packets).filter(function(state){return state!=="types"}).forEach(function(state){
Object.keys(packets[state]).forEach(function(direction){ Object.keys(packets[state]).forEach(function(direction){
Object.keys(packets[state][direction].types).filter(function(packetName){return packetName!=="packet"}).forEach(function(packetName){ Object.keys(packets[state][direction].types)
.filter(function(packetName){return packetName!=="packet" && packetName.startsWith("packet_")})
.forEach(function(packetName){
packetInfo = packets[state][direction].types[packetName]; packetInfo = packets[state][direction].types[packetName];
packetInfo=packetInfo ? packetInfo : null; packetInfo=packetInfo ? packetInfo : null;
it(state + ","+(direction==="toServer" ? "Server" : "Client")+"Bound," + packetName, it(state + ","+(direction==="toServer" ? "Server" : "Client")+"Bound," + packetName,