@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
87 lines (86 loc) • 9.01 kB
JavaScript
import BinaryStream from "@jsprismarine/jsbinaryutils";
import { randomUUID } from "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 BinaryStream(uuid);
return new UUID(stream.readInt(), stream.readInt(), stream.readInt(), stream.readInt(), version);
}
/**
* Generates a random UUIDv4 (string)
*/
static randomString() {
return randomUUID({ disableEntropyCache: true });
}
/**
* Generates a random UUIDv4
*/
static fromRandom() {
const stringUUID = UUID.randomString();
return UUID.fromString(stringUUID, 4);
}
toBinary() {
const stream = new BinaryStream();
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
export { UUID as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVVJRC5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvVVVJRC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVVUlEIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcnRzOiBudW1iZXJbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcnQxID0gMCwgcGFydDIgPSAwLCBwYXJ0MyA9IDAsIHBhcnQ0ID0gMCwgdmVyc2lvbiA9IDQpIHtcbiAgICAgICAgdGhpcy5wYXJ0cyA9IFtwYXJ0MSwgcGFydDIsIHBhcnQzLCBwYXJ0NF07XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb24gfHwgKHRoaXMucGFydHNbMV0hICYgMHhmMDAwKSA+PiAxMjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXF1YWxzKHV1aWQ6IFVVSUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucGFydHMubGVuZ3RoID09PSB1dWlkLnBhcnRzLmxlbmd0aCAmJiB0aGlzLnBhcnRzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSB1dWlkLnBhcnRzW2luZGV4XSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIFVVSUQgZnJvbSBhIHN0cmluZyBoZXggcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmcodXVpZDogc3RyaW5nLCB2ZXJzaW9uID0gNCk6IFVVSUQge1xuICAgICAgICBpZiAoIXV1aWQpIHRocm93IG5ldyBFcnJvcigndXVpZCBpcyBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXG4gICAgICAgIHJldHVybiBVVUlELmZyb21CaW5hcnkoQnVmZmVyLmZyb20odXVpZC50cmltKCkucmVwbGFjZUFsbCgnLScsICcnKSwgJ2hleCcpLCB2ZXJzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIFVVSUQgZnJvbSBhIGJpbmFyeSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUJpbmFyeSh1dWlkOiBCdWZmZXIsIHZlcnNpb246IG51bWJlcik6IFVVSUQge1xuICAgICAgICBpZiAodXVpZC5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVVUlEIG11c3QgaGF2ZSAxNiBieXRlcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJpbmFyeVN0cmVhbSh1dWlkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVVUlEKHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHN0cmVhbS5yZWFkSW50KCksIHZlcnNpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBVVUlEdjQgKHN0cmluZylcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbVN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcmFuZG9tVVVJRCh7XG4gICAgICAgICAgICBkaXNhYmxlRW50cm9weUNhY2hlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBVVUlEdjRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21SYW5kb20oKTogVVVJRCB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1VVSUQgPSBVVUlELnJhbmRvbVN0cmluZygpO1xuICAgICAgICByZXR1cm4gVVVJRC5mcm9tU3RyaW5nKHN0cmluZ1VVSUQsIDQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0JpbmFyeSgpOiBCdWZmZXIge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmluYXJ5U3RyZWFtKCk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzBdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzFdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzJdISk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludCh0aGlzLnBhcnRzWzNdISk7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZ2V0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhleCA9IHRoaXMudG9CaW5hcnkoKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgICAgLy8gWHh4eHh4eHgteHh4eC1NeHh4LU54eHgteHh4eHh4eHh4eHh4IDgtNC00LTQtMTJcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgcGFydHMucHVzaChoZXguc2xpY2UoMCwgOCkpO1xuICAgICAgICBwYXJ0cy5wdXNoKGhleC5zbGljZSg4LCA4ICsgNCkpO1xuICAgICAgICBwYXJ0cy5wdXNoKGhleC5zbGljZSgxMiwgMTIgKyA0KSk7XG4gICAgICAgIHBhcnRzLnB1c2goaGV4LnNsaWNlKDE2LCAxNiArIDQpKTtcbiAgICAgICAgcGFydHMucHVzaChoZXguc2xpY2UoMjAsIDIwICsgMTIpKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJy0nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmVyc2lvbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXJ0cygpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXR3b3JrU2VyaWFsaXplKHN0cmVhbTogYW55KTogdm9pZCB7XG4gICAgICAgIHN0cmVhbS53cml0ZUludExFKHRoaXMucGFydHNbMV0pO1xuICAgICAgICBzdHJlYW0ud3JpdGVJbnRMRSh0aGlzLnBhcnRzWzBdKTtcbiAgICAgICAgc3RyZWFtLndyaXRlSW50TEUodGhpcy5wYXJ0c1szXSk7XG4gICAgICAgIHN0cmVhbS53cml0ZUludExFKHRoaXMucGFydHNbMl0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbmV0d29ya0Rlc2VyaWFsaXplKHN0cmVhbTogYW55KTogVVVJRCB7XG4gICAgICAgIGNvbnN0IHBhcnQxID0gc3RyZWFtLnJlYWRJbnRMRSgpO1xuICAgICAgICBjb25zdCBwYXJ0MCA9IHN0cmVhbS5yZWFkSW50TEUoKTtcbiAgICAgICAgY29uc3QgcGFydDMgPSBzdHJlYW0ucmVhZEludExFKCk7XG4gICAgICAgIGNvbnN0IHBhcnQyID0gc3RyZWFtLnJlYWRJbnRMRSgpO1xuICAgICAgICByZXR1cm4gbmV3IFVVSUQocGFydDAsIHBhcnQxLCBwYXJ0MiwgcGFydDMpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsSUFBcUIsT0FBckIsTUFBcUIsS0FBSztDQUN0QixRQUFtQyxDQUFDO0NBQ3BDO0NBRUEsWUFBbUIsUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxHQUFHLFVBQVUsR0FBRztFQUN4RSxLQUFLLFFBQVE7R0FBQztHQUFPO0dBQU87R0FBTztFQUFLO0VBQ3hDLEtBQUssVUFBVSxZQUFZLEtBQUssTUFBTSxLQUFNLFVBQVc7Q0FDM0Q7Q0FFQSxPQUFjLE1BQXFCO0VBQy9CLE9BQ0ksS0FBSyxNQUFNLFdBQVcsS0FBSyxNQUFNLFVBQVUsS0FBSyxNQUFNLE9BQU8sT0FBTyxVQUFVLFVBQVUsS0FBSyxNQUFNLE1BQU07Q0FFakg7Ozs7Q0FLQSxPQUFjLFdBQVcsTUFBYyxVQUFVLEdBQVM7RUFDdEQsSUFBSSxDQUFDLE1BQU0sTUFBTSxJQUFJLE1BQU0sMkJBQTJCO0VBRXRELE9BQU8sS0FBSyxXQUFXLE9BQU8sS0FBSyxLQUFLLEtBQUssRUFBRSxXQUFXLEtBQUssRUFBRSxHQUFHLEtBQUssR0FBRyxPQUFPO0NBQ3ZGOzs7O0NBS0EsT0FBYyxXQUFXLE1BQWMsU0FBdUI7RUFDMUQsSUFBSSxLQUFLLGVBQWUsSUFDcEIsTUFBTSxJQUFJLE1BQU0seUJBQXlCO0VBRzdDLE1BQU0sU0FBUyxJQUFJLGFBQWEsSUFBSTtFQUNwQyxPQUFPLElBQUksS0FBSyxPQUFPLFFBQVEsR0FBRyxPQUFPLFFBQVEsR0FBRyxPQUFPLFFBQVEsR0FBRyxPQUFPLFFBQVEsR0FBRyxPQUFPO0NBQ25HOzs7O0NBS0EsT0FBYyxlQUF1QjtFQUNqQyxPQUFPLFdBQVcsRUFDZCxxQkFBcUIsS0FDekIsQ0FBQztDQUNMOzs7O0NBS0EsT0FBYyxhQUFtQjtFQUM3QixNQUFNLGFBQWEsS0FBSyxhQUFhO0VBQ3JDLE9BQU8sS0FBSyxXQUFXLFlBQVksQ0FBQztDQUN4QztDQUVBLFdBQTBCO0VBQ3RCLE1BQU0sU0FBUyxJQUFJLGFBQWE7RUFDaEMsT0FBTyxTQUFTLEtBQUssTUFBTSxFQUFHO0VBQzlCLE9BQU8sU0FBUyxLQUFLLE1BQU0sRUFBRztFQUM5QixPQUFPLFNBQVMsS0FBSyxNQUFNLEVBQUc7RUFDOUIsT0FBTyxTQUFTLEtBQUssTUFBTSxFQUFHO0VBQzlCLE9BQU8sT0FBTyxVQUFVO0NBQzVCO0NBRUEsV0FBMEI7RUFDdEIsTUFBTSxNQUFNLEtBQUssU0FBUyxFQUFFLFNBQVMsS0FBSztFQUcxQyxNQUFNLFFBQVEsQ0FBQztFQUNmLE1BQU0sS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDMUIsTUFBTSxLQUFLLElBQUksTUFBTSxHQUFHLEVBQUssQ0FBQztFQUM5QixNQUFNLEtBQUssSUFBSSxNQUFNLElBQUksRUFBTSxDQUFDO0VBQ2hDLE1BQU0sS0FBSyxJQUFJLE1BQU0sSUFBSSxFQUFNLENBQUM7RUFDaEMsTUFBTSxLQUFLLElBQUksTUFBTSxJQUFJLEVBQU8sQ0FBQztFQUNqQyxPQUFPLE1BQU0sS0FBSyxHQUFHO0NBQ3pCO0NBRUEsYUFBNEI7RUFDeEIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsV0FBNEI7RUFDeEIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsaUJBQXdCLFFBQW1CO0VBQ3ZDLE9BQU8sV0FBVyxLQUFLLE1BQU0sRUFBRTtFQUMvQixPQUFPLFdBQVcsS0FBSyxNQUFNLEVBQUU7RUFDL0IsT0FBTyxXQUFXLEtBQUssTUFBTSxFQUFFO0VBQy9CLE9BQU8sV0FBVyxLQUFLLE1BQU0sRUFBRTtDQUNuQztDQUVBLE9BQWMsbUJBQW1CLFFBQW1CO0VBQ2hELE1BQU0sUUFBUSxPQUFPLFVBQVU7RUFDL0IsTUFBTSxRQUFRLE9BQU8sVUFBVTtFQUMvQixNQUFNLFFBQVEsT0FBTyxVQUFVO0VBRS9CLE9BQU8sSUFBSSxLQUFLLE9BQU8sT0FEVCxPQUFPLFVBQ1MsR0FBTyxLQUFLO0NBQzlDO0FBQ0oifQ==