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: "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: "chunkColumnCount", type: "count", typeArgs: { type: "varint", countFor: "meta" } },
{ name: "dataLength", type: "count", typeArgs: { type: "int", countFor: "chunkData" } },
{ name: "chunkData", type: "buffer", typeArgs: { count: "dataLength" } },
{ name: "meta", type: "array", typeArgs: { count: "chunkColumnCount",
type: "container", typeArgs: { fields: [
{ name: "meta", type: "array", typeArgs: { count: "chunkColumnCount", type: "container", typeArgs: { fields: [
{ name: "x", type: "int" },
{ name: "z", type: "int" },
{ name: "bitMap", type: "ushort" },
{ name: "addBitMap", type: "ushort" }
] } } }
]},
]}}},
{ name: "data", type: "restBuffer" }
]}
explosion: {id: 0x27, fields: [
{ name: "x", type: "float" },
{ name: "y", type: "float" },
@ -428,10 +425,31 @@ var packets = {
{ name: "text3", 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: "dataLength", type: "count", typeArgs: { type: "short", countFor: "data" } },
{ name: "data", type: "buffer", typeArgs: { count: "dataLength" } },
{ name: "scale", type: "byte" },
{ 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: [
{ name: "location", type: "position" },
@ -451,10 +469,40 @@ var packets = {
]}
}}
]},
player_info: {id: 0x38, fields: [ /* TODO: Again, no clue */
{ name: "playerName", type: "string" },
{ name: "online", type: "bool" },
{ name: "ping", type: "short" }
player_info: {id: 0x38, fields: [
{ name: "action", type: "varint" },
{ name: "length", type: "count", typeArgs: { type: "varint", countFor: "data" }},
{ 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: [
{ name: "flags", type: "byte" },
@ -573,7 +621,7 @@ var packets = {
return field_values['action'] == 0 || field_values['action'] == 1;
} },
{ 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) {
return field_values['action'] == 2;
@ -595,7 +643,7 @@ var packets = {
]},
update_entity_nbt: { id: 0x49, fields: [
{ name: "entityId", type: "varint" },
{ name: "tag", type: "string"} /* TODO: Should be of type "NBT Tag" */
{ name: "tag", type: "restBuffer"}
]}
},
toServer: {
@ -786,6 +834,7 @@ var types = {
'container': [readContainer, writeContainer, sizeOfContainer],
'array': [readArray, writeArray, sizeOfArray],
'buffer': [readBuffer, writeBuffer, sizeOfBuffer],
'restBuffer': [readRestBuffer, writeRestBuffer, sizeOfRestBuffer],
'count': [readCount, writeCount, sizeOfCount],
// TODO : remove type-specific, replace with generic containers and arrays.
'slot': [readSlot, writeSlot, sizeOfSlot],
@ -1213,6 +1262,16 @@ function sizeOfBuffer(value) {
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) {
var results = {
value: [],