diff --git a/gulpfile.js b/gulpfile.js index 2a84d79..48595f8 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,6 +14,13 @@ gulp.task('compile', function() { .pipe(babel(options)) .pipe(sourcemaps.write('maps/')) .pipe(gulp.dest('dist/')); + + gulp + .src('src/datatypes/*.js') + .pipe(sourcemaps.init()) + .pipe(babel(options)) + .pipe(sourcemaps.write('maps/')) + .pipe(gulp.dest('dist/datatypes/')); }); gulp.task('watch', function() { diff --git a/src/datatypes/numeric.js b/src/datatypes/numeric.js new file mode 100644 index 0000000..372abd6 --- /dev/null +++ b/src/datatypes/numeric.js @@ -0,0 +1,16 @@ +module.exports={'byte': [readByte, writeByte, 1]}; + +function readByte(buffer, offset) { + if (offset + 1 > buffer.length) return null; + var value = buffer.readInt8(offset); + return { + value: value, + size: 1, + }; +} + + +function writeByte(value, buffer, offset) { + buffer.writeInt8(value, offset); + return offset + 1; +} diff --git a/src/protocol.js b/src/protocol.js index 5444447..d3cddb4 100644 --- a/src/protocol.js +++ b/src/protocol.js @@ -3,6 +3,8 @@ var util = require('util'); var zlib = require('zlib'); var nbt = require('prismarine-nbt'); +var getField= require("./utils").getField; + var STRING_MAX_LENGTH = 240; var SRV_STRING_MAX_LENGTH = 32767; @@ -50,10 +52,10 @@ var packetStates = {toClient: {}, toServer: {}}; } })(); - +var numeric=require("./datatypes/numeric"); var types = { - 'byte': [readByte, writeByte, 1], + 'byte': numeric.byte, 'ubyte': [readUByte, writeUByte, 1], 'short': [readShort, writeShort, 2], 'ushort': [readUShort, writeUShort, 2], @@ -314,14 +316,7 @@ function readLong(buffer, offset) { }; } -function readByte(buffer, offset) { - if (offset + 1 > buffer.length) return null; - var value = buffer.readInt8(offset); - return { - value: value, - size: 1, - }; -} + function readUByte(buffer, offset) { if (offset + 1 > buffer.length) return null; @@ -448,11 +443,6 @@ function writeString(value, buffer, offset) { return offset + length; } -function writeByte(value, buffer, offset) { - buffer.writeInt8(value, offset); - return offset + 1; -} - function writeBool(value, buffer, offset) { buffer.writeInt8(+value, offset); return offset + 1; @@ -606,6 +596,7 @@ function readRestBuffer(buffer, offset, typeArgs, rootNode) { }; } +// begin array function evalCount(count,fields) { if(fields[count["field"]] in count["map"]) @@ -623,7 +614,7 @@ function readArray(buffer, offset, typeArgs, rootNode) { count = evalCount(typeArgs.count,rootNode); } else - count = getField(typeArgs.count, rootNode); + 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; @@ -647,15 +638,7 @@ function sizeOfArray(value, typeArgs, rootNode) { } return size; } - -function getField(countField, rootNode) { - var countFieldArr = countField.split("."); - var count = rootNode; - for (var index = 0; index < countFieldArr.length; index++) { - count = count[countFieldArr[index]]; - } - return count; -} +// end array function readCount(buffer, offset, typeArgs, rootNode) { return read(buffer, offset, { type: typeArgs.type }, rootNode); diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..f92ef5a --- /dev/null +++ b/src/utils.js @@ -0,0 +1,10 @@ +module.exports= {getField:getField}; + +function getField(countField, rootNode) { + var countFieldArr = countField.split("."); + var count = rootNode; + for (var index = 0; index < countFieldArr.length; index++) { + count = count[countFieldArr[index]]; + } + return count; +}