@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
94 lines (93 loc) • 9.41 kB
JavaScript
;
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