UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

76 lines (75 loc) 6.26 kB
import BinaryStream from "@jsprismarine/jsbinaryutils"; //#region src/network/packet/DataPacket.ts var PID_MASK = 1023; var SENDER_SHIFT = 10; var RECEIVER_SHIFT = 12; var SUBCLIENT_MASK = 3; /** * The base class for all packets. * @class * @public */ var DataPacket = class extends BinaryStream { /** * The packet's network ID. */ static NetID; encoded = false; senderSubId = 0; receiverSubId = 0; constructor(buffer) { super(buffer, 0); } getBuffer() { return super.getBuffer(); } getId() { return this.constructor.NetID; } getEncoded() { return this.encoded; } /** * Get the DataPacket's name. * * @returns The packet's name */ getName() { return this.constructor.name; } decode() { this.decodeHeader(); this.decodePayload(); this.encoded = true; } decodeHeader() { const header = this.readUnsignedVarInt(); const pid = header & PID_MASK; if (pid !== this.getId()) throw new Error(`Packet ID must be ${this.getId()}, got ${pid}`); this.senderSubId = header >> SENDER_SHIFT & SUBCLIENT_MASK; this.receiverSubId = header >> RECEIVER_SHIFT & SUBCLIENT_MASK; } /** * Decode the packet from a network serialized buffer. */ decodePayload() {} encode() { this.clear(); this.encodeHeader(); this.encodePayload(); this.encoded = true; } encodeHeader() { this.writeUnsignedVarInt(this.getId() | this.senderSubId << SENDER_SHIFT | this.receiverSubId << RECEIVER_SHIFT); } /** * Encode the packet to a network serialized buffer. */ encodePayload() {} getAllowBatching() { return this.allowBatching; } }; //#endregion export { DataPacket as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVBhY2tldC5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmV0d29yay9wYWNrZXQvRGF0YVBhY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5cbmNvbnN0IFBJRF9NQVNLID0gMHgzZmY7XG5jb25zdCBTRU5ERVJfU0hJRlQgPSAxMDtcbmNvbnN0IFJFQ0VJVkVSX1NISUZUID0gMTI7XG5jb25zdCBTVUJDTElFTlRfTUFTSyA9IDB4MDM7XG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBwYWNrZXRzLlxuICogQGNsYXNzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQYWNrZXQgZXh0ZW5kcyBCaW5hcnlTdHJlYW0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrZXQncyBuZXR3b3JrIElELlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgTmV0SUQ6IG51bWJlcjtcblxuICAgIHByaXZhdGUgZW5jb2RlZCA9IGZhbHNlO1xuXG4gICAgLy8gU3BsaXQgc2NyZWVuXG4gICAgcHJpdmF0ZSBzZW5kZXJTdWJJZCA9IDA7XG4gICAgcHJpdmF0ZSByZWNlaXZlclN1YklkID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKGJ1ZmZlcj86IEJ1ZmZlcikge1xuICAgICAgICBzdXBlcihidWZmZXIsIDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCdWZmZXIoKTogQnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KS5OZXRJRDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW5jb2RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIERhdGFQYWNrZXQncyBuYW1lLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHBhY2tldCdzIG5hbWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNvZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVjb2RlSGVhZGVyKCk7XG4gICAgICAgIHRoaXMuZGVjb2RlUGF5bG9hZCgpO1xuXG4gICAgICAgIC8vIE1hcmsgYWxsIHRoZSBwYWNrZXRzIHNlbnQgYnkgdGhlIGNsaWVudFxuICAgICAgICAvLyBhcyBlbmNvZGVkLCBiZWNhdXNlIHRoZXkgaGF2ZSBhbGwgdGhlIHByb3BlcnRpZXNcbiAgICAgICAgLy8gYW5kIGEgYnVmZmVyIChsaWtlIGEgbWFudWFsbHkgZW5jb2RlZCBwYWNrZXQpLlxuICAgICAgICB0aGlzLmVuY29kZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNvZGVIZWFkZXIoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG5cbiAgICAgICAgY29uc3QgcGlkID0gaGVhZGVyICYgUElEX01BU0s7XG4gICAgICAgIGlmIChwaWQgIT09IHRoaXMuZ2V0SWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYWNrZXQgSUQgbXVzdCBiZSAke3RoaXMuZ2V0SWQoKX0sIGdvdCAke3BpZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VuZGVyU3ViSWQgPSAoaGVhZGVyID4+IFNFTkRFUl9TSElGVCkgJiBTVUJDTElFTlRfTUFTSztcbiAgICAgICAgdGhpcy5yZWNlaXZlclN1YklkID0gKGhlYWRlciA+PiBSRUNFSVZFUl9TSElGVCkgJiBTVUJDTElFTlRfTUFTSztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgdGhlIHBhY2tldCBmcm9tIGEgbmV0d29yayBzZXJpYWxpemVkIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVjb2RlUGF5bG9hZCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgZW5jb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyKCk7IC8vIFdlIG1pZ2h0IG5vdCB3YW50IHRvIGFjdHVhbGx5IGNsZWFyIHRoZSBidWZmZXIgaGVyZS5cbiAgICAgICAgdGhpcy5lbmNvZGVIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5lbmNvZGVQYXlsb2FkKCk7XG4gICAgICAgIHRoaXMuZW5jb2RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGVuY29kZUhlYWRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KFxuICAgICAgICAgICAgdGhpcy5nZXRJZCgpIHwgKHRoaXMuc2VuZGVyU3ViSWQgPDwgU0VOREVSX1NISUZUKSB8ICh0aGlzLnJlY2VpdmVyU3ViSWQgPDwgUkVDRUlWRVJfU0hJRlQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5jb2RlIHRoZSBwYWNrZXQgdG8gYSBuZXR3b3JrIHNlcmlhbGl6ZWQgYnVmZmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBlbmNvZGVQYXlsb2FkKCk6IHZvaWQge31cblxuICAgIHB1YmxpYyBnZXRBbGxvd0JhdGNoaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5hbGxvd0JhdGNoaW5nO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFFQSxJQUFNLFdBQVc7QUFDakIsSUFBTSxlQUFlO0FBQ3JCLElBQU0saUJBQWlCO0FBQ3ZCLElBQU0saUJBQWlCOzs7Ozs7QUFPdkIsSUFBcUIsYUFBckIsY0FBd0MsYUFBYTs7OztDQUlqRCxPQUFjO0NBRWQsVUFBa0I7Q0FHbEIsY0FBc0I7Q0FDdEIsZ0JBQXdCO0NBRXhCLFlBQVksUUFBaUI7RUFDekIsTUFBTSxRQUFRLENBQUM7Q0FDbkI7Q0FFQSxZQUEyQjtFQUN2QixPQUFPLE1BQU0sVUFBVTtDQUMzQjtDQUVBLFFBQXVCO0VBQ25CLE9BQVEsS0FBSyxZQUFvQjtDQUNyQztDQUVBLGFBQTZCO0VBQ3pCLE9BQU8sS0FBSztDQUNoQjs7Ozs7O0NBT0EsVUFBeUI7RUFDckIsT0FBTyxLQUFLLFlBQVk7Q0FDNUI7Q0FFQSxTQUFzQjtFQUNsQixLQUFLLGFBQWE7RUFDbEIsS0FBSyxjQUFjO0VBS25CLEtBQUssVUFBVTtDQUNuQjtDQUVBLGVBQXNCO0VBQ2xCLE1BQU0sU0FBUyxLQUFLLG1CQUFtQjtFQUV2QyxNQUFNLE1BQU0sU0FBUztFQUNyQixJQUFJLFFBQVEsS0FBSyxNQUFNLEdBQ25CLE1BQU0sSUFBSSxNQUFNLHFCQUFxQixLQUFLLE1BQU0sRUFBRSxRQUFRLEtBQUs7RUFHbkUsS0FBSyxjQUFlLFVBQVUsZUFBZ0I7RUFDOUMsS0FBSyxnQkFBaUIsVUFBVSxpQkFBa0I7Q0FDdEQ7Ozs7Q0FLQSxnQkFBNkIsQ0FBQztDQUU5QixTQUFzQjtFQUNsQixLQUFLLE1BQU07RUFDWCxLQUFLLGFBQWE7RUFDbEIsS0FBSyxjQUFjO0VBQ25CLEtBQUssVUFBVTtDQUNuQjtDQUVBLGVBQTRCO0VBQ3hCLEtBQUssb0JBQ0QsS0FBSyxNQUFNLElBQUssS0FBSyxlQUFlLGVBQWlCLEtBQUssaUJBQWlCLGNBQy9FO0NBQ0o7Ozs7Q0FLQSxnQkFBNkIsQ0FBQztDQUU5QixtQkFBbUM7RUFDL0IsT0FBUSxLQUFhO0NBQ3pCO0FBQ0oifQ==