mirror of
https://github.com/PrismarineJS/node-minecraft-protocol.git
synced 2024-11-14 19:04:59 -05:00
packet 0x2c: writing fixed, UUID format simplified
This commit is contained in:
parent
634ad002f4
commit
c0a66738a3
3 changed files with 29 additions and 13 deletions
|
@ -168,7 +168,7 @@ Where elementList is an array with the following structure:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
[
|
[
|
||||||
{ uuid_msb: 123, uuid_lsb: 456, amount: 0.5, operation: 1 },
|
{ uuid: [ 123, 456, 78, 90 ], amount: 0.5, operation: 1 },
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
|
@ -534,6 +534,7 @@ var types = {
|
||||||
'byteVector': [readByteVector, writeByteVector, 3],
|
'byteVector': [readByteVector, writeByteVector, 3],
|
||||||
'byteVectorArray': [readByteVectorArray, writeByteVectorArray, sizeOfByteVectorArray],
|
'byteVectorArray': [readByteVectorArray, writeByteVectorArray, sizeOfByteVectorArray],
|
||||||
'stringArray': [readStringArray, writeStringArray, sizeOfStringArray],
|
'stringArray': [readStringArray, writeStringArray, sizeOfStringArray],
|
||||||
|
'UUID': [readUUID, writeUUID, 16],
|
||||||
'propertyArray': [readPropertyArray, writePropertyArray, sizeOfPropertyArray]
|
'propertyArray': [readPropertyArray, writePropertyArray, sizeOfPropertyArray]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -730,14 +731,22 @@ function writeStringArray(value, buffer, offset) {
|
||||||
function sizeOfPropertyArray(value) {
|
function sizeOfPropertyArray(value) {
|
||||||
var size = 4;
|
var size = 4;
|
||||||
for (var i = 0; i < value.length; ++i) {
|
for (var i = 0; i < value.length; ++i) {
|
||||||
size += sizeOfString(value[i].key) + types['double'][2];
|
size += sizeOfString(value[i].key) + types['double'][2] + types['short'][2];
|
||||||
for (var j = 0; j < value[i].elementList.length; j++) {
|
for (var j = 0; j < value[i].elementList.length; j++) {
|
||||||
size += types['long'][2] + types['long'][2] + types['double'][2] + types['byte'][2];
|
size += types['UUID'][2] + types['double'][2] + types['byte'][2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function writeUUID(value, buffer, offset) {
|
||||||
|
buffer.writeInt32BE(value[0], offset);
|
||||||
|
buffer.writeInt32BE(value[1], offset + 4);
|
||||||
|
buffer.writeInt32BE(value[2], offset + 8);
|
||||||
|
buffer.writeInt32BE(value[3], offset + 12);
|
||||||
|
return offset + 16;
|
||||||
|
}
|
||||||
|
|
||||||
function writePropertyArray(value, buffer, offset) {
|
function writePropertyArray(value, buffer, offset) {
|
||||||
buffer.writeInt32BE(value.length, offset);
|
buffer.writeInt32BE(value.length, offset);
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
@ -746,8 +755,7 @@ function writePropertyArray(value, buffer, offset) {
|
||||||
offset = writeDouble(value[i].value, buffer, offset);
|
offset = writeDouble(value[i].value, buffer, offset);
|
||||||
offset = writeShort(value[i].elementList.length, buffer, offset);
|
offset = writeShort(value[i].elementList.length, buffer, offset);
|
||||||
for (var j = 0; j < value[i].elementList.length; j++) {
|
for (var j = 0; j < value[i].elementList.length; j++) {
|
||||||
offset = writeLong(value[i].elementList[j].uuid_msb, buffer, offset);
|
offset = writeUUID(value[i].elementList[j].uuid, buffer, offset);
|
||||||
offset = writeLong(value[i].elementList[j].uuid_lsb, buffer, offset);
|
|
||||||
offset = writeDouble(value[i].elementList[j].amount, buffer, offset);
|
offset = writeDouble(value[i].elementList[j].amount, buffer, offset);
|
||||||
offset = writeByte(value[i].elementList[j].operation, buffer, offset);
|
offset = writeByte(value[i].elementList[j].operation, buffer, offset);
|
||||||
}
|
}
|
||||||
|
@ -1058,6 +1066,19 @@ function readStringArray (buffer, offset) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function readUUID(buffer, offset) {
|
||||||
|
if (offset + 16 > buffer.length) return null;
|
||||||
|
return {
|
||||||
|
value: [
|
||||||
|
buffer.readInt32BE(offset),
|
||||||
|
buffer.readInt32BE(offset + 4),
|
||||||
|
buffer.readInt32BE(offset + 8),
|
||||||
|
buffer.readInt32BE(offset + 12),
|
||||||
|
],
|
||||||
|
size: 16,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function readPropertyArray (buffer, offset) {
|
function readPropertyArray (buffer, offset) {
|
||||||
var results = readInt(buffer, offset);
|
var results = readInt(buffer, offset);
|
||||||
if (! results) return null;
|
if (! results) return null;
|
||||||
|
@ -1088,14 +1109,9 @@ function readPropertyArray (buffer, offset) {
|
||||||
for (var j = 0; j < elementListLength ; j++) {
|
for (var j = 0; j < elementListLength ; j++) {
|
||||||
property.elementList[j] = {}
|
property.elementList[j] = {}
|
||||||
|
|
||||||
results = readLong(buffer, cursor);
|
results = readUUID(buffer, cursor);
|
||||||
if (! results) return null;
|
if (! results) return null;
|
||||||
property.elementList[j].uuid_msb = results.value;
|
property.elementList[j].uuid = results.value;
|
||||||
cursor += results.size;
|
|
||||||
|
|
||||||
results = readLong(buffer, cursor);
|
|
||||||
if (! results) return null;
|
|
||||||
property.elementList[j].uuid_lsb = results.value;
|
|
||||||
cursor += results.size;
|
cursor += results.size;
|
||||||
|
|
||||||
results = readDouble(buffer, cursor);
|
results = readDouble(buffer, cursor);
|
||||||
|
|
|
@ -72,7 +72,7 @@ var values = {
|
||||||
nbtData: new Buffer(0),
|
nbtData: new Buffer(0),
|
||||||
}],
|
}],
|
||||||
'stringArray': ['hello', 'dude'],
|
'stringArray': ['hello', 'dude'],
|
||||||
'propertyArray': [{ key: 'generic.maxHealth', value: 1.5 }],
|
'propertyArray': [{ key: 'generic.maxHealth', value: 1.5, elementList: [ { uuid: [ 123, 456, 78, 90 ], amount: 0.5, operation: 1 } ] }],
|
||||||
'mapChunkBulk': {
|
'mapChunkBulk': {
|
||||||
skyLightSent: true,
|
skyLightSent: true,
|
||||||
compressedChunkData: new Buffer(1234),
|
compressedChunkData: new Buffer(1234),
|
||||||
|
|
Loading…
Reference in a new issue