more packets parsed

This commit is contained in:
Andrew Kelley 2013-01-01 07:01:14 -05:00
parent 3804c5cea6
commit 4523996067
2 changed files with 165 additions and 0 deletions

View File

@ -79,8 +79,89 @@ var readers = {
'float': readFloat,
'slotArray': readSlotArray,
'mapChunkBulk': readMapChunkBulk,
'entityMetadata': readEntityMetadata,
'objectData': readObjectData,
};
var entityMetadataReaders = {
0: readByte,
1: readShort,
2: readInt,
3: readFloat,
4: readString,
5: readSlot,
6: readVector,
};
function readVector(buffer, offset) {
if (offset + 12 > buffer.length) return null;
return {
value: {
x: buffer.readInt32BE(offset),
y: buffer.readInt32BE(offset + 4),
z: buffer.readInt32BE(offset + 8),
},
size: 12,
};
}
function readEntityMetadata(buffer, offset) {
var cursor = offset;
var metadata = {};
var item, key, type, results;
while (true) {
if (cursor + 1 > buffer.length) return null;
item = buffer.readUInt8(cursor);
cursor += 1;
if (item === 0x7f) break;
key = item & 0x1f;
type = item >> 5;
reader = entityMetadataReaders[type];
assert.ok(reader, "missing reader for entity metadata type " + type);
results = reader(buffer, cursor);
if (! results) return null;
metadata[key] = results.value;
cursor += results.size;
}
return {
value: metadata,
size: cursor - offset,
};
}
function readObjectData(buffer, offset) {
var cursor = offset + 4;
if (cursor > buffer.length) return null;
var intField = buffer.readInt32BE(offset);
if (intField === 0) {
return {
value: {
intField: intField,
},
size: cursor - offset,
};
}
if (cursor + 6 > buffer.length) return null;
var velocityX = buffer.readInt16BE(cursor);
cursor += 2;
var velocityY = buffer.readInt16BE(cursor);
cursor += 2;
var velocityZ = buffer.readInt16BE(cursor);
cursor += 2;
return {
value: {
intField: intField,
velocityX: velocityX,
velocityY: velocityY,
velocityZ: velocityZ,
},
size: cursor - offset,
};
}
function readMapChunkBulk (buffer, offset) {
var cursor = offset + 7;
if (cursor > buffer.length) return null;

View File

@ -133,6 +133,90 @@
"type": "short"
}
],
"23": [
{
"name": "eid",
"type": "int"
},
{
"name": "type",
"type": "byte"
},
{
"name": "x",
"type": "int"
},
{
"name": "y",
"type": "int"
},
{
"name": "z",
"type": "int"
},
{
"name": "yaw",
"type": "byte"
},
{
"name": "pitch",
"type": "byte"
},
{
"name": "objectData",
"type": "objectData"
}
],
"24": [
{
"name": "eid",
"type": "int"
},
{
"name": "type",
"type": "byte"
},
{
"name": "x",
"type": "int"
},
{
"name": "y",
"type": "int"
},
{
"name": "z",
"type": "int"
},
{
"name": "yaw",
"type": "byte"
},
{
"name": "pitch",
"type": "byte"
},
{
"name": "headYaw",
"type": "byte"
},
{
"name": "velocityX",
"type": "short"
},
{
"name": "velocityY",
"type": "short"
},
{
"name": "velocityZ",
"type": "short"
},
{
"name": "metadata",
"type": "entityMetadata"
}
],
"56": [
{
"name": "data",