@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
76 lines (75 loc) • 6.26 kB
JavaScript
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==