UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

95 lines (88 loc) 11.2 kB
'use strict'; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const BinaryStream = require('@jsprismarine/jsbinaryutils'); const node_crypto = require('node:crypto'); const _interopDefault = e => e && e.__esModule ? e : { default: e }; const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream); class UUID { parts = []; version; constructor(part1 = 0, part2 = 0, part3 = 0, part4 = 0, version = 4) { this.parts = [part1, part2, part3, part4]; this.version = version || (this.parts[1] & 61440) >> 12; } equals(uuid) { return this.parts.length === uuid.parts.length && this.parts.every((value, index) => value === uuid.parts[index]); } /** * Creates an UUID from a string hex representation */ static fromString(uuid, version = 4) { if (!uuid) throw new Error("uuid is null or undefined"); return UUID.fromBinary(Buffer.from(uuid.trim().replaceAll("-", ""), "hex"), version); } /** * Creates an UUID from a binary representation */ static fromBinary(uuid, version) { if (uuid.byteLength !== 16) { throw new Error("UUID must have 16 bytes"); } const stream = new BinaryStream__default.default(uuid); return new UUID(stream.readInt(), stream.readInt(), stream.readInt(), stream.readInt(), version); } /** * Generates a random UUIDv4 (string) */ static randomString() { return node_crypto.randomUUID({ disableEntropyCache: true }); } /** * Generates a random UUIDv4 */ static fromRandom() { const stringUUID = UUID.randomString(); return UUID.fromString(stringUUID, 4); } toBinary() { const stream = new BinaryStream__default.default(); stream.writeInt(this.parts[0]); stream.writeInt(this.parts[1]); stream.writeInt(this.parts[2]); stream.writeInt(this.parts[3]); return stream.getBuffer(); } toString() { const hex = this.toBinary().toString("hex"); const parts = []; parts.push(hex.slice(0, 8)); parts.push(hex.slice(8, 8 + 4)); parts.push(hex.slice(12, 12 + 4)); parts.push(hex.slice(16, 16 + 4)); parts.push(hex.slice(20, 20 + 12)); return parts.join("-"); } getVersion() { return this.version; } getParts() { return this.parts; } networkSerialize(stream) { stream.writeIntLE(this.parts[1]); stream.writeIntLE(this.parts[0]); stream.writeIntLE(this.parts[3]); stream.writeIntLE(this.parts[2]); } static networkDeserialize(stream) { const part1 = stream.readIntLE(); const part0 = stream.readIntLE(); const part3 = stream.readIntLE(); const part2 = stream.readIntLE(); return new UUID(part0, part1, part2, part3); } } exports.default = UUID; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVVJRC5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvVVVJRC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVVUlEIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcnRzOiBudW1iZXJbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcnQxID0gMCwgcGFydDIgPSAwLCBwYXJ0MyA9IDAsIHBhcnQ0ID0gMCwgdmVyc2lvbiA9IDQpIHtcbiAgICAgICAgdGhpcy5wYXJ0cyA9IFtwYXJ0MSwgcGFydDIsIHBhcnQzLCBwYXJ0NF07XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb24gfHwgKHRoaXMucGFydHNbMV0hICYgMHhmMDAwKSA+PiAxMjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXF1YWxzKHV1aWQ6IFVVSUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucGFydHMubGVuZ3RoID09PSB1dWlkLnBhcnRzLmxlbmd0aCAmJiB0aGlzLnBhcnRzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSB1dWlkLnBhcnRzW2luZGV4XSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIFVVSUQgZnJvbSBhIHN0cmluZyBoZXggcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmcodXVpZDogc3RyaW5nLCB2ZXJzaW9uID0gNCk6IFVVSUQge1xuICAgICAgICBpZiAoIXV1aWQpIHRocm93IG5ldyBFcnJvcigndXVpZCBpcyBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXG4gICAgICAgIHJldHVybiBVVUlELmZyb21CaW5hcnkoQnVmZmVyLmZyb20odXVpZC50cmltKCkucmVwbGFjZUFsbCgnLScsICcnKSwgJ2hleCcpLCB2ZXJzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIFVVSUQgZnJvbSBhIGJpbmFyeSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUJpbmFyeSh1dWlkOiBCdWZmZXIsIHZlcnNpb246IG51bWJlcik6IFVVSUQge1xuICAgICAgICBpZiAodXVpZC5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVVUlEIG11c3QgaGF2ZSAxNiBieXRlcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJpbmFyeVN0cmVhbSh1dWlkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVVUlEKHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHZlcnNpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBVVUlEdjQgKHN0cmluZylcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbVN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcmFuZG9tVVVJRCh7XG4gICAgICAgICAgICBkaXNhYmxlRW50cm9weUNhY2hlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBVVUlEdjRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21SYW5kb20oKTogVVVJRCB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1VVSUQgPSBVVUlELnJhbmRvbVN0cmluZygpO1xuICAgICAgICByZXR1cm4gVVVJRC5mcm9tU3RyaW5nKHN0cmluZ1VVSUQsIDQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0JpbmFyeSgpOiBCdWZmZXIge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKCk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzBdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzFdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzJdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzNdISk7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZ2V0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhleCA9IHRoaXMudG9CaW5hcnkoKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgICAgLy8gWHh4eHh4eHgteHh4eC1NeHh4LU54eHgteHh4eHh4eHh4eHh4IDgtNC00LTQtMTJcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgcGFydHMucHVzaChoZXguc2xpY2UoMCwgOCkpO1xuICAgICAgICBwYXJ0cy5wdXNoKGhleC5zbGljZSg4LCA4ICsgNCkpO1xuICAgICAgICBwYXJ0cy5wdXNoKGhleC5zbGljZSgxMiwgMTIgKyA0KSk7XG4gICAgICAgIHBhcnRzLnB1c2goaGV4LnNsaWNlKDE2LCAxNiArIDQpKTtcbiAgICAgICAgcGFydHMucHVzaChoZXguc2xpY2UoMjAsIDIwICsgMTIpKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJy0nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmVyc2lvbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXJ0cygpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXR3b3JrU2VyaWFsaXplKHN0cmVhbTogYW55KTogdm9pZCB7XG4gICAgICAgIHN0cmVhbS53cml0ZUludExFKHRoaXMucGFydHNbMV0pO1xuICAgICAgICBzdHJlYW0ud3JpdGVJbnRMRSh0aGlzLnBhcnRzWzBdKTtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50TEUodGhpcy5wYXJ0c1szXSk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludExFKHRoaXMucGFydHNbMl0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbTogYW55KTogVVVJRCB7XG4gICAgICAgIGNvbnN0IHBhcnQxID0gc3RyZWFtLnJlYWRJbnRMRSgpO1xuICAgICAgICBjb25zdCBwYXJ0MCA9IHN0cmVhbS5yZWFkSW50TEUoKTtcbiAgICAgICAgY29uc3QgcGFydDMgPSBzdHJlYW0ucmVhZEludExFKCk7XG4gICAgICAgIGNvbnN0IHBhcnQyID0gc3RyZWFtLnJlYWRJbnRMRSgpO1xuICAgICAgICByZXR1cm4gbmV3IFVVSUQocGFydDAsIHBhcnQxLCBwYXJ0MiwgcGFydDMpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJCaW5hcnlTdHJlYW0iLCJyYW5kb21VVUlEIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLE1BQXFCLElBQUssQ0FBQTtBQUFBLEVBQ0wsUUFBa0IsRUFBQztBQUFBLEVBQ25CLE9BQUE7QUFBQSxFQUVWLFdBQUEsQ0FBWSxLQUFRLEdBQUEsQ0FBQSxFQUFHLEtBQVEsR0FBQSxDQUFBLEVBQUcsUUFBUSxDQUFHLEVBQUEsS0FBQSxHQUFRLENBQUcsRUFBQSxPQUFBLEdBQVUsQ0FBRyxFQUFBO0FBQ3hFLElBQUEsSUFBQSxDQUFLLEtBQVEsR0FBQSxDQUFDLEtBQU8sRUFBQSxLQUFBLEVBQU8sT0FBTyxLQUFLLENBQUE7QUFDeEMsSUFBQSxJQUFBLENBQUssVUFBVSxPQUFZLElBQUEsQ0FBQSxJQUFBLENBQUssS0FBTSxDQUFB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