From 8c02735af1fbe2b9b98e56824f838871ab2eb678 Mon Sep 17 00:00:00 2001 From: roblabla Date: Mon, 17 Oct 2016 17:03:31 +0200 Subject: [PATCH] Fix the REGISTER channel type --- src/client/pluginChannels.js | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/client/pluginChannels.js b/src/client/pluginChannels.js index d9c18f9..92500ae 100644 --- a/src/client/pluginChannels.js +++ b/src/client/pluginChannels.js @@ -7,12 +7,14 @@ module.exports = function(client, options) { var proto = new ProtoDef(); proto.addTypes(mcdata.protocol.types); proto.addTypes(minecraft); + proto.addTypes({'registerarr': [readDumbArr, writeDumbArr, sizeOfDumbArr]}); + client.registerChannel = registerChannel; client.unregisterChannel = unregisterChannel; client.writeChannel = writeChannel; - client.registerChannel("REGISTER",["string",[]]); - client.registerChannel("UNREGISTER",["string",[]]); + client.registerChannel("REGISTER",["registerarr",[]]); + client.registerChannel("UNREGISTER",["registerarr",[]]); function registerChannel(name, parser, custom) { @@ -57,5 +59,35 @@ module.exports = function(client, options) { data:proto.createPacketBuffer(channel,params) }); } + + function readDumbArr(buf, offset) { + var ret = { + value: [], + size: 0 + }; + let results; + while (offset < buf.length) { + if (buf.indexOf(0x0, offset) == -1) + results = this.read(buf, offset, "restBuffer", {}); + else + results = this.read(buf, offset, "cstring", {}); + ret.size += results.size; + ret.value.push(results.value.toString()); + offset += results.size; + } + return ret; + } + + function writeDumbArr(value, buf, offset) { + // TODO: Remove trailing \0 + value.forEach(function(v) { + offset += this.write(v, buf, offset, "cstring", {}); + }); + return offset; + } + + function sizeOfDumbArr(value) { + return value.reduce((acc, v) => acc + this.sizeOf(v, "cstring", {}), 0); + } };