Implement @roblabla's changes

This commit is contained in:
Will Franzen 2014-12-31 12:17:02 -06:00
parent 3121c0fdcc
commit 17e78c11f6

View File

@ -321,19 +321,16 @@ var packets = {
{ name: "location", type: "position" }, { name: "location", type: "position" },
{ name: "destroyStage", type: "byte" } { name: "destroyStage", type: "byte" }
]}, ]},
map_chunk_bulk: {id: 0x26, fields: [ /* TODO: This is probably wrong */ map_chunk_bulk: {id: 0x26, fields: [
{ name: "skyLightSent", type: "bool" }, { name: "skyLightSent", type: "bool" },
{ name: "chunkColumnCount", type: "count", typeArgs: { type: "varint", countFor: "meta" } }, { name: "chunkColumnCount", type: "count", typeArgs: { type: "varint", countFor: "meta" } },
{ name: "dataLength", type: "count", typeArgs: { type: "int", countFor: "chunkData" } }, { name: "meta", type: "array", typeArgs: { count: "chunkColumnCount", type: "container", typeArgs: { fields: [
{ name: "chunkData", type: "buffer", typeArgs: { count: "dataLength" } },
{ name: "meta", type: "array", typeArgs: { count: "chunkColumnCount",
type: "container", typeArgs: { fields: [
{ name: "x", type: "int" }, { name: "x", type: "int" },
{ name: "z", type: "int" }, { name: "z", type: "int" },
{ name: "bitMap", type: "ushort" }, { name: "bitMap", type: "ushort" },
{ name: "addBitMap", type: "ushort" } ]}}},
] } } } { name: "data", type: "restBuffer" }
]}, ]}
explosion: {id: 0x27, fields: [ explosion: {id: 0x27, fields: [
{ name: "x", type: "float" }, { name: "x", type: "float" },
{ name: "y", type: "float" }, { name: "y", type: "float" },
@ -428,10 +425,31 @@ var packets = {
{ name: "text3", type: "string" }, { name: "text3", type: "string" },
{ name: "text4", type: "string" } { name: "text4", type: "string" }
]}, ]},
map: {id: 0x34, fields: [ /* TODO: No clue how to do this */ map: {id: 0x34, fields: [
{ name: "itemDamage", type: "varint" }, { name: "itemDamage", type: "varint" },
{ name: "dataLength", type: "count", typeArgs: { type: "short", countFor: "data" } }, { name: "scale", type: "byte" },
{ name: "data", type: "buffer", typeArgs: { count: "dataLength" } }, { name: "iconLength", type: "count", typeArgs: { type: "varint", countFor: "icons" } },
{ name: "icons", type: "array", typeArgs: { count: "iconLength", type: "container", typeArgs: { fields: [
{ name: "directionAndType", type: "byte" }, // Yeah... that will do
{ name: "x", type: "byte" },
{ name: "y", type: "byte" }
]}}},
{ name: "columns", type: "byte" },
{ name: "rows", type: "byte", condition: function(field_values) {
return field_values["columns"] !== 0;
}},
{ name: "x", type: "byte", condition: function(field_values) {
return field_values["columns"] !== 0;
}},
{ name: "y", type: "byte", condition: function(field_values) {
return field_values["columns"] !== 0;
}},
{ name: "dataLength", type: "count", typeArgs: { countFor: "data", type: "varint" }, condition: function(field_values) {
return field_values["columns"] !== 0;
}},
{ name: "data", type: "buffer", typeArgs: { count: "dataLength" }, condition: function(field_values) {
return field_values["columns"] !== 0;
}},
]}, ]},
tile_entity_data:{id: 0x35, fields: [ tile_entity_data:{id: 0x35, fields: [
{ name: "location", type: "position" }, { name: "location", type: "position" },
@ -451,10 +469,40 @@ var packets = {
]} ]}
}} }}
]}, ]},
player_info: {id: 0x38, fields: [ /* TODO: Again, no clue */ player_info: {id: 0x38, fields: [
{ name: "playerName", type: "string" }, { name: "action", type: "varint" },
{ name: "online", type: "bool" }, { name: "length", type: "count", typeArgs: { type: "varint", countFor: "data" }},
{ name: "ping", type: "short" } { name: "data", type: "array", typeArgs: { count: "length", type: "container", typeArgs: { fields: [
{ name: "UUID", type: "uuid" },
{ name: "name", type: "string", condition: function(field_values) {
return field_values["action"] === 0;
}},
{ name: "propertiesLength", type: "count", condition: function(field_values) {
return field_values["action"] === 0;
}, typeArgs: { countFor: "properties", type: "varint" }},
{ name: "properties", type: "array", condition: function(field_values) {
return field_values["action"] === 0;
}, typeArgs: { count: propertiesLength, type: "container", typeArgs: { fields: [
{ name: "name", type: "string" }
{ name: "value", type: "string" },
{ name: "isSigned", type: "bool" },
{ name: "signature", type: "string", condition: function(field_values) {
return field_values["isSigned"];
}}
]}},
{ name: "gamemode", type: "varint", condition: function(field_values) {
return field_values["action"] === 0 || field_values["action"] === 1;
}},
{ name: "ping", type: "varint", condition: function(field_values) {
return field_values["action"] === 0 || field_values["action"] === 2;
}},
{ name: "hasDisplayName", type: "bool", condition: function(field_values) {
return field_values["action"] === 0 || field_values["action"] === 3;
}},
{ name: "displayName", type: "string", condition: function(field_values) {
return field_values["hasDisplayName"]; // Returns false if there is no value "hasDisplayName"
}}
]}}}
]}, ]},
abilities: {id: 0x39, fields: [ abilities: {id: 0x39, fields: [
{ name: "flags", type: "byte" }, { name: "flags", type: "byte" },
@ -573,7 +621,7 @@ var packets = {
return field_values['action'] == 0 || field_values['action'] == 1; return field_values['action'] == 0 || field_values['action'] == 1;
} }, } },
{ name: "fadeIn", type: "int", condition: function(field_values) { { name: "fadeIn", type: "int", condition: function(field_values) {
return field_values['action'] == 0 || field_values['action'] == 1; return field_values['action'] == 2;
} }, } },
{ name: "stay", type: "int", condition: function(field_values) { { name: "stay", type: "int", condition: function(field_values) {
return field_values['action'] == 2; return field_values['action'] == 2;
@ -595,7 +643,7 @@ var packets = {
]}, ]},
update_entity_nbt: { id: 0x49, fields: [ update_entity_nbt: { id: 0x49, fields: [
{ name: "entityId", type: "varint" }, { name: "entityId", type: "varint" },
{ name: "tag", type: "string"} /* TODO: Should be of type "NBT Tag" */ { name: "tag", type: "restBuffer"}
]} ]}
}, },
toServer: { toServer: {
@ -786,6 +834,7 @@ var types = {
'container': [readContainer, writeContainer, sizeOfContainer], 'container': [readContainer, writeContainer, sizeOfContainer],
'array': [readArray, writeArray, sizeOfArray], 'array': [readArray, writeArray, sizeOfArray],
'buffer': [readBuffer, writeBuffer, sizeOfBuffer], 'buffer': [readBuffer, writeBuffer, sizeOfBuffer],
'restBuffer': [readRestBuffer, writeRestBuffer, sizeOfRestBuffer],
'count': [readCount, writeCount, sizeOfCount], 'count': [readCount, writeCount, sizeOfCount],
// TODO : remove type-specific, replace with generic containers and arrays. // TODO : remove type-specific, replace with generic containers and arrays.
'slot': [readSlot, writeSlot, sizeOfSlot], 'slot': [readSlot, writeSlot, sizeOfSlot],
@ -1213,6 +1262,16 @@ function sizeOfBuffer(value) {
return value.length; return value.length;
} }
function readRestBuffer(buffer, offset, typeArgs, rootNode) {
return {
value: buffer.slice(offset),
size: buffer.length - offset
};
}
var writeRestBuffer = writeBuffer;
var sizeOfRestBuffer = sizeOfBuffer;
function readArray(buffer, offset, typeArgs, rootNode) { function readArray(buffer, offset, typeArgs, rootNode) {
var results = { var results = {
value: [], value: [],