mirror of
https://github.com/PrismarineJS/node-minecraft-protocol.git
synced 2025-06-27 13:30:21 -04:00
all writers finished and tested. closes #15
This commit is contained in:
parent
817fb9b51e
commit
c03ac963d9
3 changed files with 192 additions and 31 deletions
lib
|
@ -492,11 +492,65 @@ SlotArrayWriter.prototype.write = function(buffer, offset) {
|
|||
});
|
||||
}
|
||||
|
||||
function EntityMetadataWriter(value) {
|
||||
var entityMetadataTypes = {
|
||||
0: 'byte',
|
||||
1: 'short',
|
||||
2: 'int',
|
||||
3: 'float',
|
||||
4: 'string',
|
||||
5: 'slot',
|
||||
6: 'intVector',
|
||||
};
|
||||
|
||||
// maps string type name to number
|
||||
var entityMetadataTypeBytes = {};
|
||||
for (var n in entityMetadataTypes) {
|
||||
entityMetadataTypeBytes[entityMetadataTypes[n]] = n;
|
||||
}
|
||||
|
||||
EntityMetadataWriter.prototype.write = function() {
|
||||
function EntityMetadataWriter(value) {
|
||||
this.value = [];
|
||||
this.size = 1;
|
||||
value.forEach(function(item) {
|
||||
this.size += 1;
|
||||
var Writer = types[item.type][1];
|
||||
assert.ok(Writer, "missing writer for data type " + item.type);
|
||||
var writer = new Writer(item.value);
|
||||
this.size += writer.size;
|
||||
this.value.push({
|
||||
writer: writer,
|
||||
key: item.key,
|
||||
type: entityMetadataTypeBytes[item.type],
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
EntityMetadataWriter.prototype.write = function(buffer, offset) {
|
||||
this.value.forEach(function(item) {
|
||||
var headerByte = (item.type << 5) & item.key;
|
||||
buffer.write(headerByte, offset);
|
||||
offset += 1;
|
||||
item.writer.write(buffer, offset);
|
||||
offset += item.writer.size;
|
||||
});
|
||||
buffer.writeUInt8(127, offset);
|
||||
}
|
||||
|
||||
function ObjectDataWriter(value) {
|
||||
this.value = value;
|
||||
this.size = value === 0 ? 4 : 10;
|
||||
}
|
||||
|
||||
ObjectDataWriter.prototype.write = function(buffer, offset) {
|
||||
buffer.writeInt32BE(this.value.intField, offset);
|
||||
if (this.value.intField === 0) return;
|
||||
offset += 4;
|
||||
|
||||
buffer.writeInt16BE(this.value.velocityX, offset);
|
||||
offset += 2;
|
||||
buffer.writeInt16BE(this.value.velocityY, offset);
|
||||
offset += 2;
|
||||
buffer.writeInt16BE(this.value.velocityZ, offset);
|
||||
}
|
||||
|
||||
function MapChunkBulkWriter(value) {
|
||||
|
@ -529,14 +583,6 @@ MapChunkBulkWriter.prototype.write = function(buffer, offset) {
|
|||
}
|
||||
}
|
||||
|
||||
function ObjectDataWriter(value) {
|
||||
|
||||
}
|
||||
|
||||
ObjectDataWriter.prototype.write = function() {
|
||||
|
||||
}
|
||||
|
||||
function IntArray8Writer(value) {
|
||||
this.value = value;
|
||||
this.size = 1 + 4 * value.length;
|
||||
|
@ -592,16 +638,6 @@ ByteVectorArrayWriter.prototype.write = function(buffer, offset) {
|
|||
});
|
||||
}
|
||||
|
||||
var entityMetadataReaders = {
|
||||
0: readByte,
|
||||
1: readShort,
|
||||
2: readInt,
|
||||
3: readFloat,
|
||||
4: readString,
|
||||
5: readSlot,
|
||||
6: readIntVector,
|
||||
};
|
||||
|
||||
function readIntArray8(buffer, offset) {
|
||||
var results = readByte(buffer, offset);
|
||||
if (! results) return null;
|
||||
|
@ -681,7 +717,7 @@ function readEntityMetadata(buffer, offset) {
|
|||
if (item === 0x7f) break;
|
||||
key = item & 0x1f;
|
||||
type = item >> 5;
|
||||
reader = entityMetadataReaders[type];
|
||||
reader = types[entityMetadataTypes[type]][0];
|
||||
assert.ok(reader, "missing reader for entity metadata type " + type);
|
||||
results = reader(buffer, cursor);
|
||||
if (! results) return null;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue