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