metadata!

This commit is contained in:
Keegan 2016-03-06 11:59:26 -05:00
commit a6387f279e
2 changed files with 126 additions and 1 deletions

View file

@ -6,6 +6,93 @@
"countType":"short"
}
],
"entityMetadataItem": [
"switch",
{
"compareTo": "$compareTo",
"fields": {
"0": "i8",
"1": "i16",
"2": "i32",
"3": "f32",
"4": "string",
"5": "slot",
"6": [
"container",
[
{
"name": "x",
"type": "i32"
},
{
"name": "y",
"type": "i32"
},
{
"name": "z",
"type": "i32"
}
]
],
"7": [
"container",
[
{
"name": "pitch",
"type": "f32"
},
{
"name": "yaw",
"type": "f32"
},
{
"name": "roll",
"type": "f32"
}
]
],
"8": "i64"
}
}
],
"entityMetadata": [
"entityMetadataLoop",
{
"endVal": 127,
"type": [
"container",
[
{
"anon": true,
"type": [
"bitfield",
[
{
"name": "type",
"size": 3,
"signed": false
},
{
"name": "key",
"size": 5,
"signed": false
}
]
]
},
{
"name": "value",
"type": [
"entityMetadataItem",
{
"compareTo": "type"
}
]
}
]
]
}
],
"slot": [
"container",
[

View file

@ -27,7 +27,45 @@ function sizeOfNbt(value) {
return nbt.proto.sizeOf(value,"nbt");
}
function readEntityMetadata(buffer, offset, {type,endVal}) {
let cursor = offset;
const metadata = [];
let item;
while(true) {
if(offset+1>buffer.length)
throw new PartialReadError();
item = buffer.readUInt8(cursor);
if(item === endVal) {
return {
value: metadata,
size: cursor + 1 - offset
};
}
const results = this.read(buffer, cursor, type, {});
metadata.push(results.value);
cursor += results.size;
}
}
function writeEntityMetadata(value, buffer, offset, {type,endVal}) {
const self = this;
value.forEach(function(item) {
offset = self.write(item, buffer, offset, type, {});
});
buffer.writeUInt8(endVal, offset);
return offset + 1;
}
function sizeOfEntityMetadata(value, {type}) {
let size = 1;
for(let i = 0; i < value.length; ++i) {
size += this.sizeOf(value[i], type, {});
}
return size;
}
module.exports = {
'uuid': [readUUID, writeUUID, 16],
'nbt': [readNbt, writeNbt, sizeOfNbt]
'nbt': [readNbt, writeNbt, sizeOfNbt],
'entityMetadataLoop': [readEntityMetadata, writeEntityMetadata, sizeOfEntityMetadata]
};