@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
86 lines (79 loc) • 7.48 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const BinaryStream = require('@jsprismarine/jsbinaryutils');
const _interopDefault = e => e && e.__esModule ? e : { default: e };
const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream);
const PID_MASK = 1023;
const SENDER_SHIFT = 10;
const RECEIVER_SHIFT = 12;
const SUBCLIENT_MASK = 3;
class DataPacket extends BinaryStream__default.default {
/**
* 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;
}
}
exports.default = DataPacket;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVBhY2tldC5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmV0d29yay9wYWNrZXQvRGF0YVBhY2tldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5cbmNvbnN0IFBJRF9NQVNLID0gMHgzZmY7XG5jb25zdCBTRU5ERVJfU0hJRlQgPSAxMDtcbmNvbnN0IFJFQ0VJVkVSX1NISUZUID0gMTI7XG5jb25zdCBTVUJDTElFTlRfTUFTSyA9IDB4MDM7XG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBwYWNrZXRzLlxuICogQGNsYXNzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQYWNrZXQgZXh0ZW5kcyBCaW5hcnlTdHJlYW0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBwYWNrZXQncyBuZXR3b3JrIElELlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgTmV0SUQ6IG51bWJlcjtcblxuICAgIHByaXZhdGUgZW5jb2RlZCA9IGZhbHNlO1xuXG4gICAgLy8gU3BsaXQgc2NyZWVuXG4gICAgcHJpdmF0ZSBzZW5kZXJTdWJJZCA9IDA7XG4gICAgcHJpdmF0ZSByZWNlaXZlclN1YklkID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKGJ1ZmZlcj86IEJ1ZmZlcikge1xuICAgICAgICBzdXBlcihidWZmZXIsIDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCdWZmZXIoKTogQnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KS5OZXRJRDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW5jb2RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIERhdGFQYWNrZXQncyBuYW1lLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHBhY2tldCdzIG5hbWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNvZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVjb2RlSGVhZGVyKCk7XG4gICAgICAgIHRoaXMuZGVjb2RlUGF5bG9hZCgpO1xuXG4gICAgICAgIC8vIE1hcmsgYWxsIHRoZSBwYWNrZXRzIHNlbnQgYnkgdGhlIGNsaWVudFxuICAgICAgICAvLyBhcyBlbmNvZGVkLCBiZWNhdXNlIHRoZXkgaGF2ZSBhbGwgdGhlIHByb3BlcnRpZXNcbiAgICAgICAgLy8gYW5kIGEgYnVmZmVyIChsaWtlIGEgbWFudWFsbHkgZW5jb2RlZCBwYWNrZXQpLlxuICAgICAgICB0aGlzLmVuY29kZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNvZGVIZWFkZXIoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVhZFVuc2lnbmVkVmFySW50KCk7XG5cbiAgICAgICAgY29uc3QgcGlkID0gaGVhZGVyICYgUElEX01BU0s7XG4gICAgICAgIGlmIChwaWQgIT09IHRoaXMuZ2V0SWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYWNrZXQgSUQgbXVzdCBiZSAke3RoaXMuZ2V0SWQoKX0sIGdvdCAke3BpZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VuZGVyU3ViSWQgPSAoaGVhZGVyID4+IFNFTkRFUl9TSElGVCkgJiBTVUJDTElFTlRfTUFTSztcbiAgICAgICAgdGhpcy5yZWNlaXZlclN1YklkID0gKGhlYWRlciA+PiBSRUNFSVZFUl9TSElGVCkgJiBTVUJDTElFTlRfTUFTSztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgdGhlIHBhY2tldCBmcm9tIGEgbmV0d29yayBzZXJpYWxpemVkIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVjb2RlUGF5bG9hZCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgZW5jb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyKCk7IC8vIFdlIG1pZ2h0IG5vdCB3YW50IHRvIGFjdHVhbGx5IGNsZWFyIHRoZSBidWZmZXIgaGVyZS5cbiAgICAgICAgdGhpcy5lbmNvZGVIZWFkZXIoKTtcbiAgICAgICAgdGhpcy5lbmNvZGVQYXlsb2FkKCk7XG4gICAgICAgIHRoaXMuZW5jb2RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGVuY29kZUhlYWRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZVVuc2lnbmVkVmFySW50KFxuICAgICAgICAgICAgdGhpcy5nZXRJZCgpIHwgKHRoaXMuc2VuZGVyU3ViSWQgPDwgU0VOREVSX1NISUZUKSB8ICh0aGlzLnJlY2VpdmVyU3ViSWQgPDwgUkVDRUlWRVJfU0hJRlQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5jb2RlIHRoZSBwYWNrZXQgdG8gYSBuZXR3b3JrIHNlcmlhbGl6ZWQgYnVmZmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBlbmNvZGVQYXlsb2FkKCk6IHZvaWQge31cblxuICAgIHB1YmxpYyBnZXRBbGxvd0JhdGNoaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5hbGxvd0JhdGNoaW5nO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJCaW5hcnlTdHJlYW0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQSxNQUFNLFFBQVcsR0FBQSxJQUFBO0FBQ2pCLE1BQU0sWUFBZSxHQUFBLEVBQUE7QUFDckIsTUFBTSxjQUFpQixHQUFBLEVBQUE7QUFDdkIsTUFBTSxjQUFpQixHQUFBLENBQUE7QUFPdkIsTUFBcUIsbUJBQW1CQSw2QkFBYSxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJakQsT0FBYyxLQUFBO0FBQUEsRUFFTixPQUFVLEdBQUEsS0FBQTtBQUFBO0FBQUEsRUFHVixXQUFjLEdBQUEsQ0FBQTtBQUFBLEVBQ2QsYUFBZ0IsR0FBQSxDQUFBO0FBQUEsRUFFeEIsWUFBWSxNQUFpQixFQUFBO0FBQ3pCLElBQUEsS0FBQSxDQUFNLFFBQVEsQ0FBQyxDQUFBO0FBQUE7QUFDbkIsRUFFTyxTQUFvQixHQUFBO0FBQ3ZCLElBQUEsT0FBTyxNQUFNLFNBQVUsRUFBQTtBQUFBO0FBQzNCLEVBRU8sS0FBZ0IsR0FBQTtBQUNuQixJQUFBLE9BQVEsS0FBSyxXQUFvQixDQUFBLEtBQUE7QUFBQTtBQUNyQyxFQUVPLFVBQXNCLEdBQUE7QUFDekIsSUFBQSxPQUFPLElBQUssQ0FBQSxPQUFBO0FBQUE7QUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sT0FBa0IsR0FBQTtBQUNyQixJQUFBLE9BQU8sS0FBSyxXQUFZLENBQUEsSUFBQTtBQUFBO0FBQzVCLEVBRU8sTUFBZSxHQUFBO0FBQ2xCLElBQUEsSUFBQSxDQUFLLFlBQWEsRUFBQTtBQUNsQixJQUFBLElBQUEsQ0FBSyxhQUFjLEVBQUE7QUFLbkIsSUFBQSxJQUFBLENBQUssT0FBVSxHQUFBLElBQUE7QUFBQTtBQUNuQixFQUVPLFlBQWUsR0FBQTtBQUNsQixJQUFNLE1BQUEsTUFBQSxHQUFTLEtBQUssa0JBQW1CLEVBQUE7QUFFdkMsSUFBQSxNQUFNLE1BQU0sTUFBUyxHQUFBLFFBQUE7QUFDckIsSUFBSSxJQUFBLEdBQUEsS0FBUSxJQUFLLENBQUEsS0FBQSxFQUFTLEVBQUE7QUFDdEIsTUFBTSxNQUFBLElBQUksTUFBTSxDQUFxQixrQkFBQSxFQUFBLElBQUEsQ0FBSyxPQUFPLENBQUEsTUFBQSxFQUFTLEdBQUcsQ0FBRSxDQUFBLENBQUE7QUFBQTtBQUduRSxJQUFLLElBQUEsQ0FBQSxXQUFBLEdBQWUsVUFBVSxZQUFnQixHQUFBLGNBQUE7QUFDOUMsSUFBSyxJQUFBLENBQUEsYUFBQSxHQUFpQixVQUFVLGNBQWtCLEdBQUEsY0FBQTtBQUFBO0FBQ3REO0FBQUE7QUFBQTtBQUFBLEVBS08sYUFBc0IsR0FBQTtBQUFBO0FBQUMsRUFFdkIsTUFBZSxHQUFBO0FBQ2xCLElBQUEsSUFBQSxDQUFLLEtBQU0sRUFBQTtBQUNYLElBQUEsSUFBQSxDQUFLLFlBQWEsRUFBQTtBQUNsQixJQUFBLElBQUEsQ0FBSyxhQUFjLEVBQUE7QUFDbkIsSUFBQSxJQUFBLENBQUssT0FBVSxHQUFBLElBQUE7QUFBQTtBQUNuQixFQUVPLFlBQXFCLEdBQUE7QUFDeEIsSUFBSyxJQUFBLENBQUEsbUJBQUE7QUFBQSxNQUNELEtBQUssS0FBTSxFQUFBLEdBQUssS0FBSyxXQUFlLElBQUEsWUFBQSxHQUFpQixLQUFLLGFBQWlCLElBQUE7QUFBQSxLQUMvRTtBQUFBO0FBQ0o7QUFBQTtBQUFBO0FBQUEsRUFLTyxhQUFzQixHQUFBO0FBQUE7QUFBQyxFQUV2QixnQkFBNEIsR0FBQTtBQUMvQixJQUFBLE9BQVEsSUFBYSxDQUFBLGFBQUE7QUFBQTtBQUU3Qjs7OzsifQ==