metadata!
This commit is contained in:
parent
b860063e36
commit
a6387f279e
2 changed files with 126 additions and 1 deletions
|
|
@ -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",
|
||||
[
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue