UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

104 lines (103 loc) 12.6 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); require("../_virtual/_rolldown/runtime.cjs.cjs"); let _jsprismarine_minecraft = require("@jsprismarine/minecraft"); //#region src/utils/ParseTargetSelector.ts /** * Parse target selector argument. * * @remarks * A target selector is made up of 3 parts: * * - First there's the `@` (at symbol) part, * notifying us that this is in fact a target selector * * - Secondly there's the target selector type (`a`, `e`, `p`, `r`, `s`), * this specifies what kind of entities we should query for * and in what way. * * - Thirdly there's the arguments, * they are split up in a comma-separated list in the * argument=value format. * * This results in an input similar to: * `@e[type=player,gamemode=creative,limit=3]` * * @returns The entities matching the target query */ var ParseTargetSelector = ({ input, entities, source }) => { if (!input.startsWith("@")) throw new Error("input does not start with \"@\""); let targets = entities; const str = input.slice(1, input.length); const type = str.split("[")[0]; const args = str.split("[")[1]?.split("]")[0].split(",").map((arg) => ({ argument: arg.split("=")[0], value: arg.split("=")[1].replace("!", ""), reverse: arg.split("=")[1].startsWith("!") })) || []; let limit = Number.MAX_SAFE_INTEGER, sort; switch (type) { case "a": targets = targets.filter((entity) => entity.isPlayer()); sort = "arbitrary"; break; case "e": sort = "arbitrary"; break; case "p": limit = 1; sort = "nearest"; break; case "r": limit = 1; sort = "random"; break; case "s": limit = 1; sort = "arbitrary"; targets = [source]; break; default: throw new Error(`type "${type}" is invalid. Expected "a", "e", "p", "r" or "s"`); } args.forEach((filter) => { switch (filter.argument) { case "type": if (filter.value.split(":").length === 1) targets = targets.filter((entity) => filter.reverse ? entity.getType().split(":")[1] !== filter.value : entity.getType().split(":")[1] === filter.value); else targets = targets.filter((entity) => filter.reverse ? entity.getType() !== filter.value : entity.getType() === filter.value); break; case "name": targets = targets.filter((entity) => filter.reverse ? entity.getName() !== filter.value : entity.getName() === filter.value); break; case "m": case "gamemode": targets = targets.filter((entity) => entity.isPlayer() && (filter.reverse ? (0, _jsprismarine_minecraft.getGametypeName)(entity.gamemode).toLowerCase() !== filter.value.toLowerCase() : (0, _jsprismarine_minecraft.getGametypeName)(entity.gamemode).toLowerCase() === filter.value.toLowerCase())); break; case "sort": sort = filter.value; break; case "c": case "limit": limit = Number.parseInt(filter.value, 10); break; default: break; } }); switch (sort) { case "nearest": targets = source.getNearestEntity(targets.filter((entity) => entity.isPlayer())); break; case "random": targets = [targets[Math.floor(Math.random() * targets.length)]]; break; default: break; } targets = targets.slice(0, limit); if (targets.length <= 0) throw new Error("no results"); return targets; }; //#endregion exports.default = ParseTargetSelector; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyc2VUYXJnZXRTZWxlY3Rvci5janMuY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9QYXJzZVRhcmdldFNlbGVjdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEdhbWV0eXBlTmFtZSB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWluZWNyYWZ0JztcbmltcG9ydCB0eXBlIFBsYXllciBmcm9tICcuLi9QbGF5ZXInO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgfSBmcm9tICcuLi9lbnRpdHkvRW50aXR5JztcblxuLyoqXG4gKiBQYXJzZSB0YXJnZXQgc2VsZWN0b3IgYXJndW1lbnQuXG4gKlxuICogQHJlbWFya3NcbiAqIEEgdGFyZ2V0IHNlbGVjdG9yIGlzIG1hZGUgdXAgb2YgMyBwYXJ0czpcbiAqXG4gKiAtIEZpcnN0IHRoZXJlJ3MgdGhlIGBAYCAoYXQgc3ltYm9sKSBwYXJ0LFxuICogbm90aWZ5aW5nIHVzIHRoYXQgdGhpcyBpcyBpbiBmYWN0IGEgdGFyZ2V0IHNlbGVjdG9yXG4gKlxuICogLSBTZWNvbmRseSB0aGVyZSdzIHRoZSB0YXJnZXQgc2VsZWN0b3IgdHlwZSAoYGFgLCBgZWAsIGBwYCwgYHJgLCBgc2ApLFxuICogdGhpcyBzcGVjaWZpZXMgd2hhdCBraW5kIG9mIGVudGl0aWVzIHdlIHNob3VsZCBxdWVyeSBmb3JcbiAqIGFuZCBpbiB3aGF0IHdheS5cbiAqXG4gKiAtIFRoaXJkbHkgdGhlcmUncyB0aGUgYXJndW1lbnRzLFxuICogdGhleSBhcmUgc3BsaXQgdXAgaW4gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBpbiB0aGVcbiAqIGFyZ3VtZW50PXZhbHVlIGZvcm1hdC5cbiAqXG4gKiBUaGlzIHJlc3VsdHMgaW4gYW4gaW5wdXQgc2ltaWxhciB0bzpcbiAqIGBAZVt0eXBlPXBsYXllcixnYW1lbW9kZT1jcmVhdGl2ZSxsaW1pdD0zXWBcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW50aXRpZXMgbWF0Y2hpbmcgdGhlIHRhcmdldCBxdWVyeVxuICovXG5jb25zdCBQYXJzZVRhcmdldFNlbGVjdG9yID0gKHtcbiAgICBpbnB1dCxcbiAgICBlbnRpdGllcyxcbiAgICBzb3VyY2Vcbn06IHtcbiAgICBpbnB1dDogc3RyaW5nO1xuICAgIGVudGl0aWVzOiBFbnRpdHlbXTtcbiAgICBzb3VyY2U6IEVudGl0eTtcbn0pOiBFbnRpdHlbXSA9PiB7XG4gICAgaWYgKCFpbnB1dC5zdGFydHNXaXRoKCdAJykpIHRocm93IG5ldyBFcnJvcignaW5wdXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBcIkBcIicpO1xuXG4gICAgbGV0IHRhcmdldHM6IEVudGl0eVtdID0gZW50aXRpZXM7XG5cbiAgICAvLyBHZXQgaW5wdXQgd2l0aG91dCB0aGUgYXQgc3ltYm9sXG4gICAgY29uc3Qgc3RyID0gaW5wdXQuc2xpY2UoMSwgaW5wdXQubGVuZ3RoKTtcblxuICAgIC8vIFR5cGUgaXMgYWx3YXlzIGFmdGVyIHRoZSBgYWAgc3ltYm9sIGFuZCBhbHdheXMgYmVmb3JlIHRoZSBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBjb25zdCB0eXBlOiAnYScgfCAnZScgfCAncCcgfCAncicgfCAncycgPSBzdHIuc3BsaXQoJ1snKVswXSBhcyBhbnk7XG5cbiAgICAvLyBQYXJzZSBjb21tYS1zZXBhcmF0ZWQgYXJndW1lbnRzIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICAgIC8vIFthcmc9dmFsLGFyZzI9dmFsMixhcmczPXZhbDNdXG4gICAgY29uc3QgYXJncyA9XG4gICAgICAgIHN0clxuICAgICAgICAgICAgLnNwbGl0KCdbJylbMV1cbiAgICAgICAgICAgID8uc3BsaXQoJ10nKVswXSFcbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKChhcmcpID0+ICh7XG4gICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZy5zcGxpdCgnPScpWzBdLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmcuc3BsaXQoJz0nKVsxXSEucmVwbGFjZSgnIScsICcnKSxcbiAgICAgICAgICAgICAgICByZXZlcnNlOiBhcmcuc3BsaXQoJz0nKVsxXSEuc3RhcnRzV2l0aCgnIScpXG4gICAgICAgICAgICB9KSkgfHwgW107XG5cbiAgICAvLyBGaWx0ZXJzXG4gICAgbGV0IGxpbWl0ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICAgIHNvcnQ6ICduZWFyZXN0JyB8ICdmdXJ0aGVzdCcgfCAncmFuZG9tJyB8ICdhcmJpdHJhcnknO1xuXG4gICAgLy8gQXBwbHkgZmlsdGVycyBiYXNlZCBvbiB0eXBlXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAgICAgdGFyZ2V0cyA9IHRhcmdldHMuZmlsdGVyKChlbnRpdHkpID0+IGVudGl0eS5pc1BsYXllcigpKTtcbiAgICAgICAgICAgIHNvcnQgPSAnYXJiaXRyYXJ5JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlJzpcbiAgICAgICAgICAgIHNvcnQgPSAnYXJiaXRyYXJ5JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwJzpcbiAgICAgICAgICAgIGxpbWl0ID0gMTtcbiAgICAgICAgICAgIHNvcnQgPSAnbmVhcmVzdCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgICBsaW1pdCA9IDE7XG4gICAgICAgICAgICBzb3J0ID0gJ3JhbmRvbSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICBsaW1pdCA9IDE7XG4gICAgICAgICAgICBzb3J0ID0gJ2FyYml0cmFyeSc7XG4gICAgICAgICAgICB0YXJnZXRzID0gW3NvdXJjZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdHlwZSBcIiR7dHlwZX1cIiBpcyBpbnZhbGlkLiBFeHBlY3RlZCBcImFcIiwgXCJlXCIsIFwicFwiLCBcInJcIiBvciBcInNcImApO1xuICAgIH1cblxuICAgIGFyZ3MuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLmFyZ3VtZW50KSB7XG4gICAgICAgICAgICBjYXNlICd0eXBlJzpcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnZhbHVlLnNwbGl0KCc6JykubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzID0gdGFyZ2V0cy5maWx0ZXIoKGVudGl0eSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZXZlcnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlbnRpdHkuZ2V0VHlwZSgpLnNwbGl0KCc6JylbMV0gIT09IGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZW50aXR5LmdldFR5cGUoKS5zcGxpdCgnOicpWzFdID09PSBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHMgPSB0YXJnZXRzLmZpbHRlcigoZW50aXR5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnJldmVyc2UgPyBlbnRpdHkuZ2V0VHlwZSgpICE9PSBmaWx0ZXIudmFsdWUgOiBlbnRpdHkuZ2V0VHlwZSgpID09PSBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHRhcmdldHMuZmlsdGVyKChlbnRpdHkpID0+XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZXZlcnNlID8gZW50aXR5LmdldE5hbWUoKSAhPT0gZmlsdGVyLnZhbHVlIDogZW50aXR5LmdldE5hbWUoKSA9PT0gZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnbSc6IC8vIEJlZHJvY2tcbiAgICAgICAgICAgIGNhc2UgJ2dhbWVtb2RlJzogLy8gSmF2YVxuICAgICAgICAgICAgICAgIHRhcmdldHMgPSB0YXJnZXRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGVudGl0eSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5pc1BsYXllcigpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVyLnJldmVyc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdldEdhbWV0eXBlTmFtZSgoZW50aXR5IGFzIFBsYXllcikuZ2FtZW1vZGUpLnRvTG93ZXJDYXNlKCkgIT09IGZpbHRlci52YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRHYW1ldHlwZU5hbWUoKGVudGl0eSBhcyBQbGF5ZXIpLmdhbWVtb2RlKS50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXIudmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgICAgICAgICBzb3J0ID0gZmlsdGVyLnZhbHVlIGFzIGFueTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnYyc6IC8vIEJlZHJvY2tcbiAgICAgICAgICAgIGNhc2UgJ2xpbWl0JzogLy8gSmF2YVxuICAgICAgICAgICAgICAgIGxpbWl0ID0gTnVtYmVyLnBhcnNlSW50KGZpbHRlci52YWx1ZSBhcyBhbnksIDEwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3dpdGNoIChzb3J0KSB7XG4gICAgICAgIGNhc2UgJ25lYXJlc3QnOlxuICAgICAgICAgICAgdGFyZ2V0cyA9IHNvdXJjZS5nZXROZWFyZXN0RW50aXR5KHRhcmdldHMuZmlsdGVyKChlbnRpdHkpID0+IGVudGl0eS5pc1BsYXllcigpKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmFuZG9tJzpcbiAgICAgICAgICAgIC8vIEZJWE1FOiByZXNwZWN0IGxpbWl0IGZpbHRlclxuICAgICAgICAgICAgdGFyZ2V0cyA9IFt0YXJnZXRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRhcmdldHMubGVuZ3RoKV0hXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBUT0RPOiBjYXNlICdhcmJpdHJhcnknOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGFyZ2V0cyA9IHRhcmdldHMuc2xpY2UoMCwgbGltaXQpO1xuICAgIGlmICh0YXJnZXRzLmxlbmd0aCA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ25vIHJlc3VsdHMnKTtcbiAgICByZXR1cm4gdGFyZ2V0cztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNlVGFyZ2V0U2VsZWN0b3I7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQSxJQUFNLHVCQUF1QixFQUN6QixPQUNBLFVBQ0EsYUFLWTtDQUNaLElBQUksQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFHLE1BQU0sSUFBSSxNQUFNLGlDQUErQjtDQUUzRSxJQUFJLFVBQW9CO0NBR3hCLE1BQU0sTUFBTSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU07Q0FHdkMsTUFBTSxPQUFvQyxJQUFJLE1BQU0sR0FBRyxFQUFFO0NBSXpELE1BQU0sT0FDRixJQUNLLE1BQU0sR0FBRyxFQUFFLElBQ1YsTUFBTSxHQUFHLEVBQUUsR0FDWixNQUFNLEdBQUcsRUFDVCxLQUFLLFNBQVM7RUFDWCxVQUFVLElBQUksTUFBTSxHQUFHLEVBQUU7RUFDekIsT0FBTyxJQUFJLE1BQU0sR0FBRyxFQUFFLEdBQUksUUFBUSxLQUFLLEVBQUU7RUFDekMsU0FBUyxJQUFJLE1BQU0sR0FBRyxFQUFFLEdBQUksV0FBVyxHQUFHO0NBQzlDLEVBQUUsS0FBSyxDQUFDO0NBR2hCLElBQUksUUFBUSxPQUFPLGtCQUNmO0NBR0osUUFBUSxNQUFSO0VBQ0ksS0FBSztHQUNELFVBQVUsUUFBUSxRQUFRLFdBQVcsT0FBTyxTQUFTLENBQUM7R0FDdEQsT0FBTztHQUNQO0VBQ0osS0FBSztHQUNELE9BQU87R0FDUDtFQUNKLEtBQUs7R0FDRCxRQUFRO0dBQ1IsT0FBTztHQUNQO0VBQ0osS0FBSztHQUNELFFBQVE7R0FDUixPQUFPO0dBQ1A7RUFDSixLQUFLO0dBQ0QsUUFBUTtHQUNSLE9BQU87R0FDUCxVQUFVLENBQUMsTUFBTTtHQUNqQjtFQUNKLFNBQ0ksTUFBTSxJQUFJLE1BQU0sU0FBUyxLQUFLLGlEQUFpRDtDQUN2RjtDQUVBLEtBQUssU0FBUyxXQUFXO0VBQ3JCLFFBQVEsT0FBTyxVQUFmO0dBQ0ksS0FBSztJQUNELElBQUksT0FBTyxNQUFNLE1BQU0sR0FBRyxFQUFFLFdBQVcsR0FDbkMsVUFBVSxRQUFRLFFBQVEsV0FDdEIsT0FBTyxVQUNELE9BQU8sUUFBUSxFQUFFLE1BQU0sR0FBRyxFQUFFLE9BQU8sT0FBTyxRQUMxQyxPQUFPLFFBQVEsRUFBRSxNQUFNLEdBQUcsRUFBRSxPQUFPLE9BQU8sS0FDcEQ7U0FFQSxVQUFVLFFBQVEsUUFBUSxXQUN0QixPQUFPLFVBQVUsT0FBTyxRQUFRLE1BQU0sT0FBTyxRQUFRLE9BQU8sUUFBUSxNQUFNLE9BQU8sS0FDckY7SUFDSjtHQUVKLEtBQUs7SUFDRCxVQUFVLFFBQVEsUUFBUSxXQUN0QixPQUFPLFVBQVUsT0FBTyxRQUFRLE1BQU0sT0FBTyxRQUFRLE9BQU8sUUFBUSxNQUFNLE9BQU8sS0FDckY7SUFDQTtHQUVKLEtBQUs7R0FDTCxLQUFLO0lBQ0QsVUFBVSxRQUFRLFFBQ2IsV0FDRyxPQUFPLFNBQVMsTUFDZixPQUFPLFdBQUEsR0FBQSx3QkFBQSxpQkFDZSxPQUFrQixRQUFRLEVBQUUsWUFBWSxNQUFNLE9BQU8sTUFBTSxZQUFZLEtBQUEsR0FBQSx3QkFBQSxpQkFDdkUsT0FBa0IsUUFBUSxFQUFFLFlBQVksTUFBTSxPQUFPLE1BQU0sWUFBWSxFQUN0RztJQUNBO0dBRUosS0FBSztJQUNELE9BQU8sT0FBTztJQUNkO0dBRUosS0FBSztHQUNMLEtBQUs7SUFDRCxRQUFRLE9BQU8sU0FBUyxPQUFPLE9BQWMsRUFBRTtJQUMvQztHQUVKLFNBQ0k7RUFDUjtDQUNKLENBQUM7Q0FFRCxRQUFRLE1BQVI7RUFDSSxLQUFLO0dBQ0QsVUFBVSxPQUFPLGlCQUFpQixRQUFRLFFBQVEsV0FBVyxPQUFPLFNBQVMsQ0FBQyxDQUFDO0dBQy9FO0VBQ0osS0FBSztHQUVELFVBQVUsQ0FBQyxRQUFRLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSxRQUFRLE1BQU0sRUFBRztHQUMvRDtFQUVKLFNBQ0k7Q0FDUjtDQUVBLFVBQVUsUUFBUSxNQUFNLEdBQUcsS0FBSztDQUNoQyxJQUFJLFFBQVEsVUFBVSxHQUFHLE1BQU0sSUFBSSxNQUFNLFlBQVk7Q0FDckQsT0FBTztBQUNYIn0=