UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

73 lines (72 loc) • 16.7 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); require("../../_virtual/_rolldown/runtime.cjs.cjs"); const require_network_type_MovementType = require("../../network/type/MovementType.cjs.cjs"); const require_command_Command = require("../Command.cjs.cjs"); const require_command_CommandArguments = require("../CommandArguments.cjs.cjs"); let _jsprismarine_math = require("@jsprismarine/math"); let _jsprismarine_brigadier = require("@jsprismarine/brigadier"); //#region src/command/vanilla/TpCommand.ts var TpCommand = class extends require_command_Command.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((0, _jsprismarine_brigadier.literal)("tp").then((0, _jsprismarine_brigadier.argument)("position", new require_command_CommandArguments.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: require_network_type_MovementType.default.Teleport }); return `Teleported ${source.getFormattedUsername()} to ${position.getX()} ${position.getY()} ${position.getZ()}`; })).then((0, _jsprismarine_brigadier.argument)("player", new require_command_CommandArguments.CommandArgumentEntity({ name: "victim" })).then((0, _jsprismarine_brigadier.argument)("position", new require_command_CommandArguments.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: require_network_type_MovementType.default.Teleport }))); return `Teleported ${targets.map((entity) => entity.getFormattedUsername()).join(", ")} to ${position.getX()} ${position.getY()} ${position.getZ()}`; })).then((0, _jsprismarine_brigadier.argument)("target", new require_command_CommandArguments.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: require_network_type_MovementType.default.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 _jsprismarine_math.Vector3(target.getX(), target.getY(), target.getZ()), type: require_network_type_MovementType.default.Teleport }); return `Teleported ${source.getFormattedUsername()} to ${target.getFormattedUsername()}`; }))); } }; //#endregion exports.default = TpCommand; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHBDb21tYW5kLmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmQvdmFuaWxsYS9UcENvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21tYW5kRGlzcGF0Y2hlciB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvYnJpZ2FkaWVyJztcbmltcG9ydCB7IGFyZ3VtZW50LCBsaXRlcmFsIH0gZnJvbSAnQGpzcHJpc21hcmluZS9icmlnYWRpZXInO1xuaW1wb3J0IHsgQ29tbWFuZEFyZ3VtZW50RW50aXR5LCBDb21tYW5kQXJndW1lbnRQb3NpdGlvbiB9IGZyb20gJy4uL0NvbW1hbmRBcmd1bWVudHMnO1xuXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGpzcHJpc21hcmluZS9tYXRoJztcbmltcG9ydCB0eXBlIFBsYXllciBmcm9tICcuLi8uLi9QbGF5ZXInO1xuaW1wb3J0IE1vdmVtZW50VHlwZSBmcm9tICcuLi8uLi9uZXR3b3JrL3R5cGUvTW92ZW1lbnRUeXBlJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9Db21tYW5kJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHBDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBpZDogJ21pbmVjcmFmdDp0cCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RlbGVwb3J0cyBhIHBsYXllciB0byBhIHNwZWNpZmllZCBsb2NhdGlvbiBvciBhbm90aGVyIGVudGl0eS4nLFxuICAgICAgICAgICAgYWxpYXNlczogWyd0ZWxlcG9ydCddLFxuICAgICAgICAgICAgcGVybWlzc2lvbjogJ21pbmVjcmFmdC5jb21tYW5kLnRlbGVwb3J0J1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIoZGlzcGF0Y2hlcjogQ29tbWFuZERpc3BhdGNoZXI8YW55Pikge1xuICAgICAgICBkaXNwYXRjaGVyLnJlZ2lzdGVyKFxuICAgICAgICAgICAgbGl0ZXJhbCgndHAnKVxuICAgICAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCgncG9zaXRpb24nLCBuZXcgQ29tbWFuZEFyZ3VtZW50UG9zaXRpb24oeyBuYW1lOiAnZGVzdGluYXRpb24nIH0pKS5leGVjdXRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2UoKSBhcyBQbGF5ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5pc1BsYXllcigpKSB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgY29tbWFuZCBjYW4ndCBiZSBydW4gZnJvbSB0aGUgY29uc29sZWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBjb250ZXh0LmdldEFyZ3VtZW50KCdwb3NpdGlvbicpIGFzIFZlY3RvcjM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwb3NpdGlvbi5nZXRYKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5nZXRYKCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5zZXRYKHBvc2l0aW9uLmdldFgoKSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBwb3NpdGlvbi5zZXRYKHBvc2l0aW9uLmdldFgoKSArIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHBvc2l0aW9uLmdldFooKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmdldFooKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnNldFoocG9zaXRpb24uZ2V0WigpIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHBvc2l0aW9uLnNldFoocG9zaXRpb24uZ2V0WigpICsgMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uuc2V0UG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTW92ZW1lbnRUeXBlLlRlbGVwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZWxlcG9ydGVkICR7c291cmNlLmdldEZvcm1hdHRlZFVzZXJuYW1lKCl9IHRvICR7cG9zaXRpb24uZ2V0WCgpfSAke3Bvc2l0aW9uLmdldFkoKX0gJHtwb3NpdGlvbi5nZXRaKCl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQoJ3BsYXllcicsIG5ldyBDb21tYW5kQXJndW1lbnRFbnRpdHkoeyBuYW1lOiAndmljdGltJyB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50KCdwb3NpdGlvbicsIG5ldyBDb21tYW5kQXJndW1lbnRQb3NpdGlvbih7IG5hbWU6ICdkZXN0aW5hdGlvbicgfSkpLmV4ZWN1dGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3BsYXllcicpIGFzIFBsYXllcltdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBjb250ZXh0LmdldEFyZ3VtZW50KCdwb3NpdGlvbicpIGFzIFZlY3RvcjM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHBvc2l0aW9uLmdldFgoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uZ2V0WCgpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5zZXRYKHBvc2l0aW9uLmdldFgoKSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHBvc2l0aW9uLnNldFgocG9zaXRpb24uZ2V0WCgpICsgMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHBvc2l0aW9uLmdldFooKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uZ2V0WigpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5zZXRaKHBvc2l0aW9uLmdldFooKSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHBvc2l0aW9uLnNldFoocG9zaXRpb24uZ2V0WigpICsgMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHNwZWNpZmllZCBwbGF5ZXIocykgJiBlbnRpdCh5L2llcylgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIChlbnRpdHk6IFBsYXllcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGVudGl0eS5zZXRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTW92ZW1lbnRUeXBlLlRlbGVwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGVsZXBvcnRlZCAke3RhcmdldHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChlbnRpdHkpID0+IGVudGl0eS5nZXRGb3JtYXR0ZWRVc2VybmFtZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfSB0byAke3Bvc2l0aW9uLmdldFgoKX0gJHtwb3NpdGlvbi5nZXRZKCl9ICR7cG9zaXRpb24uZ2V0WigpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCgndGFyZ2V0JywgbmV3IENvbW1hbmRBcmd1bWVudEVudGl0eSh7IG5hbWU6ICdkZXN0aW5hdGlvbicgfSkpLmV4ZWN1dGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlcyA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3BsYXllcicpIGFzIFBsYXllcltdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gY29udGV4dC5nZXRBcmd1bWVudCgndGFyZ2V0Jyk/LlswXSBhcyBQbGF5ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc291cmNlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBzcGVjaWZpZWQgcGxheWVyKHMpICYgZW50aXQoeS9pZXMpYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMubWFwKGFzeW5jIChlbnRpdHk6IFBsYXllcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LnNldFBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB0YXJnZXQuZ2V0UG9zaXRpb24oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1vdmVtZW50VHlwZS5UZWxlcG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGVsZXBvcnRlZCAke3NvdXJjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChlbnRpdHkpID0+IGVudGl0eS5nZXRGb3JtYXR0ZWRVc2VybmFtZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfSB0byAke3RhcmdldC5nZXRGb3JtYXR0ZWRVc2VybmFtZSgpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuZXhlY3V0ZXMoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZSgpIGFzIFBsYXllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBjb250ZXh0LmdldEFyZ3VtZW50KCdwbGF5ZXInKT8uWzBdIGFzIFBsYXllcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc291cmNlLmlzUGxheWVyKCkpIHRocm93IG5ldyBFcnJvcihgVGhpcyBjb21tYW5kIGNhbid0IGJlIHJ1biBmcm9tIHRoZSBjb25zb2xlYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uuc2V0UG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjModGFyZ2V0LmdldFgoKSwgdGFyZ2V0LmdldFkoKSwgdGFyZ2V0LmdldFooKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1vdmVtZW50VHlwZS5UZWxlcG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGVsZXBvcnRlZCAke3NvdXJjZS5nZXRGb3JtYXR0ZWRVc2VybmFtZSgpfSB0byAke3RhcmdldC5nZXRGb3JtYXR0ZWRVc2VybmFtZSgpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVNBLElBQXFCLFlBQXJCLGNBQXVDLHdCQUFBLFFBQVE7Q0FDM0MsY0FBcUI7RUFDakIsTUFBTTtHQUNGLElBQUk7R0FDSixhQUFhO0dBQ2IsU0FBUyxDQUFDLFVBQVU7R0FDcEIsWUFBWTtFQUNoQixDQUFDO0NBQ0w7Q0FFQSxNQUFhLFNBQVMsWUFBb0M7RUFDdEQsV0FBVyxVQUFBLEdBQUEsd0JBQUEsU0FDQyxJQUFJLEVBQ1AsTUFBQSxHQUFBLHdCQUFBLFVBQ1ksWUFBWSxJQUFJLGlDQUFBLHdCQUF3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