@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
91 lines (88 loc) • 13.8 kB
JavaScript
import { getGametypeName } from '@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 ? getGametypeName(entity.gamemode).toLowerCase() !== filter.value.toLowerCase() : 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;
};
export { ParseTargetSelector as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyc2VUYXJnZXRTZWxlY3Rvci5lcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL1BhcnNlVGFyZ2V0U2VsZWN0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0R2FtZXR5cGVOYW1lIH0gZnJvbSAnQGpzcHJpc21hcmluZS9taW5lY3JhZnQnO1xuaW1wb3J0IHR5cGUgUGxheWVyIGZyb20gJy4uL1BsYXllcic7XG5pbXBvcnQgdHlwZSB7IEVudGl0eSB9IGZyb20gJy4uL2VudGl0eS9FbnRpdHknO1xuXG4vKipcbiAqIFBhcnNlIHRhcmdldCBzZWxlY3RvciBhcmd1bWVudC5cbiAqXG4gKiBAcmVtYXJrc1xuICogQSB0YXJnZXQgc2VsZWN0b3IgaXMgbWFkZSB1cCBvZiAzIHBhcnRzOlxuICpcbiAqIC0gRmlyc3QgdGhlcmUncyB0aGUgYEBgIChhdCBzeW1ib2wpIHBhcnQsXG4gKiBub3RpZnlpbmcgdXMgdGhhdCB0aGlzIGlzIGluIGZhY3QgYSB0YXJnZXQgc2VsZWN0b3JcbiAqXG4gKiAtIFNlY29uZGx5IHRoZXJlJ3MgdGhlIHRhcmdldCBzZWxlY3RvciB0eXBlIChgYWAsIGBlYCwgYHBgLCBgcmAsIGBzYCksXG4gKiB0aGlzIHNwZWNpZmllcyB3aGF0IGtpbmQgb2YgZW50aXRpZXMgd2Ugc2hvdWxkIHF1ZXJ5IGZvclxuICogYW5kIGluIHdoYXQgd2F5LlxuICpcbiAqIC0gVGhpcmRseSB0aGVyZSdzIHRoZSBhcmd1bWVudHMsXG4gKiB0aGV5IGFyZSBzcGxpdCB1cCBpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGluIHRoZVxuICogYXJndW1lbnQ9dmFsdWUgZm9ybWF0LlxuICpcbiAqIFRoaXMgcmVzdWx0cyBpbiBhbiBpbnB1dCBzaW1pbGFyIHRvOlxuICogYEBlW3R5cGU9cGxheWVyLGdhbWVtb2RlPWNyZWF0aXZlLGxpbWl0PTNdYFxuICpcbiAqIEByZXR1cm5zIFRoZSBlbnRpdGllcyBtYXRjaGluZyB0aGUgdGFyZ2V0IHF1ZXJ5XG4gKi9cbmNvbnN0IFBhcnNlVGFyZ2V0U2VsZWN0b3IgPSAoe1xuICAgIGlucHV0LFxuICAgIGVudGl0aWVzLFxuICAgIHNvdXJjZVxufToge1xuICAgIGlucHV0OiBzdHJpbmc7XG4gICAgZW50aXRpZXM6IEVudGl0eVtdO1xuICAgIHNvdXJjZTogRW50aXR5O1xufSk6IEVudGl0eVtdID0+IHtcbiAgICBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoJ0AnKSkgdGhyb3cgbmV3IEVycm9yKCdpbnB1dCBkb2VzIG5vdCBzdGFydCB3aXRoIFwiQFwiJyk7XG5cbiAgICBsZXQgdGFyZ2V0czogRW50aXR5W10gPSBlbnRpdGllcztcblxuICAgIC8vIEdldCBpbnB1dCB3aXRob3V0IHRoZSBhdCBzeW1ib2xcbiAgICBjb25zdCBzdHIgPSBpbnB1dC5zbGljZSgxLCBpbnB1dC5sZW5ndGgpO1xuXG4gICAgLy8gVHlwZSBpcyBhbHdheXMgYWZ0ZXIgdGhlIGBhYCBzeW1ib2wgYW5kIGFsd2F5cyBiZWZvcmUgdGhlIG9wdGlvbmFsIGFyZ3VtZW50c1xuICAgIGNvbnN0IHR5cGU6ICdhJyB8ICdlJyB8ICdwJyB8ICdyJyB8ICdzJyA9IHN0ci5zcGxpdCgnWycpWzBdIGFzIGFueTtcblxuICAgIC8vIFBhcnNlIGNvbW1hLXNlcGFyYXRlZCBhcmd1bWVudHMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gICAgLy8gW2FyZz12YWwsYXJnMj12YWwyLGFyZzM9dmFsM11cbiAgICBjb25zdCBhcmdzID1cbiAgICAgICAgc3RyXG4gICAgICAgICAgICAuc3BsaXQoJ1snKVsxXVxuICAgICAgICAgICAgPy5zcGxpdCgnXScpWzBdIVxuICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoKGFyZykgPT4gKHtcbiAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJnLnNwbGl0KCc9JylbMF0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZy5zcGxpdCgnPScpWzFdIS5yZXBsYWNlKCchJywgJycpLFxuICAgICAgICAgICAgICAgIHJldmVyc2U6IGFyZy5zcGxpdCgnPScpWzFdIS5zdGFydHNXaXRoKCchJylcbiAgICAgICAgICAgIH0pKSB8fCBbXTtcblxuICAgIC8vIEZpbHRlcnNcbiAgICBsZXQgbGltaXQgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgc29ydDogJ25lYXJlc3QnIHwgJ2Z1cnRoZXN0JyB8ICdyYW5kb20nIHwgJ2FyYml0cmFyeSc7XG5cbiAgICAvLyBBcHBseSBmaWx0ZXJzIGJhc2VkIG9uIHR5cGVcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICB0YXJnZXRzID0gdGFyZ2V0cy5maWx0ZXIoKGVudGl0eSkgPT4gZW50aXR5LmlzUGxheWVyKCkpO1xuICAgICAgICAgICAgc29ydCA9ICdhcmJpdHJhcnknO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2UnOlxuICAgICAgICAgICAgc29ydCA9ICdhcmJpdHJhcnknO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3AnOlxuICAgICAgICAgICAgbGltaXQgPSAxO1xuICAgICAgICAgICAgc29ydCA9ICduZWFyZXN0JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgIGxpbWl0ID0gMTtcbiAgICAgICAgICAgIHNvcnQgPSAncmFuZG9tJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgIGxpbWl0ID0gMTtcbiAgICAgICAgICAgIHNvcnQgPSAnYXJiaXRyYXJ5JztcbiAgICAgICAgICAgIHRhcmdldHMgPSBbc291cmNlXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eXBlIFwiJHt0eXBlfVwiIGlzIGludmFsaWQuIEV4cGVjdGVkIFwiYVwiLCBcImVcIiwgXCJwXCIsIFwiclwiIG9yIFwic1wiYCk7XG4gICAgfVxuXG4gICAgYXJncy5mb3JFYWNoKChmaWx0ZXIpID0+IHtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXIuYXJndW1lbnQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudmFsdWUuc3BsaXQoJzonKS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHMgPSB0YXJnZXRzLmZpbHRlcigoZW50aXR5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnJldmVyc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVudGl0eS5nZXRUeXBlKCkuc3BsaXQoJzonKVsxXSAhPT0gZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlbnRpdHkuZ2V0VHlwZSgpLnNwbGl0KCc6JylbMV0gPT09IGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHRhcmdldHMuZmlsdGVyKChlbnRpdHkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIucmV2ZXJzZSA/IGVudGl0eS5nZXRUeXBlKCkgIT09IGZpbHRlci52YWx1ZSA6IGVudGl0eS5nZXRUeXBlKCkgPT09IGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgICAgICAgICB0YXJnZXRzID0gdGFyZ2V0cy5maWx0ZXIoKGVudGl0eSkgPT5cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnJldmVyc2UgPyBlbnRpdHkuZ2V0TmFtZSgpICE9PSBmaWx0ZXIudmFsdWUgOiBlbnRpdHkuZ2V0TmFtZSgpID09PSBmaWx0ZXIudmFsdWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdtJzogLy8gQmVkcm9ja1xuICAgICAgICAgICAgY2FzZSAnZ2FtZW1vZGUnOiAvLyBKYXZhXG4gICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHRhcmdldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZW50aXR5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LmlzUGxheWVyKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXIucmV2ZXJzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0R2FtZXR5cGVOYW1lKChlbnRpdHkgYXMgUGxheWVyKS5nYW1lbW9kZSkudG9Mb3dlckNhc2UoKSAhPT0gZmlsdGVyLnZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldEdhbWV0eXBlTmFtZSgoZW50aXR5IGFzIFBsYXllcikuZ2FtZW1vZGUpLnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlci52YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICAgICAgICAgIHNvcnQgPSBmaWx0ZXIudmFsdWUgYXMgYW55O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjJzogLy8gQmVkcm9ja1xuICAgICAgICAgICAgY2FzZSAnbGltaXQnOiAvLyBKYXZhXG4gICAgICAgICAgICAgICAgbGltaXQgPSBOdW1iZXIucGFyc2VJbnQoZmlsdGVyLnZhbHVlIGFzIGFueSwgMTApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKHNvcnQpIHtcbiAgICAgICAgY2FzZSAnbmVhcmVzdCc6XG4gICAgICAgICAgICB0YXJnZXRzID0gc291cmNlLmdldE5lYXJlc3RFbnRpdHkodGFyZ2V0cy5maWx0ZXIoKGVudGl0eSkgPT4gZW50aXR5LmlzUGxheWVyKCkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyYW5kb20nOlxuICAgICAgICAgICAgLy8gRklYTUU6IHJlc3BlY3QgbGltaXQgZmlsdGVyXG4gICAgICAgICAgICB0YXJnZXRzID0gW3RhcmdldHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGFyZ2V0cy5sZW5ndGgpXSFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIFRPRE86IGNhc2UgJ2FyYml0cmFyeSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0YXJnZXRzID0gdGFyZ2V0cy5zbGljZSgwLCBsaW1pdCk7XG4gICAgaWYgKHRhcmdldHMubGVuZ3RoIDw9IDApIHRocm93IG5ldyBFcnJvcignbm8gcmVzdWx0cycpO1xuICAgIHJldHVybiB0YXJnZXRzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFyc2VUYXJnZXRTZWxlY3RvcjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTBCQSxNQUFNLHNCQUFzQixDQUFDO0FBQUEsRUFDekIsS0FBQTtBQUFBLEVBQ0EsUUFBQTtBQUFBLEVBQ0E7QUFDSixDQUlnQixLQUFBO0FBQ1osRUFBSSxJQUFBLENBQUMsTUFBTSxVQUFXLENBQUEsR0FBRyxHQUFTLE1BQUEsSUFBSSxNQUFNLCtCQUErQixDQUFBO0FBRTNFLEVBQUEsSUFBSSxPQUFvQixHQUFBLFFBQUE7QUFHeEIsRUFBQSxNQUFNLEdBQU0sR0FBQSxLQUFBLENBQU0sS0FBTSxDQUFBLENBQUEsRUFBRyxNQUFNLE1BQU0sQ0FBQTtBQUd2QyxFQUFBLE1BQU0sSUFBb0MsR0FBQSxHQUFBLENBQUksS0FB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