diff --git a/server/enums/Packet.ts b/server/enums/Packet.ts index 88e6b11..b5fa923 100644 --- a/server/enums/Packet.ts +++ b/server/enums/Packet.ts @@ -22,6 +22,7 @@ export enum Packet { EntityAction = 0x13, NamedEntitySpawn = 0x14, + EntityStatus = 0x26, EntityMetadata = 0x28, PreChunk = 0x32, diff --git a/server/packets/EntityStatus.ts b/server/packets/EntityStatus.ts new file mode 100644 index 0000000..ad6af51 --- /dev/null +++ b/server/packets/EntityStatus.ts @@ -0,0 +1,30 @@ +import { createWriter, IReader, Endian } from "bufferstuff"; +import { IPacket } from "./IPacket"; +import { Packet } from "../enums/Packet"; + +export class PacketEntityStatus implements IPacket { + public packetId = Packet.EntityStatus; + public entityId:number; + public status:number; + + public constructor(entityId?:number, status?:number) { + if (typeof(entityId) == "number" && typeof(status) === "number") { + this.entityId = entityId; + this.status = status; + } else { + this.entityId = Number.MIN_VALUE; + this.status = Number.MIN_VALUE; + } + } + + public readData(reader:IReader) { + this.entityId = reader.readInt(); + this.status = reader.readByte(); + + return this; + } + + public writeData() { + return createWriter(Endian.BE, 6).writeUByte(this.packetId).writeInt(this.entityId).writeByte(this.status).toBuffer(); + } +} \ No newline at end of file diff --git a/server/packets/MapChunk.ts b/server/packets/MapChunk.ts index c54c361..8bf1426 100644 --- a/server/packets/MapChunk.ts +++ b/server/packets/MapChunk.ts @@ -39,14 +39,40 @@ export class PacketMapChunk implements IPacket { fakeLighting.writeUByte(0xFF); }*/ - const data = createWriter(Endian.BE).writeBuffer(this.chunk.getBlockBuffer()).writeBuffer(this.chunk.getMetadataBuffer()).writeBuffer(this.chunk.blockLight.toBuffer()).writeBuffer(this.chunk.skyLight.toBuffer());//.writeBuffer(fakeLighting.toBuffer()).writeBuffer(fakeLighting.toBuffer()); + const data = createWriter(Endian.BE) + // Write Chunk Blocks + .writeBuffer(this.chunk.getBlockBuffer()) + // Write Chunk Blocks Metadata + .writeBuffer(this.chunk.getMetadataBuffer()) + // Write Chunk Block Light + .writeBuffer(this.chunk.blockLight.toBuffer()) + // Write Chunk Sky Light + .writeBuffer(this.chunk.skyLight.toBuffer()); deflate(data.toBuffer(), (err, data) => { if (err) { return reject(err); } - resolve(createWriter(Endian.BE, 18).writeUByte(this.packetId).writeInt(this.x << 4).writeShort(this.y).writeInt(this.z << 4).writeUByte(this.sizeX).writeUByte(this.sizeY).writeUByte(this.sizeZ).writeInt(data.length).writeBuffer(data).toBuffer()); + resolve(createWriter(Endian.BE, 18) + // Write PacketID + .writeUByte(this.packetId) + // Write Chunk X + .writeInt(this.x << 4) + // Write Chunk Y + .writeShort(this.y) + // Write Chunk Z + .writeInt(this.z << 4) + // Write Chunk Size X + .writeUByte(this.sizeX) + // Write Chunk Size Y + .writeUByte(this.sizeY) + // Write Chunk Size Z + .writeUByte(this.sizeZ) + // Write Compressed Chunk Data Length + .writeInt(data.length) + // Write Compressed Chunk Data + .writeBuffer(data).toBuffer()); }); }); }