UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

105 lines (102 loc) • 19 kB
import { literal, argument } from '@jsprismarine/brigadier'; import { CommandArgumentPosition, CommandArgumentEntity } from '../CommandArguments.es.js'; import { Vector3 } from '@jsprismarine/math'; import MovementType from '../../network/type/MovementType.es.js'; import { Command } from '../Command.es.js'; class TpCommand 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() - 0.5); } else position.setX(position.getX() + 0.5); } if (Number.isInteger(position.getZ())) { if (position.getZ() > 0) { position.setZ(position.getZ() - 0.5); } else position.setZ(position.getZ() + 0.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() - 0.5); } else position.setX(position.getX() + 0.5); } if (Number.isInteger(position.getZ())) { if (position.getZ() > 0) { position.setZ(position.getZ() - 0.5); } else position.setZ(position.getZ() + 0.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()}`; }) ) ); } } export { TpCommand as default }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHBDb21tYW5kLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZC92YW5pbGxhL1RwQ29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbW1hbmREaXNwYXRjaGVyIH0gZnJvbSAnQGpzcHJpc21hcmluZS9icmlnYWRpZXInO1xuaW1wb3J0IHsgYXJndW1lbnQsIGxpdGVyYWwgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JyaWdhZGllcic7XG5pbXBvcnQgeyBDb21tYW5kQXJndW1lbnRFbnRpdHksIENvbW1hbmRBcmd1bWVudFBvc2l0aW9uIH0gZnJvbSAnLi4vQ29tbWFuZEFyZ3VtZW50cyc7XG5cbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICdAanNwcmlzbWFyaW5lL21hdGgnO1xuaW1wb3J0IHR5cGUgUGxheWVyIGZyb20gJy4uLy4uL1BsYXllcic7XG5pbXBvcnQgTW92ZW1lbnRUeXBlIGZyb20gJy4uLy4uL25ldHdvcmsvdHlwZS9Nb3ZlbWVudFR5cGUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4uL0NvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGlkOiAnbWluZWNyYWZ0OnRwJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGVsZXBvcnRzIGEgcGxheWVyIHRvIGEgc3BlY2lmaWVkIGxvY2F0aW9uIG9yIGFub3RoZXIgZW50aXR5LicsXG4gICAgICAgICAgICBhbGlhc2VzOiBbJ3RlbGVwb3J0J10sXG4gICAgICAgICAgICBwZXJtaXNzaW9uOiAnbWluZWNyYWZ0LmNvbW1hbmQudGVsZXBvcnQnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWdpc3RlcihkaXNwYXRjaGVyOiBDb21tYW5kRGlzcGF0Y2hlcjxhbnk+KSB7XG4gICAgICAgIGRpc3BhdGNoZXIucmVnaXN0ZXIoXG4gICAgICAgICAgICBsaXRlcmFsKCd0cCcpXG4gICAgICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50KCdwb3NpdGlvbicsIG5ldyBDb21tYW5kQXJndW1lbnRQb3NpdGlvbih7IG5hbWU6ICdkZXN0aW5hdGlvbicgfSkpLmV4ZWN1dGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZSgpIGFzIFBsYXllcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc291cmNlLmlzUGxheWVyKCkpIHRocm93IG5ldyBFcnJvcihgVGhpcyBjb21tYW5kIGNhbid0IGJlIHJ1biBmcm9tIHRoZSBjb25zb2xlYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3Bvc2l0aW9uJykgYXMgVmVjdG9yMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHBvc2l0aW9uLmdldFgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmdldFgoKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnNldFgocG9zaXRpb24uZ2V0WCgpIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHBvc2l0aW9uLnNldFgocG9zaXRpb24uZ2V0WCgpICsgMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocG9zaXRpb24uZ2V0WigpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uZ2V0WigpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24uc2V0Wihwb3NpdGlvbi5nZXRaKCkgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcG9zaXRpb24uc2V0Wihwb3NpdGlvbi5nZXRaKCkgKyAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNvdXJjZS5zZXRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNb3ZlbWVudFR5cGUuVGVsZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlbGVwb3J0ZWQgJHtzb3VyY2UuZ2V0Rm9ybWF0dGVkVXNlcm5hbWUoKX0gdG8gJHtwb3NpdGlvbi5nZXRYKCl9ICR7cG9zaXRpb24uZ2V0WSgpfSAke3Bvc2l0aW9uLmdldFooKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCgncGxheWVyJywgbmV3IENvbW1hbmRBcmd1bWVudEVudGl0eSh7IG5hbWU6ICd2aWN0aW0nIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQoJ3Bvc2l0aW9uJywgbmV3IENvbW1hbmRBcmd1bWVudFBvc2l0aW9uKHsgbmFtZTogJ2Rlc3RpbmF0aW9uJyB9KSkuZXhlY3V0ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gY29udGV4dC5nZXRBcmd1bWVudCgncGxheWVyJykgYXMgUGxheWVyW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3Bvc2l0aW9uJykgYXMgVmVjdG9yMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocG9zaXRpb24uZ2V0WCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5nZXRYKCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnNldFgocG9zaXRpb24uZ2V0WCgpIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcG9zaXRpb24uc2V0WChwb3NpdGlvbi5nZXRYKCkgKyAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocG9zaXRpb24uZ2V0WigpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5nZXRaKCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnNldFoocG9zaXRpb24uZ2V0WigpIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcG9zaXRpb24uc2V0Wihwb3NpdGlvbi5nZXRaKCkgKyAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmdldHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgc3BlY2lmaWVkIHBsYXllcihzKSAmIGVudGl0KHkvaWVzKWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGVudGl0eTogUGxheWVyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZW50aXR5LnNldFBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNb3ZlbWVudFR5cGUuVGVsZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZWxlcG9ydGVkICR7dGFyZ2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eSkgPT4gZW50aXR5LmdldEZvcm1hdHRlZFVzZXJuYW1lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9IHRvICR7cG9zaXRpb24uZ2V0WCgpfSAke3Bvc2l0aW9uLmdldFkoKX0gJHtwb3NpdGlvbi5nZXRaKCl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50KCd0YXJnZXQnLCBuZXcgQ29tbWFuZEFyZ3VtZW50RW50aXR5KHsgbmFtZTogJ2Rlc3RpbmF0aW9uJyB9KSkuZXhlY3V0ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VzID0gY29udGV4dC5nZXRBcmd1bWVudCgncGxheWVyJykgYXMgUGxheWVyW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBjb250ZXh0LmdldEFyZ3VtZW50KCd0YXJnZXQnKT8uWzBdIGFzIFBsYXllcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHNwZWNpZmllZCBwbGF5ZXIocykgJiBlbnRpdCh5L2llcylgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcy5tYXAoYXN5bmMgKGVudGl0eTogUGxheWVyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkuc2V0UG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHRhcmdldC5nZXRQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTW92ZW1lbnRUeXBlLlRlbGVwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZWxlcG9ydGVkICR7c291cmNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eSkgPT4gZW50aXR5LmdldEZvcm1hdHRlZFVzZXJuYW1lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9IHRvICR7dGFyZ2V0LmdldEZvcm1hdHRlZFVzZXJuYW1lKCl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5leGVjdXRlcyhhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKCkgYXMgUGxheWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3BsYXllcicpPy5bMF0gYXMgUGxheWVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2UuaXNQbGF5ZXIoKSkgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGNvbW1hbmQgY2FuJ3QgYmUgcnVuIGZyb20gdGhlIGNvbnNvbGVgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNvdXJjZS5zZXRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgVmVjdG9yMyh0YXJnZXQuZ2V0WCgpLCB0YXJnZXQuZ2V0WSgpLCB0YXJnZXQuZ2V0WigpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTW92ZW1lbnRUeXBlLlRlbGVwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZWxlcG9ydGVkICR7c291cmNlLmdldEZvcm1hdHRlZFVzZXJuYW1lKCl9IHRvICR7dGFyZ2V0LmdldEZvcm1hdHRlZFVzZXJuYW1lKCl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxNQUFxQixrQkFBa0IsT0FBUSxDQUFBO0FBQUEsRUFDcEMsV0FBYyxHQUFBO0FBQ2pCLElBQU0sS0FBQSxDQUFBO0FBQUEsTUFDRixFQUFJLEVBQUEsY0FBQTtBQUFBLE1BQ0osV0FBYSxFQUFBLCtEQUFBO0FBQUEsTUFDYixPQUFBLEVBQVMsQ0FBQyxVQUFVLENBQUE7QUFBQSxNQUNwQixVQUFZLEVBQUE7QUFBQSxLQUNmLENBQUE7QUFBQTtBQUNMLEVBRUEsTUFBYSxTQUFTLFVBQW9DLEVBQUE7QUFDdEQsSUFB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