@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
54 lines (53 loc) • 7.52 kB
JavaScript
import DataPacket from "./DataPacket.es.js";
import { PacketCompressionAlgorithm } from "./NetworkSettingsPacket.es.js";
import { CompressionProvider } from "../CompressionProvider.es.js";
import BinaryStream from "@jsprismarine/jsbinaryutils";
import Zlib from "zlib";
//#region src/network/packet/BatchPacket.ts
/**
* @internal
*/
var BatchPacket = class extends DataPacket {
static NetID = 254;
compressed = true;
payload = new BinaryStream();
decodeHeader() {
const pid = this.readByte();
if (pid !== this.getId()) throw new Error(`Batch ID mismatch: is ${this.getId()}, got ${pid}`);
}
decodePayload() {
this.payload.write(this.compressed ? CompressionProvider.fromAlgorithmSync(this.readByte())(this.readRemaining()) : this.readRemaining());
}
async asyncDecode() {
this.decodeHeader();
try {
this.payload.write(this.compressed ? await CompressionProvider.fromAlgorithm(this.readByte())(this.readRemaining()) : this.readRemaining());
} catch (error) {
throw new Error(`Failed to inflate batched content`, { cause: error });
}
return this.getPackets();
}
encodeHeader() {
this.writeByte(this.getId());
}
encodePayload() {
if (this.compressed) this.writeByte(PacketCompressionAlgorithm.ZLIB);
this.write(this.compressed ? Zlib.deflateRawSync(this.payload.getBuffer(), { level: 7 }) : this.payload.getBuffer());
}
addPacket(packet) {
if (!packet.getEncoded()) packet.encode();
this.payload.writeUnsignedVarInt(packet.getBuffer().byteLength);
this.payload.write(packet.getBuffer());
}
getPackets() {
const stream = new BinaryStream(this.payload.getBuffer());
const packets = [];
do
packets.push(stream.read(stream.readUnsignedVarInt()));
while (!stream.feof());
return packets;
}
};
//#endregion
export { BatchPacket as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hQYWNrZXQuZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvcGFja2V0L0JhdGNoUGFja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCBabGliIGZyb20gJ3psaWInO1xuaW1wb3J0IHsgQ29tcHJlc3Npb25Qcm92aWRlciB9IGZyb20gJy4uL0NvbXByZXNzaW9uUHJvdmlkZXIuanMnO1xuaW1wb3J0IERhdGFQYWNrZXQgZnJvbSAnLi9EYXRhUGFja2V0JztcbmltcG9ydCB7IFBhY2tldENvbXByZXNzaW9uQWxnb3JpdGhtIH0gZnJvbSAnLi9OZXR3b3JrU2V0dGluZ3NQYWNrZXQuanMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXRjaFBhY2tldCBleHRlbmRzIERhdGFQYWNrZXQge1xuICAgIHB1YmxpYyBzdGF0aWMgTmV0SUQgPSAweGZlO1xuXG4gICAgcHVibGljIGNvbXByZXNzZWQgPSB0cnVlOyAvLyAgVE9ETzogYmV0dGVyIHNvbHV0aW9uXG4gICAgcHJpdmF0ZSBwYXlsb2FkID0gbmV3IEJpbmFyeVN0cmVhbSgpO1xuICAgIC8vIEJpZ2dlciBjb21wcmVzc2lvbiBsZXZlbCBsZWFkcyB0byBtb3JlIENQVSB1c2FnZSBhbmQgbGVzcyBuZXR3b3JrLCBhbmQgdmljZSB2ZXJzYVxuICAgIC8vIFRPRE86IGJhdGNoLnNldENvbXByZXNzaW9uTGV2ZWwoKSwgaXQgc2hvdWxkIGJlIGRlcGVuZGVudCBmcm9tIFNlcnZlciBpbnN0YW5jZVxuICAgIC8vIHByaXZhdGUgcmVhZG9ubHkgY29tcHJlc3Npb25MZXZlbDogbnVtYmVyID0gU2VydmVyPy5pbnN0YW5jZT8uZ2V0Q29uZmlnKCkuZ2V0UGFja2V0Q29tcHJlc3Npb25MZXZlbCgpID8/IDc7XG5cbiAgICBwdWJsaWMgZGVjb2RlSGVhZGVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwaWQgPSB0aGlzLnJlYWRCeXRlKCk7XG4gICAgICAgIGlmIChwaWQgIT09IHRoaXMuZ2V0SWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYXRjaCBJRCBtaXNtYXRjaDogaXMgJHt0aGlzLmdldElkKCl9LCBnb3QgJHtwaWR9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb2RlUGF5bG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYXlsb2FkLndyaXRlKFxuICAgICAgICAgICAgdGhpcy5jb21wcmVzc2VkXG4gICAgICAgICAgICAgICAgPyBDb21wcmVzc2lvblByb3ZpZGVyLmZyb21BbGdvcml0aG1TeW5jKHRoaXMucmVhZEJ5dGUoKSkodGhpcy5yZWFkUmVtYWluaW5nKCkpXG4gICAgICAgICAgICAgICAgOiB0aGlzLnJlYWRSZW1haW5pbmcoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhc3luY0RlY29kZSgpOiBQcm9taXNlPEJ1ZmZlcltdPiB7XG4gICAgICAgIHRoaXMuZGVjb2RlSGVhZGVyKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucGF5bG9hZC53cml0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXByZXNzZWRcbiAgICAgICAgICAgICAgICAgICAgPyBhd2FpdCBDb21wcmVzc2lvblByb3ZpZGVyLmZyb21BbGdvcml0aG0odGhpcy5yZWFkQnl0ZSgpKSh0aGlzLnJlYWRSZW1haW5pbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJlYWRSZW1haW5pbmcoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluZmxhdGUgYmF0Y2hlZCBjb250ZW50YCwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYWNrZXRzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVuY29kZUhlYWRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUodGhpcy5nZXRJZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5jb2RlUGF5bG9hZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy5hcHBlbmQoQnVmZmVyLmZyb20oRmZsYXRlLmRlZmxhdGVTeW5jKHRoaXMucGF5bG9hZCwgeyBsZXZlbDogNyB9KSkpO1xuICAgICAgICAvLyBTZWVtcyBsaWtlIFpsaWIgcnVucyBhIGxpdHRsZSBiaXQgYmV0dGVyIGZvciBkZWZsYXRpbmcsIHdpbGwgc2VlIGluIGZ1dHVyZSB3aXRoIGFzeW5jLi4uXG4gICAgICAgIC8vIHRoaXMud3JpdGUoWmxpYi5kZWZsYXRlUmF3U3luYyh0aGlzLnBheWxvYWQuZ2V0QnVmZmVyKCksIHsgbGV2ZWw6IDcgfSkpO1xuICAgICAgICBpZiAodGhpcy5jb21wcmVzc2VkKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQnl0ZShQYWNrZXRDb21wcmVzc2lvbkFsZ29yaXRobS5aTElCKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndyaXRlKFxuICAgICAgICAgICAgdGhpcy5jb21wcmVzc2VkID8gWmxpYi5kZWZsYXRlUmF3U3luYyh0aGlzLnBheWxvYWQuZ2V0QnVmZmVyKCksIHsgbGV2ZWw6IDcgfSkgOiB0aGlzLnBheWxvYWQuZ2V0QnVmZmVyKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGFja2V0KHBhY2tldDogRGF0YVBhY2tldCk6IHZvaWQge1xuICAgICAgICBpZiAoIXBhY2tldC5nZXRFbmNvZGVkKCkpIHtcbiAgICAgICAgICAgIHBhY2tldC5lbmNvZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGF5bG9hZC53cml0ZVVuc2lnbmVkVmFySW50KHBhY2tldC5nZXRCdWZmZXIoKS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdGhpcy5wYXlsb2FkLndyaXRlKHBhY2tldC5nZXRCdWZmZXIoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhY2tldHMoKTogQnVmZmVyW10ge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKHRoaXMucGF5bG9hZC5nZXRCdWZmZXIoKSk7XG4gICAgICAgIGNvbnN0IHBhY2tldHM6IEJ1ZmZlcltdID0gW107XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8vIFZhclVpbnQ6IHBhY2tldCBsZW5ndGhcbiAgICAgICAgICAgIHBhY2tldHMucHVzaChzdHJlYW0ucmVhZChzdHJlYW0ucmVhZFVuc2lnbmVkVmFySW50KCkpKTtcbiAgICAgICAgfSB3aGlsZSAoIXN0cmVhbS5mZW9mKCkpO1xuICAgICAgICByZXR1cm4gcGFja2V0cztcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVNBLElBQXFCLGNBQXJCLGNBQXlDLFdBQVc7Q0FDaEQsT0FBYyxRQUFRO0NBRXRCLGFBQW9CO0NBQ3BCLFVBQWtCLElBQUksYUFBYTtDQUtuQyxlQUE0QjtFQUN4QixNQUFNLE1BQU0sS0FBSyxTQUFTO0VBQzFCLElBQUksUUFBUSxLQUFLLE1BQU0sR0FDbkIsTUFBTSxJQUFJLE1BQU0seUJBQXlCLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSztDQUUzRTtDQUVBLGdCQUE2QjtFQUN6QixLQUFLLFFBQVEsTUFDVCxLQUFLLGFBQ0Msb0JBQW9CLGtCQUFrQixLQUFLLFNBQVMsQ0FBQyxFQUFFLEtBQUssY0FBYyxDQUFDLElBQzNFLEtBQUssY0FBYyxDQUM3QjtDQUNKO0NBRUEsTUFBYSxjQUFpQztFQUMxQyxLQUFLLGFBQWE7RUFFbEIsSUFBSTtHQUNBLEtBQUssUUFBUSxNQUNULEtBQUssYUFDQyxNQUFNLG9CQUFvQixjQUFjLEtBQUssU0FBUyxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsSUFDN0UsS0FBSyxjQUFjLENBQzdCO0VBQ0osU0FBUyxPQUFnQjtHQUNyQixNQUFNLElBQUksTUFBTSxxQ0FBcUMsRUFBRSxPQUFPLE1BQU0sQ0FBQztFQUN6RTtFQUVBLE9BQU8sS0FBSyxXQUFXO0NBQzNCO0NBRUEsZUFBNEI7RUFDeEIsS0FBSyxVQUFVLEtBQUssTUFBTSxDQUFDO0NBQy9CO0NBRUEsZ0JBQTZCO0VBSXpCLElBQUksS0FBSyxZQUNMLEtBQUssVUFBVSwyQkFBMkIsSUFBSTtFQUVsRCxLQUFLLE1BQ0QsS0FBSyxhQUFhLEtBQUssZUFBZSxLQUFLLFFBQVEsVUFBVSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLFFBQVEsVUFBVSxDQUMzRztDQUNKO0NBRUEsVUFBaUIsUUFBMEI7RUFDdkMsSUFBSSxDQUFDLE9BQU8sV0FBVyxHQUNuQixPQUFPLE9BQU87RUFHbEIsS0FBSyxRQUFRLG9CQUFvQixPQUFPLFVBQVUsRUFBRSxVQUFVO0VBQzlELEtBQUssUUFBUSxNQUFNLE9BQU8sVUFBVSxDQUFDO0NBQ3pDO0NBRUEsYUFBOEI7RUFDMUIsTUFBTSxTQUFTLElBQUksYUFBYSxLQUFLLFFBQVEsVUFBVSxDQUFDO0VBQ3hELE1BQU0sVUFBb0IsQ0FBQztFQUMzQjtHQUVJLFFBQVEsS0FBSyxPQUFPLEtBQUssT0FBTyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2hELENBQUMsT0FBTyxLQUFLO0VBQ3RCLE9BQU87Q0FDWDtBQUNKIn0=