UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

78 lines (75 loc) 7.16 kB
import BinaryStream from '@jsprismarine/jsbinaryutils'; const PID_MASK = 1023; const SENDER_SHIFT = 10; const RECEIVER_SHIFT = 12; const SUBCLIENT_MASK = 3; class DataPacket extends BinaryStream { /** * The packet's network ID. */ static NetID; encoded = false; // Split screen 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; } } export { DataPacket as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVBhY2tldC5lcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvcGFja2V0L0RhdGFQYWNrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuXG5jb25zdCBQSURfTUFTSyA9IDB4M2ZmO1xuY29uc3QgU0VOREVSX1NISUZUID0gMTA7XG5jb25zdCBSRUNFSVZFUl9TSElGVCA9IDEyO1xuY29uc3QgU1VCQ0xJRU5UX01BU0sgPSAweDAzO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgcGFja2V0cy5cbiAqIEBjbGFzc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRhUGFja2V0IGV4dGVuZHMgQmluYXJ5U3RyZWFtIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFja2V0J3MgbmV0d29yayBJRC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIE5ldElEOiBudW1iZXI7XG5cbiAgICBwcml2YXRlIGVuY29kZWQgPSBmYWxzZTtcblxuICAgIC8vIFNwbGl0IHNjcmVlblxuICAgIHByaXZhdGUgc2VuZGVyU3ViSWQgPSAwO1xuICAgIHByaXZhdGUgcmVjZWl2ZXJTdWJJZCA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcihidWZmZXI/OiBCdWZmZXIpIHtcbiAgICAgICAgc3VwZXIoYnVmZmVyLCAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnVmZmVyKCk6IEJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRCdWZmZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkuTmV0SUQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVuY29kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuY29kZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBEYXRhUGFja2V0J3MgbmFtZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBwYWNrZXQncyBuYW1lXG4gICAgICovXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlY29kZUhlYWRlcigpO1xuICAgICAgICB0aGlzLmRlY29kZVBheWxvYWQoKTtcblxuICAgICAgICAvLyBNYXJrIGFsbCB0aGUgcGFja2V0cyBzZW50IGJ5IHRoZSBjbGllbnRcbiAgICAgICAgLy8gYXMgZW5jb2RlZCwgYmVjYXVzZSB0aGV5IGhhdmUgYWxsIHRoZSBwcm9wZXJ0aWVzXG4gICAgICAgIC8vIGFuZCBhIGJ1ZmZlciAobGlrZSBhIG1hbnVhbGx5IGVuY29kZWQgcGFja2V0KS5cbiAgICAgICAgdGhpcy5lbmNvZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjb2RlSGVhZGVyKCkge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlYWRVbnNpZ25lZFZhckludCgpO1xuXG4gICAgICAgIGNvbnN0IHBpZCA9IGhlYWRlciAmIFBJRF9NQVNLO1xuICAgICAgICBpZiAocGlkICE9PSB0aGlzLmdldElkKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2V0IElEIG11c3QgYmUgJHt0aGlzLmdldElkKCl9LCBnb3QgJHtwaWR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbmRlclN1YklkID0gKGhlYWRlciA+PiBTRU5ERVJfU0hJRlQpICYgU1VCQ0xJRU5UX01BU0s7XG4gICAgICAgIHRoaXMucmVjZWl2ZXJTdWJJZCA9IChoZWFkZXIgPj4gUkVDRUlWRVJfU0hJRlQpICYgU1VCQ0xJRU5UX01BU0s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjb2RlIHRoZSBwYWNrZXQgZnJvbSBhIG5ldHdvcmsgc2VyaWFsaXplZCBidWZmZXIuXG4gICAgICovXG4gICAgcHVibGljIGRlY29kZVBheWxvYWQoKTogdm9pZCB7fVxuXG4gICAgcHVibGljIGVuY29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcigpOyAvLyBXZSBtaWdodCBub3Qgd2FudCB0byBhY3R1YWxseSBjbGVhciB0aGUgYnVmZmVyIGhlcmUuXG4gICAgICAgIHRoaXMuZW5jb2RlSGVhZGVyKCk7XG4gICAgICAgIHRoaXMuZW5jb2RlUGF5bG9hZCgpO1xuICAgICAgICB0aGlzLmVuY29kZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmNvZGVIZWFkZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud3JpdGVVbnNpZ25lZFZhckludChcbiAgICAgICAgICAgIHRoaXMuZ2V0SWQoKSB8ICh0aGlzLnNlbmRlclN1YklkIDw8IFNFTkRFUl9TSElGVCkgfCAodGhpcy5yZWNlaXZlclN1YklkIDw8IFJFQ0VJVkVSX1NISUZUKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuY29kZSB0aGUgcGFja2V0IHRvIGEgbmV0d29yayBzZXJpYWxpemVkIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZW5jb2RlUGF5bG9hZCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgZ2V0QWxsb3dCYXRjaGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuYWxsb3dCYXRjaGluZztcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxNQUFNLFFBQVcsR0FBQSxJQUFBO0FBQ2pCLE1BQU0sWUFBZSxHQUFBLEVBQUE7QUFDckIsTUFBTSxjQUFpQixHQUFBLEVBQUE7QUFDdkIsTUFBTSxjQUFpQixHQUFBLENBQUE7QUFPdkIsTUFBcUIsbUJBQW1CLFlBQWEsQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWpELE9BQWMsS0FBQTtBQUFBLEVBRU4sT0FBVSxHQUFBLEtBQUE7QUFBQTtBQUFBLEVBR1YsV0FBYyxHQUFBLENBQUE7QUFBQSxFQUNkLGFBQWdCLEdBQUEsQ0FBQTtBQUFBLEVBRXhCLFlBQVksTUFBaUIsRUFBQTtBQUN6QixJQUFBLEtBQUEsQ0FBTSxRQUFRLENBQUMsQ0FBQTtBQUFBO0FBQ25CLEVBRU8sU0FBb0IsR0FBQTtBQUN2QixJQUFBLE9BQU8sTUFBTSxTQUFVLEVBQUE7QUFBQTtBQUMzQixFQUVPLEtBQWdCLEdBQUE7QUFDbkIsSUFBQSxPQUFRLEtBQUssV0FBb0IsQ0FBQSxLQUFBO0FBQUE7QUFDckMsRUFFTyxVQUFzQixHQUFBO0FBQ3pCLElBQUEsT0FBTyxJQUFLLENBQUEsT0FBQTtBQUFBO0FBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLE9BQWtCLEdBQUE7QUFDckIsSUFBQSxPQUFPLEtBQUssV0FBWSxDQUFBLElBQUE7QUFBQTtBQUM1QixFQUVPLE1BQWUsR0FBQTtBQUNsQixJQUFBLElBQUEsQ0FBSyxZQUFhLEVBQUE7QUFDbEIsSUFBQSxJQUFBLENBQUssYUFBYyxFQUFBO0FBS25CLElBQUEsSUFBQSxDQUFLLE9BQVUsR0FBQSxJQUFBO0FBQUE7QUFDbkIsRUFFTyxZQUFlLEdBQUE7QUFDbEIsSUFBTSxNQUFBLE1BQUEsR0FBUyxLQUFLLGtCQUFtQixFQUFBO0FBRXZDLElBQUEsTUFBTSxNQUFNLE1BQVMsR0FBQSxRQUFBO0FBQ3JCLElBQUksSUFBQSxHQUFBLEtBQVEsSUFBSyxDQUFBLEtBQUEsRUFBUyxFQUFBO0FBQ3RCLE1BQU0sTUFBQSxJQUFJLE1BQU0sQ0FBcUIsa0JBQUEsRUFBQSxJQUFBLENBQUssT0FBTyxDQUFBLE1BQUEsRUFBUyxHQUFHLENBQUUsQ0FBQSxDQUFBO0FBQUE7QUFHbkUsSUFBSyxJQUFBLENBQUEsV0FBQSxHQUFlLFVBQVUsWUFBZ0IsR0FBQSxjQUFBO0FBQzlDLElBQUssSUFBQSxDQUFBLGFBQUEsR0FBaUIsVUFBVSxjQUFrQixHQUFBLGNBQUE7QUFBQTtBQUN0RDtBQUFBO0FBQUE7QUFBQSxFQUtPLGFBQXNCLEdBQUE7QUFBQTtBQUFDLEVBRXZCLE1BQWUsR0FBQTtBQUNsQixJQUFBLElBQUEsQ0FBSyxLQUFNLEVBQUE7QUFDWCxJQUFBLElBQUEsQ0FBSyxZQUFhLEVBQUE7QUFDbEIsSUFBQSxJQUFBLENBQUssYUFBYyxFQUFBO0FBQ25CLElBQUEsSUFBQSxDQUFLLE9BQVUsR0FBQSxJQUFBO0FBQUE7QUFDbkIsRUFFTyxZQUFxQixHQUFBO0FBQ3hCLElBQUssSUFBQSxDQUFBLG1CQUFBO0FBQUEsTUFDRCxLQUFLLEtBQU0sRUFBQSxHQUFLLEtBQUssV0FBZSxJQUFBLFlBQUEsR0FBaUIsS0FBSyxhQUFpQixJQUFBO0FBQUEsS0FDL0U7QUFBQTtBQUNKO0FBQUE7QUFBQTtBQUFBLEVBS08sYUFBc0IsR0FBQTtBQUFBO0FBQUMsRUFFdkIsZ0JBQTRCLEdBQUE7QUFDL0IsSUFBQSxPQUFRLElBQWEsQ0FBQSxhQUFBO0FBQUE7QUFFN0I7Ozs7In0=