@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
95 lines (90 loc) • 13.9 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const minecraft = require('@jsprismarine/minecraft');
const 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":
// Bedrock
case "gamemode":
targets = targets.filter(
(entity) => entity.isPlayer() && (filter.reverse ? minecraft.getGametypeName(entity.gamemode).toLowerCase() !== filter.value.toLowerCase() : minecraft.getGametypeName(entity.gamemode).toLowerCase() === filter.value.toLowerCase())
);
break;
case "sort":
sort = filter.value;
break;
case "c":
// Bedrock
case "limit":
limit = Number.parseInt(filter.value, 10);
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;
}
targets = targets.slice(0, limit);
if (targets.length <= 0) throw new Error("no results");
return targets;
};
exports.default = ParseTargetSelector;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyc2VUYXJnZXRTZWxlY3Rvci5janMuY2pzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvUGFyc2VUYXJnZXRTZWxlY3Rvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRHYW1ldHlwZU5hbWUgfSBmcm9tICdAanNwcmlzbWFyaW5lL21pbmVjcmFmdCc7XG5pbXBvcnQgdHlwZSBQbGF5ZXIgZnJvbSAnLi4vUGxheWVyJztcbmltcG9ydCB0eXBlIHsgRW50aXR5IH0gZnJvbSAnLi4vZW50aXR5L0VudGl0eSc7XG5cbi8qKlxuICogUGFyc2UgdGFyZ2V0IHNlbGVjdG9yIGFyZ3VtZW50LlxuICpcbiAqIEByZW1hcmtzXG4gKiBBIHRhcmdldCBzZWxlY3RvciBpcyBtYWRlIHVwIG9mIDMgcGFydHM6XG4gKlxuICogLSBGaXJzdCB0aGVyZSdzIHRoZSBgQGAgKGF0IHN5bWJvbCkgcGFydCxcbiAqIG5vdGlmeWluZyB1cyB0aGF0IHRoaXMgaXMgaW4gZmFjdCBhIHRhcmdldCBzZWxlY3RvclxuICpcbiAqIC0gU2Vjb25kbHkgdGhlcmUncyB0aGUgdGFyZ2V0IHNlbGVjdG9yIHR5cGUgKGBhYCwgYGVgLCBgcGAsIGByYCwgYHNgKSxcbiAqIHRoaXMgc3BlY2lmaWVzIHdoYXQga2luZCBvZiBlbnRpdGllcyB3ZSBzaG91bGQgcXVlcnkgZm9yXG4gKiBhbmQgaW4gd2hhdCB3YXkuXG4gKlxuICogLSBUaGlyZGx5IHRoZXJlJ3MgdGhlIGFyZ3VtZW50cyxcbiAqIHRoZXkgYXJlIHNwbGl0IHVwIGluIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgaW4gdGhlXG4gKiBhcmd1bWVudD12YWx1ZSBmb3JtYXQuXG4gKlxuICogVGhpcyByZXN1bHRzIGluIGFuIGlucHV0IHNpbWlsYXIgdG86XG4gKiBgQGVbdHlwZT1wbGF5ZXIsZ2FtZW1vZGU9Y3JlYXRpdmUsbGltaXQ9M11gXG4gKlxuICogQHJldHVybnMgVGhlIGVudGl0aWVzIG1hdGNoaW5nIHRoZSB0YXJnZXQgcXVlcnlcbiAqL1xuY29uc3QgUGFyc2VUYXJnZXRTZWxlY3RvciA9ICh7XG4gICAgaW5wdXQsXG4gICAgZW50aXRpZXMsXG4gICAgc291cmNlXG59OiB7XG4gICAgaW5wdXQ6IHN0cmluZztcbiAgICBlbnRpdGllczogRW50aXR5W107XG4gICAgc291cmNlOiBFbnRpdHk7XG59KTogRW50aXR5W10gPT4ge1xuICAgIGlmICghaW5wdXQuc3RhcnRzV2l0aCgnQCcpKSB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IGRvZXMgbm90IHN0YXJ0IHdpdGggXCJAXCInKTtcblxuICAgIGxldCB0YXJnZXRzOiBFbnRpdHlbXSA9IGVudGl0aWVzO1xuXG4gICAgLy8gR2V0IGlucHV0IHdpdGhvdXQgdGhlIGF0IHN5bWJvbFxuICAgIGNvbnN0IHN0ciA9IGlucHV0LnNsaWNlKDEsIGlucHV0Lmxlbmd0aCk7XG5cbiAgICAvLyBUeXBlIGlzIGFsd2F5cyBhZnRlciB0aGUgYGFgIHN5bWJvbCBhbmQgYWx3YXlzIGJlZm9yZSB0aGUgb3B0aW9uYWwgYXJndW1lbnRzXG4gICAgY29uc3QgdHlwZTogJ2EnIHwgJ2UnIHwgJ3AnIHwgJ3InIHwgJ3MnID0gc3RyLnNwbGl0KCdbJylbMF0gYXMgYW55O1xuXG4gICAgLy8gUGFyc2UgY29tbWEtc2VwYXJhdGVkIGFyZ3VtZW50cyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAgICAvLyBbYXJnPXZhbCxhcmcyPXZhbDIsYXJnMz12YWwzXVxuICAgIGNvbnN0IGFyZ3MgPVxuICAgICAgICBzdHJcbiAgICAgICAgICAgIC5zcGxpdCgnWycpWzFdXG4gICAgICAgICAgICA/LnNwbGl0KCddJylbMF0hXG4gICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcCgoYXJnKSA9PiAoe1xuICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmcuc3BsaXQoJz0nKVswXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJnLnNwbGl0KCc9JylbMV0hLnJlcGxhY2UoJyEnLCAnJyksXG4gICAgICAgICAgICAgICAgcmV2ZXJzZTogYXJnLnNwbGl0KCc9JylbMV0hLnN0YXJ0c1dpdGgoJyEnKVxuICAgICAgICAgICAgfSkpIHx8IFtdO1xuXG4gICAgLy8gRmlsdGVyc1xuICAgIGxldCBsaW1pdCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICBzb3J0OiAnbmVhcmVzdCcgfCAnZnVydGhlc3QnIHwgJ3JhbmRvbScgfCAnYXJiaXRyYXJ5JztcblxuICAgIC8vIEFwcGx5IGZpbHRlcnMgYmFzZWQgb24gdHlwZVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdhJzpcbiAgICAgICAgICAgIHRhcmdldHMgPSB0YXJnZXRzLmZpbHRlcigoZW50aXR5KSA9PiBlbnRpdHkuaXNQbGF5ZXIoKSk7XG4gICAgICAgICAgICBzb3J0ID0gJ2FyYml0cmFyeSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgICAgICBzb3J0ID0gJ2FyYml0cmFyeSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncCc6XG4gICAgICAgICAgICBsaW1pdCA9IDE7XG4gICAgICAgICAgICBzb3J0ID0gJ25lYXJlc3QnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3InOlxuICAgICAgICAgICAgbGltaXQgPSAxO1xuICAgICAgICAgICAgc29ydCA9ICdyYW5kb20nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgbGltaXQgPSAxO1xuICAgICAgICAgICAgc29ydCA9ICdhcmJpdHJhcnknO1xuICAgICAgICAgICAgdGFyZ2V0cyA9IFtzb3VyY2VdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHR5cGUgXCIke3R5cGV9XCIgaXMgaW52YWxpZC4gRXhwZWN0ZWQgXCJhXCIsIFwiZVwiLCBcInBcIiwgXCJyXCIgb3IgXCJzXCJgKTtcbiAgICB9XG5cbiAgICBhcmdzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci5hcmd1bWVudCkge1xuICAgICAgICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci52YWx1ZS5zcGxpdCgnOicpLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHRhcmdldHMuZmlsdGVyKChlbnRpdHkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIucmV2ZXJzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZW50aXR5LmdldFR5cGUoKS5zcGxpdCgnOicpWzFdICE9PSBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVudGl0eS5nZXRUeXBlKCkuc3BsaXQoJzonKVsxXSA9PT0gZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzID0gdGFyZ2V0cy5maWx0ZXIoKGVudGl0eSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZXZlcnNlID8gZW50aXR5LmdldFR5cGUoKSAhPT0gZmlsdGVyLnZhbHVlIDogZW50aXR5LmdldFR5cGUoKSA9PT0gZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgICAgICAgIHRhcmdldHMgPSB0YXJnZXRzLmZpbHRlcigoZW50aXR5KSA9PlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIucmV2ZXJzZSA/IGVudGl0eS5nZXROYW1lKCkgIT09IGZpbHRlci52YWx1ZSA6IGVudGl0eS5nZXROYW1lKCkgPT09IGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ20nOiAvLyBCZWRyb2NrXG4gICAgICAgICAgICBjYXNlICdnYW1lbW9kZSc6IC8vIEphdmFcbiAgICAgICAgICAgICAgICB0YXJnZXRzID0gdGFyZ2V0cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChlbnRpdHkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkuaXNQbGF5ZXIoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpbHRlci5yZXZlcnNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRHYW1ldHlwZU5hbWUoKGVudGl0eSBhcyBQbGF5ZXIpLmdhbWVtb2RlKS50b0xvd2VyQ2FzZSgpICE9PSBmaWx0ZXIudmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0R2FtZXR5cGVOYW1lKChlbnRpdHkgYXMgUGxheWVyKS5nYW1lbW9kZSkudG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVyLnZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgICAgICAgICAgc29ydCA9IGZpbHRlci52YWx1ZSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2MnOiAvLyBCZWRyb2NrXG4gICAgICAgICAgICBjYXNlICdsaW1pdCc6IC8vIEphdmFcbiAgICAgICAgICAgICAgICBsaW1pdCA9IE51bWJlci5wYXJzZUludChmaWx0ZXIudmFsdWUgYXMgYW55LCAxMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHN3aXRjaCAoc29ydCkge1xuICAgICAgICBjYXNlICduZWFyZXN0JzpcbiAgICAgICAgICAgIHRhcmdldHMgPSBzb3VyY2UuZ2V0TmVhcmVzdEVudGl0eSh0YXJnZXRzLmZpbHRlcigoZW50aXR5KSA9PiBlbnRpdHkuaXNQbGF5ZXIoKSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JhbmRvbSc6XG4gICAgICAgICAgICAvLyBGSVhNRTogcmVzcGVjdCBsaW1pdCBmaWx0ZXJcbiAgICAgICAgICAgIHRhcmdldHMgPSBbdGFyZ2V0c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0YXJnZXRzLmxlbmd0aCldIV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gVE9ETzogY2FzZSAnYXJiaXRyYXJ5JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRhcmdldHMgPSB0YXJnZXRzLnNsaWNlKDAsIGxpbWl0KTtcbiAgICBpZiAodGFyZ2V0cy5sZW5ndGggPD0gMCkgdGhyb3cgbmV3IEVycm9yKCdubyByZXN1bHRzJyk7XG4gICAgcmV0dXJuIHRhcmdldHM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYXJzZVRhcmdldFNlbGVjdG9yO1xuIl0sIm5hbWVzIjpbImdldEdhbWV0eXBlTmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBMEJBLE1BQU0sc0JBQXNCLENBQUM7QUFBQSxFQUN6QixLQUFBO0FBQUEsRUFDQSxRQUFBO0FBQUEsRUFDQTtBQUNKLENBSWdCLEtBQUE7QUFDWixFQUFJLElBQUEsQ0FBQyxNQUFNLFVBQVcsQ0FBQSxHQUFHLEdBQVMsTUFBQSxJQUFJLE1BQU0sK0JBQStCLENBQUE7QUFFM0UsRUFBQSxJQUFJLE9BQW9CLEdBQUEsUUFBQTtBQUd4QixFQUFBLE1BQU0sR0FBTSxHQUFBLEtBQUEsQ0FBTSxLQUFNLENBQUEsQ0FBQSxFQUFHLE1BQU0sTUFBTSxDQUFBO0FBR3ZDLEVBQUEsTUFBTSxJ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