mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-09-27 13:14:41 -04:00
all clent to server packets have supported data type writers
This commit is contained in:
parent
0d3d9d63a3
commit
1979ef3848
@ -61,10 +61,15 @@ Parser.prototype.writePacket = function(packetId, params) {
|
||||
|
||||
var writers = {
|
||||
'int': IntWriter,
|
||||
'short': ShortWriter,
|
||||
'byte': ByteWriter,
|
||||
'ubyte': UByteWriter,
|
||||
'string': StringWriter,
|
||||
'byteArray': ByteArrayWriter,
|
||||
'bool': BoolWriter,
|
||||
'double': DoubleWriter,
|
||||
'float': FloatWriter,
|
||||
'slot': SlotWriter,
|
||||
};
|
||||
|
||||
var readers = {
|
||||
@ -98,8 +103,8 @@ function readIntArray(buffer, offset) {
|
||||
var count = results.value;
|
||||
var cursor = offset + results.size;
|
||||
|
||||
var endCursor = cursor + 4 * count;
|
||||
if (endCursor > buffer.length) return null;
|
||||
var cursorEnd = cursor + 4 * count;
|
||||
if (cursorEnd > buffer.length) return null;
|
||||
var array = [];
|
||||
for (var i = 0; i < count; ++i) {
|
||||
array.push(buffer.readInt32BE(cursor));
|
||||
@ -108,7 +113,7 @@ function readIntArray(buffer, offset) {
|
||||
|
||||
return {
|
||||
value: array,
|
||||
size: endCursor - offset,
|
||||
size: cursorEnd - offset,
|
||||
};
|
||||
}
|
||||
|
||||
@ -233,8 +238,8 @@ function readMapChunkBulk (buffer, offset) {
|
||||
var dataSize = buffer.readInt32BE(offset + 2);
|
||||
var skyLightSent = !!buffer.readInt8(offset + 6);
|
||||
|
||||
var endCursor = cursor + dataSize + 12 * chunkCount;
|
||||
if (endCursor > buffer.length) return null;
|
||||
var cursorEnd = cursor + dataSize + 12 * chunkCount;
|
||||
if (cursorEnd > buffer.length) return null;
|
||||
|
||||
var compressedChunkDataEnd = cursor + dataSize;
|
||||
var compressedChunkData = buffer.slice(cursor, compressedChunkDataEnd);
|
||||
@ -266,7 +271,7 @@ function readMapChunkBulk (buffer, offset) {
|
||||
compressedChunkData: compressedChunkData,
|
||||
meta: meta,
|
||||
},
|
||||
size: endCursor - offset,
|
||||
size: cursorEnd - offset,
|
||||
};
|
||||
}
|
||||
|
||||
@ -448,28 +453,18 @@ function readSlot(buffer, offset) {
|
||||
};
|
||||
}
|
||||
|
||||
results = readByte(buffer, cursor);
|
||||
if (! results) return null;
|
||||
var itemCount = results.value;
|
||||
cursor += results.size;
|
||||
|
||||
results = readShort(buffer, cursor);
|
||||
if (! results) return null;
|
||||
var itemDamage = results.value;
|
||||
cursor += results.size;
|
||||
|
||||
results = readShort(buffer, cursor);
|
||||
if (! results) return null;
|
||||
var nbtDataSize = results.value;
|
||||
cursor += results.size;
|
||||
|
||||
var cursorEnd = cursor + 5;
|
||||
if (cursorEnd > buffer.length) return null;
|
||||
var itemCount = buffer.readInt8(cursor);
|
||||
var itemDamage = buffer.readInt16BE(cursor + 1);
|
||||
var nbtDataSize = buffer.readInt16BE(cursor + 3);
|
||||
if (nbtDataSize === -1) nbtDataSize = 0;
|
||||
var nbtDataEnd = cursor + nbtDataSize;
|
||||
var nbtData = buffer.slice(cursor, nbtDataEnd);
|
||||
var nbtDataEnd = cursorEnd + nbtDataSize;
|
||||
var nbtData = buffer.slice(cursorEnd, nbtDataEnd);
|
||||
|
||||
return {
|
||||
value: {
|
||||
blockId: blockId,
|
||||
id: blockId,
|
||||
itemCount: itemCount,
|
||||
itemDamage: itemDamage,
|
||||
nbtData: nbtData,
|
||||
@ -478,6 +473,22 @@ function readSlot(buffer, offset) {
|
||||
};
|
||||
}
|
||||
|
||||
function SlotWriter(value) {
|
||||
this.value = value;
|
||||
this.size = value.id === -1 ? 2 : 7 + this.value.nbtData.length;
|
||||
}
|
||||
|
||||
SlotWriter.prototype.write = function(buffer, offset) {
|
||||
buffer.writeInt16BE(this.value.id, offset);
|
||||
if (this.value.id === -1) return;
|
||||
buffer.writeInt8(this.value.itemCount, offset + 2);
|
||||
buffer.writeInt16BE(this.value.itemDamage, offset + 3);
|
||||
var nbtDataSize = this.value.nbtData.length;
|
||||
if (nbtDataSize === 0) nbtDataSize = -1; // I don't know wtf mojang smokes
|
||||
buffer.writeInt16BE(nbtDataSize, offset + 5);
|
||||
this.value.nbtData.copy(buffer, offset + 7);
|
||||
};
|
||||
|
||||
function StringWriter(value) {
|
||||
this.value = value;
|
||||
this.encoded = toUcs2.convert(value);
|
||||
@ -509,6 +520,15 @@ ByteWriter.prototype.write = function(buffer, offset) {
|
||||
buffer.writeInt8(this.value, offset);
|
||||
}
|
||||
|
||||
function BoolWriter(value) {
|
||||
this.value = value;
|
||||
this.size = 1;
|
||||
}
|
||||
|
||||
BoolWriter.prototype.write = function(buffer, offset) {
|
||||
buffer.writeInt8(this.value ? 1 : 0, offset);
|
||||
}
|
||||
|
||||
function UByteWriter(value) {
|
||||
this.value = value;
|
||||
this.size = 1;
|
||||
@ -518,6 +538,33 @@ UByteWriter.prototype.write = function(buffer, offset) {
|
||||
buffer.writeUInt8(this.value, offset);
|
||||
};
|
||||
|
||||
function FloatWriter(value) {
|
||||
this.value = value;
|
||||
this.size = 4;
|
||||
}
|
||||
|
||||
FloatWriter.prototype.write = function(buffer, offset) {
|
||||
buffer.writeFloatBE(this.value, offset);
|
||||
}
|
||||
|
||||
function DoubleWriter(value) {
|
||||
this.value = value;
|
||||
this.size = 8;
|
||||
}
|
||||
|
||||
DoubleWriter.prototype.write = function(buffer, offset) {
|
||||
buffer.writeDoubleBE(this.value, offset);
|
||||
}
|
||||
|
||||
function ShortWriter(value) {
|
||||
this.value = value;
|
||||
this.size = 2;
|
||||
}
|
||||
|
||||
ShortWriter.prototype.write = function(buffer, offset) {
|
||||
buffer.writeInt16BE(this.value, offset);
|
||||
}
|
||||
|
||||
function IntWriter(value) {
|
||||
this.value = value;
|
||||
this.size = 4;
|
||||
|
Loading…
x
Reference in New Issue
Block a user