From ea62fdc67033697083a7fd166ebbc400fcbeaf4b Mon Sep 17 00:00:00 2001 From: roblabla Date: Mon, 23 Mar 2015 12:38:31 +0000 Subject: [PATCH] Fix particle packet --- src/protocol.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/protocol.js b/src/protocol.js index 80de4ee..48c2c0c 100644 --- a/src/protocol.js +++ b/src/protocol.js @@ -379,8 +379,15 @@ var packets = { { name: "offsetY", type: "float" }, { name: "offsetZ", type: "float" }, { name: "particleData", type: "float" }, - { name: "particles", type: "count", typeArgs: { countFor: "data", type: "int" } }, - { name: "data", type: "array", typeArgs: { count: "particles", type: "varint" } } + { name: "particles", type: "int" }, + { name: "data", type: "array", typeArgs: { count: function(fields) { + if (fields.particleId === 36) + return 2; + else if (fields.particleId === 37 || fields.particleId === 38) + return 1; + else + return 0; + }, type: "varint" } } ]}, game_state_change: {id: 0x2b, fields: [ { name: "reason", type: "ubyte" }, @@ -1348,7 +1355,11 @@ function readArray(buffer, offset, typeArgs, rootNode) { value: [], size: 0 } - var count = getField(typeArgs.count, rootNode); + var count; + if (typeof typeArgs.count === "function") + count = typeArgs.count(rootNode); + else + count = getField(typeArgs.count, rootNode); for (var i = 0; i < count; i++) { var readResults = read(buffer, offset, { type: typeArgs.type, typeArgs: typeArgs.typeArgs }, rootNode); results.size += readResults.size;