bedrock-protocol/dist/datatypes/minecraft.js
2019-07-14 18:22:34 +02:00

139 lines
No EOL
3.1 KiB
JavaScript

'use strict';
var nbt = require('prismarine-nbt');
var UUID = require('uuid-1345');
function readUUID(buffer, offset) {
if (offset + 16 > buffer.length) throw new PartialReadError();
return {
value: UUID.stringify(buffer.slice(offset, 16 + offset)),
size: 16
};
}
function writeUUID(value, buffer, offset) {
var buf = UUID.parse(value);
buf.copy(buffer, offset);
return offset + 16;
}
function readNbt(buffer, offset) {
return nbt.protoLE.read(buffer, offset, "nbt");
}
function writeNbt(value, buffer, offset) {
return nbt.protoLE.write(value, buffer, offset, "nbt");
}
function sizeOfNbt(value) {
return nbt.protoLE.sizeOf(value, "nbt");
}
function readEntityMetadata(buffer, offset, _ref) {
var type = _ref.type;
var endVal = _ref.endVal;
var cursor = offset;
var metadata = [];
var item = undefined;
while (true) {
if (offset + 1 > buffer.length) throw new PartialReadError();
item = buffer.readUInt8(cursor);
if (item === endVal) {
return {
value: metadata,
size: cursor + 1 - offset
};
}
var results = this.read(buffer, cursor, type, {});
metadata.push(results.value);
cursor += results.size;
}
}
function writeEntityMetadata(value, buffer, offset, _ref2) {
var type = _ref2.type;
var endVal = _ref2.endVal;
var self = this;
value.forEach(function (item) {
offset = self.write(item, buffer, offset, type, {});
});
buffer.writeUInt8(endVal, offset);
return offset + 1;
}
function sizeOfEntityMetadata(value, _ref3) {
var type = _ref3.type;
var size = 1;
for (var i = 0; i < value.length; ++i) {
size += this.sizeOf(value[i], type, {});
}
return size;
}
function readIpAddress(buffer, offset) {
var address = buffer[offset] + '.' + buffer[offset + 1] + '.' + buffer[offset + 2] + '.' + buffer[offset + 3];
return {
size: 4,
value: address
};
}
function writeIpAddress(value, buffer, offset) {
var address = value.split('.');
address.forEach(function (b) {
buffer[offset] = parseInt(b);
offset++;
});
return offset;
}
function readEndOfArray(buffer, offset, typeArgs) {
var type = typeArgs.type;
var cursor = offset;
var elements = [];
while (cursor < buffer.length) {
var results = this.read(buffer, cursor, type, {});
elements.push(results.value);
cursor += results.size;
}
return {
value: elements,
size: cursor - offset
};
}
function writeEndOfArray(value, buffer, offset, typeArgs) {
var type = typeArgs.type;
var self = this;
value.forEach(function (item) {
offset = self.write(item, buffer, offset, type, {});
});
return offset;
}
function sizeOfEndOfArray(value, typeArgs) {
var type = typeArgs.type;
var size = 0;
for (var i = 0; i < value.length; ++i) {
size += this.sizeOf(value[i], type, {});
}
return size;
}
module.exports = {
'uuid': [readUUID, writeUUID, 16],
'nbt': [readNbt, writeNbt, sizeOfNbt],
'entityMetadataLoop': [readEntityMetadata, writeEntityMetadata, sizeOfEntityMetadata],
'ipAddress': [readIpAddress, writeIpAddress, 4],
'endOfArray': [readEndOfArray, writeEndOfArray, sizeOfEndOfArray]
};