UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

67 lines (66 loc) • 15.9 kB
import MovementType from "../../network/type/MovementType.es.js"; import { Command } from "../Command.es.js"; import { CommandArgumentEntity, CommandArgumentPosition } from "../CommandArguments.es.js"; import { Vector3 } from "@jsprismarine/math"; import { argument, literal } from "@jsprismarine/brigadier"; //#region src/command/vanilla/TpCommand.ts var TpCommand = class extends Command { constructor() { super({ id: "minecraft:tp", description: "Teleports a player to a specified location or another entity.", aliases: ["teleport"], permission: "minecraft.command.teleport" }); } async register(dispatcher) { dispatcher.register(literal("tp").then(argument("position", new CommandArgumentPosition({ name: "destination" })).executes(async (context) => { const source = context.getSource(); if (!source.isPlayer()) throw new Error(`This command can't be run from the console`); const position = context.getArgument("position"); if (Number.isInteger(position.getX())) if (position.getX() > 0) position.setX(position.getX() - .5); else position.setX(position.getX() + .5); if (Number.isInteger(position.getZ())) if (position.getZ() > 0) position.setZ(position.getZ() - .5); else position.setZ(position.getZ() + .5); await source.setPosition({ position, type: MovementType.Teleport }); return `Teleported ${source.getFormattedUsername()} to ${position.getX()} ${position.getY()} ${position.getZ()}`; })).then(argument("player", new CommandArgumentEntity({ name: "victim" })).then(argument("position", new CommandArgumentPosition({ name: "destination" })).executes(async (context) => { const targets = context.getArgument("player"); const position = context.getArgument("position"); if (Number.isInteger(position.getX())) if (position.getX() > 0) position.setX(position.getX() - .5); else position.setX(position.getX() + .5); if (Number.isInteger(position.getZ())) if (position.getZ() > 0) position.setZ(position.getZ() - .5); else position.setZ(position.getZ() + .5); if (!targets.length) throw new Error(`Cannot find specified player(s) & entit(y/ies)`); await Promise.all(targets.map(async (entity) => await entity.setPosition({ position, type: MovementType.Teleport }))); return `Teleported ${targets.map((entity) => entity.getFormattedUsername()).join(", ")} to ${position.getX()} ${position.getY()} ${position.getZ()}`; })).then(argument("target", new CommandArgumentEntity({ name: "destination" })).executes(async (context) => { const sources = context.getArgument("player"); const target = context.getArgument("target")?.[0]; if (!sources.length) throw new Error(`Cannot find specified player(s) & entit(y/ies)`); await Promise.all(sources.map(async (entity) => entity.setPosition({ position: target.getPosition(), type: MovementType.Teleport }))); return `Teleported ${sources.map((entity) => entity.getFormattedUsername()).join(", ")} to ${target.getFormattedUsername()}`; })).executes(async (context) => { const source = context.getSource(); const target = context.getArgument("player")?.[0]; if (!source.isPlayer()) throw new Error(`This command can't be run from the console`); await source.setPosition({ position: new Vector3(target.getX(), target.getY(), target.getZ()), type: MovementType.Teleport }); return `Teleported ${source.getFormattedUsername()} to ${target.getFormattedUsername()}`; }))); } }; //#endregion export { TpCommand as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHBDb21tYW5kLmVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kL3ZhbmlsbGEvVHBDb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZERpc3BhdGNoZXIgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JyaWdhZGllcic7XG5pbXBvcnQgeyBhcmd1bWVudCwgbGl0ZXJhbCB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvYnJpZ2FkaWVyJztcbmltcG9ydCB7IENvbW1hbmRBcmd1bWVudEVudGl0eSwgQ29tbWFuZEFyZ3VtZW50UG9zaXRpb24gfSBmcm9tICcuLi9Db21tYW5kQXJndW1lbnRzJztcblxuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWF0aCc7XG5pbXBvcnQgdHlwZSBQbGF5ZXIgZnJvbSAnLi4vLi4vUGxheWVyJztcbmltcG9ydCBNb3ZlbWVudFR5cGUgZnJvbSAnLi4vLi4vbmV0d29yay90eXBlL01vdmVtZW50VHlwZSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnLi4vQ29tbWFuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRwQ29tbWFuZCBleHRlbmRzIENvbW1hbmQge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgaWQ6ICdtaW5lY3JhZnQ6dHAnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUZWxlcG9ydHMgYSBwbGF5ZXIgdG8gYSBzcGVjaWZpZWQgbG9jYXRpb24gb3IgYW5vdGhlciBlbnRpdHkuJyxcbiAgICAgICAgICAgIGFsaWFzZXM6IFsndGVsZXBvcnQnXSxcbiAgICAgICAgICAgIHBlcm1pc3Npb246ICdtaW5lY3JhZnQuY29tbWFuZC50ZWxlcG9ydCdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKGRpc3BhdGNoZXI6IENvbW1hbmREaXNwYXRjaGVyPGFueT4pIHtcbiAgICAgICAgZGlzcGF0Y2hlci5yZWdpc3RlcihcbiAgICAgICAgICAgIGxpdGVyYWwoJ3RwJylcbiAgICAgICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQoJ3Bvc2l0aW9uJywgbmV3IENvbW1hbmRBcmd1bWVudFBvc2l0aW9uKHsgbmFtZTogJ2Rlc3RpbmF0aW9uJyB9KSkuZXhlY3V0ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKCkgYXMgUGxheWVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2UuaXNQbGF5ZXIoKSkgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGNvbW1hbmQgY2FuJ3QgYmUgcnVuIGZyb20gdGhlIGNvbnNvbGVgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gY29udGV4dC5nZXRBcmd1bWVudCgncG9zaXRpb24nKSBhcyBWZWN0b3IzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocG9zaXRpb24uZ2V0WCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uZ2V0WCgpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24uc2V0WChwb3NpdGlvbi5nZXRYKCkgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcG9zaXRpb24uc2V0WChwb3NpdGlvbi5nZXRYKCkgKyAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwb3NpdGlvbi5nZXRaKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5nZXRaKCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5zZXRaKHBvc2l0aW9uLmdldFooKSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBwb3NpdGlvbi5zZXRaKHBvc2l0aW9uLmdldFooKSArIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLnNldFBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1vdmVtZW50VHlwZS5UZWxlcG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGVsZXBvcnRlZCAke3NvdXJjZS5nZXRGb3JtYXR0ZWRVc2VybmFtZSgpfSB0byAke3Bvc2l0aW9uLmdldFgoKX0gJHtwb3NpdGlvbi5nZXRZKCl9ICR7cG9zaXRpb24uZ2V0WigpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50KCdwbGF5ZXInLCBuZXcgQ29tbWFuZEFyZ3VtZW50RW50aXR5KHsgbmFtZTogJ3ZpY3RpbScgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCgncG9zaXRpb24nLCBuZXcgQ29tbWFuZEFyZ3VtZW50UG9zaXRpb24oeyBuYW1lOiAnZGVzdGluYXRpb24nIH0pKS5leGVjdXRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldHMgPSBjb250ZXh0LmdldEFyZ3VtZW50KCdwbGF5ZXInKSBhcyBQbGF5ZXJbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gY29udGV4dC5nZXRBcmd1bWVudCgncG9zaXRpb24nKSBhcyBWZWN0b3IzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwb3NpdGlvbi5nZXRYKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmdldFgoKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24uc2V0WChwb3NpdGlvbi5nZXRYKCkgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBwb3NpdGlvbi5zZXRYKHBvc2l0aW9uLmdldFgoKSArIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwb3NpdGlvbi5nZXRaKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmdldFooKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24uc2V0Wihwb3NpdGlvbi5nZXRaKCkgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBwb3NpdGlvbi5zZXRaKHBvc2l0aW9uLmdldFooKSArIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBzcGVjaWZpZWQgcGxheWVyKHMpICYgZW50aXQoeS9pZXMpYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYyAoZW50aXR5OiBQbGF5ZXIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBlbnRpdHkuc2V0UG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1vdmVtZW50VHlwZS5UZWxlcG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlbGVwb3J0ZWQgJHt0YXJnZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZW50aXR5KSA9PiBlbnRpdHkuZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKX0gdG8gJHtwb3NpdGlvbi5nZXRYKCl9ICR7cG9zaXRpb24uZ2V0WSgpfSAke3Bvc2l0aW9uLmdldFooKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQoJ3RhcmdldCcsIG5ldyBDb21tYW5kQXJndW1lbnRFbnRpdHkoeyBuYW1lOiAnZGVzdGluYXRpb24nIH0pKS5leGVjdXRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBjb250ZXh0LmdldEFyZ3VtZW50KCdwbGF5ZXInKSBhcyBQbGF5ZXJbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3RhcmdldCcpPy5bMF0gYXMgUGxheWVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgc3BlY2lmaWVkIHBsYXllcihzKSAmIGVudGl0KHkvaWVzKWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzLm1hcChhc3luYyAoZW50aXR5OiBQbGF5ZXIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5zZXRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdGFyZ2V0LmdldFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNb3ZlbWVudFR5cGUuVGVsZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlbGVwb3J0ZWQgJHtzb3VyY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZW50aXR5KSA9PiBlbnRpdHkuZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKX0gdG8gJHt0YXJnZXQuZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmV4ZWN1dGVzKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2UoKSBhcyBQbGF5ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gY29udGV4dC5nZXRBcmd1bWVudCgncGxheWVyJyk/LlswXSBhcyBQbGF5ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5pc1BsYXllcigpKSB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgY29tbWFuZCBjYW4ndCBiZSBydW4gZnJvbSB0aGUgY29uc29sZWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLnNldFBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKHRhcmdldC5nZXRYKCksIHRhcmdldC5nZXRZKCksIHRhcmdldC5nZXRaKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNb3ZlbWVudFR5cGUuVGVsZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlbGVwb3J0ZWQgJHtzb3VyY2UuZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKX0gdG8gJHt0YXJnZXQuZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxJQUFxQixZQUFyQixjQUF1QyxRQUFRO0NBQzNDLGNBQXFCO0VBQ2pCLE1BQU07R0FDRixJQUFJO0dBQ0osYUFBYTtHQUNiLFNBQVMsQ0FBQyxVQUFVO0dBQ3BCLFlBQVk7RUFDaEIsQ0FBQztDQUNMO0NBRUEsTUFBYSxTQUFTLFlBQW9DO0VBQ3RELFdBQVcsU0FDUCxRQUFRLElBQUksRUFDUCxLQUNHLFNBQVMsWUFBWSxJQUFJLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDLENBQUMsRUFBRSxTQUN2RSxPQUFP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