mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-09-28 13:45:37 -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 = {
|
var writers = {
|
||||||
'int': IntWriter,
|
'int': IntWriter,
|
||||||
|
'short': ShortWriter,
|
||||||
'byte': ByteWriter,
|
'byte': ByteWriter,
|
||||||
'ubyte': UByteWriter,
|
'ubyte': UByteWriter,
|
||||||
'string': StringWriter,
|
'string': StringWriter,
|
||||||
'byteArray': ByteArrayWriter,
|
'byteArray': ByteArrayWriter,
|
||||||
|
'bool': BoolWriter,
|
||||||
|
'double': DoubleWriter,
|
||||||
|
'float': FloatWriter,
|
||||||
|
'slot': SlotWriter,
|
||||||
};
|
};
|
||||||
|
|
||||||
var readers = {
|
var readers = {
|
||||||
@ -98,8 +103,8 @@ function readIntArray(buffer, offset) {
|
|||||||
var count = results.value;
|
var count = results.value;
|
||||||
var cursor = offset + results.size;
|
var cursor = offset + results.size;
|
||||||
|
|
||||||
var endCursor = cursor + 4 * count;
|
var cursorEnd = cursor + 4 * count;
|
||||||
if (endCursor > buffer.length) return null;
|
if (cursorEnd > buffer.length) return null;
|
||||||
var array = [];
|
var array = [];
|
||||||
for (var i = 0; i < count; ++i) {
|
for (var i = 0; i < count; ++i) {
|
||||||
array.push(buffer.readInt32BE(cursor));
|
array.push(buffer.readInt32BE(cursor));
|
||||||
@ -108,7 +113,7 @@ function readIntArray(buffer, offset) {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
value: array,
|
value: array,
|
||||||
size: endCursor - offset,
|
size: cursorEnd - offset,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,8 +238,8 @@ function readMapChunkBulk (buffer, offset) {
|
|||||||
var dataSize = buffer.readInt32BE(offset + 2);
|
var dataSize = buffer.readInt32BE(offset + 2);
|
||||||
var skyLightSent = !!buffer.readInt8(offset + 6);
|
var skyLightSent = !!buffer.readInt8(offset + 6);
|
||||||
|
|
||||||
var endCursor = cursor + dataSize + 12 * chunkCount;
|
var cursorEnd = cursor + dataSize + 12 * chunkCount;
|
||||||
if (endCursor > buffer.length) return null;
|
if (cursorEnd > buffer.length) return null;
|
||||||
|
|
||||||
var compressedChunkDataEnd = cursor + dataSize;
|
var compressedChunkDataEnd = cursor + dataSize;
|
||||||
var compressedChunkData = buffer.slice(cursor, compressedChunkDataEnd);
|
var compressedChunkData = buffer.slice(cursor, compressedChunkDataEnd);
|
||||||
@ -266,7 +271,7 @@ function readMapChunkBulk (buffer, offset) {
|
|||||||
compressedChunkData: compressedChunkData,
|
compressedChunkData: compressedChunkData,
|
||||||
meta: meta,
|
meta: meta,
|
||||||
},
|
},
|
||||||
size: endCursor - offset,
|
size: cursorEnd - offset,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,28 +453,18 @@ function readSlot(buffer, offset) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
results = readByte(buffer, cursor);
|
var cursorEnd = cursor + 5;
|
||||||
if (! results) return null;
|
if (cursorEnd > buffer.length) return null;
|
||||||
var itemCount = results.value;
|
var itemCount = buffer.readInt8(cursor);
|
||||||
cursor += results.size;
|
var itemDamage = buffer.readInt16BE(cursor + 1);
|
||||||
|
var nbtDataSize = buffer.readInt16BE(cursor + 3);
|
||||||
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;
|
|
||||||
|
|
||||||
if (nbtDataSize === -1) nbtDataSize = 0;
|
if (nbtDataSize === -1) nbtDataSize = 0;
|
||||||
var nbtDataEnd = cursor + nbtDataSize;
|
var nbtDataEnd = cursorEnd + nbtDataSize;
|
||||||
var nbtData = buffer.slice(cursor, nbtDataEnd);
|
var nbtData = buffer.slice(cursorEnd, nbtDataEnd);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
value: {
|
value: {
|
||||||
blockId: blockId,
|
id: blockId,
|
||||||
itemCount: itemCount,
|
itemCount: itemCount,
|
||||||
itemDamage: itemDamage,
|
itemDamage: itemDamage,
|
||||||
nbtData: nbtData,
|
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) {
|
function StringWriter(value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.encoded = toUcs2.convert(value);
|
this.encoded = toUcs2.convert(value);
|
||||||
@ -509,6 +520,15 @@ ByteWriter.prototype.write = function(buffer, offset) {
|
|||||||
buffer.writeInt8(this.value, 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) {
|
function UByteWriter(value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.size = 1;
|
this.size = 1;
|
||||||
@ -518,6 +538,33 @@ UByteWriter.prototype.write = function(buffer, offset) {
|
|||||||
buffer.writeUInt8(this.value, 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) {
|
function IntWriter(value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.size = 4;
|
this.size = 4;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user