UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

94 lines (93 loc) 9.41 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); const require_runtime = require("../_virtual/_rolldown/runtime.cjs.cjs"); let _jsprismarine_jsbinaryutils = require("@jsprismarine/jsbinaryutils"); _jsprismarine_jsbinaryutils = require_runtime.__toESM(_jsprismarine_jsbinaryutils, 1); let node_crypto = require("node:crypto"); //#region src/utils/UUID.ts var UUID = 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 _jsprismarine_jsbinaryutils.default(uuid); return new UUID(stream.readInt(), stream.readInt(), stream.readInt(), stream.readInt(), version); } /** * Generates a random UUIDv4 (string) */ static randomString() { return (0, node_crypto.randomUUID)({ disableEntropyCache: true }); } /** * Generates a random UUIDv4 */ static fromRandom() { const stringUUID = UUID.randomString(); return UUID.fromString(stringUUID, 4); } toBinary() { const stream = new _jsprismarine_jsbinaryutils.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, 12)); parts.push(hex.slice(12, 16)); parts.push(hex.slice(16, 20)); parts.push(hex.slice(20, 32)); 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(); return new UUID(part0, part1, stream.readIntLE(), part3); } }; //#endregion exports.default = UUID; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVVJRC5janMuY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9VVUlELnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVVSUQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFydHM6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFydDEgPSAwLCBwYXJ0MiA9IDAsIHBhcnQzID0gMCwgcGFydDQgPSAwLCB2ZXJzaW9uID0gNCkge1xuICAgICAgICB0aGlzLnBhcnRzID0gW3BhcnQxLCBwYXJ0MiwgcGFydDMsIHBhcnQ0XTtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbiB8fCAodGhpcy5wYXJ0c1sxXSEgJiAweGYwMDApID4+IDEyO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcXVhbHModXVpZDogVVVJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5wYXJ0cy5sZW5ndGggPT09IHV1aWQucGFydHMubGVuZ3RoICYmIHRoaXMucGFydHMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IHV1aWQucGFydHNbaW5kZXhdKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gVVVJRCBmcm9tIGEgc3RyaW5nIGhleCByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh1dWlkOiBzdHJpbmcsIHZlcnNpb24gPSA0KTogVVVJRCB7XG4gICAgICAgIGlmICghdXVpZCkgdGhyb3cgbmV3IEVycm9yKCd1dWlkIGlzIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cbiAgICAgICAgcmV0dXJuIFVVSUQuZnJvbUJpbmFyeShCdWZmZXIuZnJvbSh1dWlkLnRyaW0oKS5yZXBsYWNlQWxsKCctJywgJycpLCAnaGV4JyksIHZlcnNpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gVVVJRCBmcm9tIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQmluYXJ5KHV1aWQ6IEJ1ZmZlciwgdmVyc2lvbjogbnVtYmVyKTogVVVJRCB7XG4gICAgICAgIGlmICh1dWlkLmJ5dGVMZW5ndGggIT09IDE2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VVSUQgbXVzdCBoYXZlIDE2IGJ5dGVzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKHV1aWQpO1xuICAgICAgICByZXR1cm4gbmV3IFVVSUQoc3RyZWFtLnJlYWRJbnQoKSwgc3RyZWFtLnJlYWRJbnQoKSwgc3RyZWFtLnJlYWRJbnQoKSwgc3RyZWFtLnJlYWRJbnQoKSwgdmVyc2lvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgcmFuZG9tIFVVSUR2NCAoc3RyaW5nKVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiByYW5kb21VVUlEKHtcbiAgICAgICAgICAgIGRpc2FibGVFbnRyb3B5Q2FjaGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgcmFuZG9tIFVVSUR2NFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVJhbmRvbSgpOiBVVUlEIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nVVVJRCA9IFVVSUQucmFuZG9tU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBVVUlELmZyb21TdHJpbmcoc3RyaW5nVVVJRCwgNCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvQmluYXJ5KCk6IEJ1ZmZlciB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBCaW5hcnlTdHJlYW0oKTtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50KHRoaXMucGFydHNbMF0hKTtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50KHRoaXMucGFydHNbMV0hKTtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50KHRoaXMucGFydHNbMl0hKTtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50KHRoaXMucGFydHNbM10hKTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5nZXRCdWZmZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGV4ID0gdGhpcy50b0JpbmFyeSgpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgICAvLyBYeHh4eHh4eC14eHh4LU14eHgtTnh4eC14eHh4eHh4eHh4eHggOC00LTQtNC0xMlxuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBwYXJ0cy5wdXNoKGhleC5zbGljZSgwLCA4KSk7XG4gICAgICAgIHBhcnRzLnB1c2goaGV4LnNsaWNlKDgsIDggKyA0KSk7XG4gICAgICAgIHBhcnRzLnB1c2goaGV4LnNsaWNlKDEyLCAxMiArIDQpKTtcbiAgICAgICAgcGFydHMucHVzaChoZXguc2xpY2UoMTYsIDE2ICsgNCkpO1xuICAgICAgICBwYXJ0cy5wdXNoKGhleC5zbGljZSgyMCwgMjAgKyAxMikpO1xuICAgICAgICByZXR1cm4gcGFydHMuam9pbignLScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcnNpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRzKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFydHM7XG4gICAgfVxuXG4gICAgcHVibGljIG5ldHdvcmtTZXJpYWxpemUoc3RyZWFtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50TEUodGhpcy5wYXJ0c1sxXSk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludExFKHRoaXMucGFydHNbMF0pO1xuICAgICAgICBzdHJlYW0ud3JpdGVJbnRMRSh0aGlzLnBhcnRzWzNdKTtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50TEUodGhpcy5wYXJ0c1syXSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBuZXR3b3JrRGVzZXJpYWxpemUoc3RyZWFtOiBhbnkpOiBVVUlEIHtcbiAgICAgICAgY29uc3QgcGFydDEgPSBzdHJlYW0ucmVhZEludExFKCk7XG4gICAgICAgIGNvbnN0IHBhcnQwID0gc3RyZWFtLnJlYWRJbnRMRSgpO1xuICAgICAgICBjb25zdCBwYXJ0MyA9IHN0cmVhbS5yZWFkSW50TEUoKTtcbiAgICAgICAgY29uc3QgcGFydDIgPSBzdHJlYW0ucmVhZEludExFKCk7XG4gICAgICAgIHJldHVybiBuZXcgVVVJRChwYXJ0MCwgcGFydDEsIHBhcnQyLCBwYXJ0Myk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBR0EsSUFBcUIsT0FBckIsTUFBcUIsS0FBSztDQUN0QixRQUFtQyxDQUFDO0NBQ3BDO0NBRUEsWUFBbUIsUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxHQUFHLFVBQVUsR0FBRztFQUN4RSxLQUFLLFFBQVE7R0FBQztHQUFPO0dBQU87R0FBTztFQUFLO0VBQ3hDLEtBQUssVUFBVSxZQUFZLEtBQUssTUFBTSxLQUFNLFVBQVc7Q0FDM0Q7Q0FFQSxPQUFjLE1BQXFCO0VBQy9CLE9BQ0ksS0FBSyxNQUFNLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxNQUFNLE9BQU8sT0FBTyxVQUFVLFVBQVUsS0FBSyxNQUFNLE1BQU07Q0FFakg7Ozs7Q0FLQSxPQUFjLFdBQVcsTUFBYyxVQUFVLEdBQVM7RUFDdEQsSUFBSSxDQUFDLE1BQU0sTUFBTSxJQUFJLE1BQU0sMkJBQTJCO0VBRXRELE9BQU8sS0FBSyxXQUFXLE9BQU8sS0FBSyxLQUFLLEtBQUssRUFBRSxXQUFXLEtBQUssRUFBRSxHQUFHLEtBQUssR0FBRyxPQUFPO0NBQ3ZGOzs7O0NBS0EsT0FBYyxXQUFXLE1BQWMsU0FBdUI7RUFDMUQsSUFBSSxLQUFLLGVBQWUsSUFDcEIsTUFBTSxJQUFJLE1BQU0seUJBQXlCO0VBRzdDLE1BQU0sU0FBUyxJQUFJLDRCQUFBLFFBQWEsSUFBSTtFQUNwQyxPQUFPLElBQUksS0FBSyxPQUFPLFFBQVEsR0FBRyxPQUFPLFFBQVEsR0FBRyxPQUFPLFFBQVEsR0FBRyxPQUFPLFFBQVEsR0FBRyxPQUFPO0NBQ25HOzs7O0NBS0EsT0FBYyxlQUF1QjtFQUNqQyxRQUFBLEdBQUEsWUFBQSxZQUFrQixFQUNkLHFCQUFxQixLQUN6QixDQUFDO0NBQ0w7Ozs7Q0FLQSxPQUFjLGFBQW1CO0VBQzdCLE1BQU0sYUFBYSxLQUFLLGFBQWE7RUFDckMsT0FBTyxLQUFLLFdBQVcsWUFBWSxDQUFDO0NBQ3hDO0NBRUEsV0FBMEI7RUFDdEIsTUFBTSxTQUFTLElBQUksNEJBQUEsUUFBYTtFQUNoQyxPQUFPLFNBQVMsS0FBSyxNQUFNLEVBQUc7RUFDOUIsT0FBTyxTQUFTLEtBQUssTUFBTSxFQUFHO0VBQzlCLE9BQU8sU0FBUyxLQUFLLE1BQU0sRUFBRztFQUM5QixPQUFPLFNBQVMsS0FBSyxNQUFNLEVBQUc7RUFDOUIsT0FBTyxPQUFPLFVBQVU7Q0FDNUI7Q0FFQSxXQUEwQjtFQUN0QixNQUFNLE1BQU0sS0FBSyxTQUFTLEVBQUUsU0FBUyxLQUFLO0VBRzFDLE1BQU0sUUFBUSxDQUFDO0VBQ2YsTUFBTSxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztFQUMxQixNQUFNLEtBQUssSUFBSSxNQUFNLEdBQUcsRUFBSyxDQUFDO0VBQzlCLE1BQU0sS0FBSyxJQUFJLE1BQU0sSUFBSSxFQUFNLENBQUM7RUFDaEMsTUFBTSxLQUFLLElBQUksTUFBTSxJQUFJLEVBQU0sQ0FBQztFQUNoQyxNQUFNLEtBQUssSUFBSSxNQUFNLElBQUksRUFBTyxDQUFDO0VBQ2pDLE9BQU8sTUFBTSxLQUFLLEdBQUc7Q0FDekI7Q0FFQSxhQUE0QjtFQUN4QixPQUFPLEtBQUs7Q0FDaEI7Q0FFQSxXQUE0QjtFQUN4QixPQUFPLEtBQUs7Q0FDaEI7Q0FFQSxpQkFBd0IsUUFBbUI7RUFDdkMsT0FBTyxXQUFXLEtBQUssTUFBTSxFQUFFO0VBQy9CLE9BQU8sV0FBVyxLQUFLLE1BQU0sRUFBRTtFQUMvQixPQUFPLFdBQVcsS0FBSyxNQUFNLEVBQUU7RUFDL0IsT0FBTyxXQUFXLEtBQUssTUFBTSxFQUFFO0NBQ25DO0NBRUEsT0FBYyxtQkFBbUIsUUFBbUI7RUFDaEQsTUFBTSxRQUFRLE9BQU8sVUFBVTtFQUMvQixNQUFNLFFBQVEsT0FBTyxVQUFVO0VBQy9CLE1BQU0sUUFBUSxPQUFPLFVBQVU7RUFFL0IsT0FBTyxJQUFJLEtBQUssT0FBTyxPQURULE9BQU8sVUFDUyxHQUFPLEtBQUs7Q0FDOUM7QUFDSiJ9