parser recognizes map chunk bulk

This commit is contained in:
Andrew Kelley 2013-01-01 05:48:18 -05:00
parent d501a5a7eb
commit c51cb26769
2 changed files with 67 additions and 0 deletions

View File

@ -78,8 +78,55 @@ var readers = {
'double': readDouble, 'double': readDouble,
'float': readFloat, 'float': readFloat,
'slotArray': readSlotArray, 'slotArray': readSlotArray,
'mapChunkBulk': readMapChunkBulk,
}; };
function readMapChunkBulk (buffer, offset) {
var cursor = offset + 6;
if (cursor > buffer.length) return null;
var chunkCount = buffer.readInt16BE(buffer, offset);
var dataSize = buffer.readInt32BE(buffer, offset + 2);
var endCursor = cursor + 1 + dataSize + 12 * chunkCount;
if (endCursor > buffer.length) return null;
var skyLightSent = !!buffer.readInt8(buffer, cursor);
cursor += 1;
var compressedChunkDataEnd = cursor + dataSize;
var compressedChunkData = buffer.slice(cursor, compressedChunkDataEnd);
cursor = compressedChunkDataEnd;
var meta = [];
var i, chunkX, chunkZ, primaryBitMap, addBitMap;
for (i = 0; i < chunkCount; ++i) {
chunkX = buffer.readInt32BE(buffer, cursor);
cursor += 4;
chunkZ = buffer.readInt32BE(buffer, cursor);
cursor += 4;
primaryBitMap = buffer.readUInt16BE(buffer, cursor);
cursor += 2;
addBitMap = buffer.readUInt16BE(buffer, cursor);
cursor += 2;
meta.push({
chunkX: chunkX,
chunkZ: chunkZ,
primaryBitMap: primaryBitMap,
addBitMap: addBitMap,
});
}
return {
value: {
skyLightSent: skyLightSent,
compressedChunkData: compressedChunkData,
meta: meta,
},
size: endCursor - offset,
};
}
function readString (buffer, offset) { function readString (buffer, offset) {
var results = readShort(buffer, offset); var results = readShort(buffer, offset);
if (! results) return null; if (! results) return null;

View File

@ -133,6 +133,26 @@
"type": "short" "type": "short"
} }
], ],
"56": [
{
"name": "dummy",
"type": "mapChunkBulk"
}
],
"103": [
{
"name": "windowId",
"type": "byte"
},
{
"name": "slotId",
"type": "short"
},
{
"name": "slot",
"type": "slot"
}
],
"104": [ "104": [
{ {
"name": "windowId", "name": "windowId",