@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
68 lines (65 loc) • 9.47 kB
JavaScript
import { literal, argument } from '@jsprismarine/brigadier';
import { getGametypeId } from '@jsprismarine/minecraft';
import { Chat } from '../../chat/Chat.es.js';
import ChatEvent from '../../events/chat/ChatEvent.es.js';
import { Command } from '../Command.es.js';
import { CommandArgumentGamemode, CommandArgumentEntity } from '../CommandArguments.es.js';
class GamemodeCommand extends Command {
constructor() {
super({
id: "minecraft:gamemode",
description: "Changes gamemode for a player.",
permission: "minecraft.command.gamemode"
});
}
async setGamemode(source, target, gamemode) {
if (!target) {
const event = new ChatEvent(
new Chat({
sender: source,
message: `Player is not online!`,
channel: `*.player.${source.getName()}`
})
);
await source.getServer().emit("chat", event);
return;
}
if (!target.isPlayer()) {
const event = new ChatEvent(
new Chat({
sender: source,
message: `Can't set ${source.getFormattedUsername()} to ${gamemode}`,
channel: `*.player.${source.getName()}`
})
);
await source.getServer().emit("chat", event);
return;
}
await target.setGamemode(getGametypeId(gamemode));
}
async register(dispatcher) {
dispatcher.register(
literal("gamemode").then(
argument("gamemode", new CommandArgumentGamemode()).then(
argument("player", new CommandArgumentEntity({ name: "player", optional: true })).executes(
async (context) => {
const source = context.getSource();
const targets = context.getArgument("player");
const gamemode = context.getArgument("gamemode");
if (!targets.length) throw new Error(`Cannot find player`);
await Promise.all(
targets.map(async (target) => await this.setGamemode(source, target, gamemode))
);
}
)
).executes(async (context) => {
const source = context.getSource();
const gamemode = context.getArgument("gamemode");
await this.setGamemode(source, source, gamemode);
})
)
);
}
}
export { GamemodeCommand as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZW1vZGVDb21tYW5kLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZC92YW5pbGxhL0dhbWVtb2RlQ29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbW1hbmREaXNwYXRjaGVyIH0gZnJvbSAnQGpzcHJpc21hcmluZS9icmlnYWRpZXInO1xuaW1wb3J0IHsgYXJndW1lbnQsIGxpdGVyYWwgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JyaWdhZGllcic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLWltcG9ydHNcbmltcG9ydCB0eXBlIHsgR2FtZXR5cGUgfSBmcm9tICdAanNwcmlzbWFyaW5lL21pbmVjcmFmdCc7XG5pbXBvcnQgeyBnZXRHYW1ldHlwZUlkIH0gZnJvbSAnQGpzcHJpc21hcmluZS9taW5lY3JhZnQnO1xuaW1wb3J0IHR5cGUgUGxheWVyIGZyb20gJy4uLy4uL1BsYXllcic7XG5pbXBvcnQgeyBDaGF0IH0gZnJvbSAnLi4vLi4vY2hhdC9DaGF0JztcbmltcG9ydCBDaGF0RXZlbnQgZnJvbSAnLi4vLi4vZXZlbnRzL2NoYXQvQ2hhdEV2ZW50JztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuLi9Db21tYW5kJztcbmltcG9ydCB7IENvbW1hbmRBcmd1bWVudEVudGl0eSwgQ29tbWFuZEFyZ3VtZW50R2FtZW1vZGUgfSBmcm9tICcuLi9Db21tYW5kQXJndW1lbnRzJztcblxuLyoqXG4gKiBNYW5hZ2UgYSBwbGF5ZXIncyB7QGxpbmsgR2FtZXR5cGV9IChnYW1lbW9kZSkuXG4gKiBAcmVtYXJrcyB0aGUgYC9nYW1lbW9kZWAgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZW1vZGVDb21tYW5kIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBpZDogJ21pbmVjcmFmdDpnYW1lbW9kZScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NoYW5nZXMgZ2FtZW1vZGUgZm9yIGEgcGxheWVyLicsXG4gICAgICAgICAgICBwZXJtaXNzaW9uOiAnbWluZWNyYWZ0LmNvbW1hbmQuZ2FtZW1vZGUnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2V0R2FtZW1vZGUoc291cmNlOiBQbGF5ZXIsIHRhcmdldDogUGxheWVyLCBnYW1lbW9kZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghKHRhcmdldCBhcyBhbnkpKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDaGF0RXZlbnQoXG4gICAgICAgICAgICAgICAgbmV3IENoYXQoe1xuICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFBsYXllciBpcyBub3Qgb25saW5lIWAsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWw6IGAqLnBsYXllci4ke3NvdXJjZS5nZXROYW1lKCl9YFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgc291cmNlLmdldFNlcnZlcigpLmVtaXQoJ2NoYXQnLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRhcmdldC5pc1BsYXllcigpKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDaGF0RXZlbnQoXG4gICAgICAgICAgICAgICAgbmV3IENoYXQoe1xuICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYENhbid0IHNldCAke3NvdXJjZS5nZXRGb3JtYXR0ZWRVc2VybmFtZSgpfSB0byAke2dhbWVtb2RlfWAsXG5cbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogYCoucGxheWVyLiR7c291cmNlLmdldE5hbWUoKX1gXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBzb3VyY2UuZ2V0U2VydmVyKCkuZW1pdCgnY2hhdCcsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRhcmdldC5zZXRHYW1lbW9kZShnZXRHYW1ldHlwZUlkKGdhbWVtb2RlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKGRpc3BhdGNoZXI6IENvbW1hbmREaXNwYXRjaGVyPGFueT4pIHtcbiAgICAgICAgZGlzcGF0Y2hlci5yZWdpc3RlcihcbiAgICAgICAgICAgIGxpdGVyYWwoJ2dhbWVtb2RlJykudGhlbihcbiAgICAgICAgICAgICAgICBhcmd1bWVudCgnZ2FtZW1vZGUnLCBuZXcgQ29tbWFuZEFyZ3VtZW50R2FtZW1vZGUoKSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCgncGxheWVyJywgbmV3IENvbW1hbmRBcmd1bWVudEVudGl0eSh7IG5hbWU6ICdwbGF5ZXInLCBvcHRpb25hbDogdHJ1ZSB9KSkuZXhlY3V0ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2UoKSBhcyBQbGF5ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldHMgPSBjb250ZXh0LmdldEFyZ3VtZW50KCdwbGF5ZXInKSBhcyBQbGF5ZXJbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnYW1lbW9kZSA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ2dhbWVtb2RlJykgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0cy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcGxheWVyYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzLm1hcChhc3luYyAodGFyZ2V0KSA9PiBhd2FpdCB0aGlzLnNldEdhbWVtb2RlKHNvdXJjZSwgdGFyZ2V0LCBnYW1lbW9kZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5leGVjdXRlcyhhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2UoKSBhcyBQbGF5ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnYW1lbW9kZSA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ2dhbWVtb2RlJykgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldEdhbWVtb2RlKHNvdXJjZSwgc291cmNlLCBnYW1lbW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFlQSxNQUFxQix3QkFBd0IsT0FBUSxDQUFBO0FBQUEsRUFDMUMsV0FBYyxHQUFBO0FBQ2pCLElBQU0sS0FBQSxDQUFBO0FBQUEsTUFDRixFQUFJLEVBQUEsb0JBQUE7QUFBQSxNQUNKLFdBQWEsRUFBQSxnQ0FBQTtBQUFBLE1BQ2IsVUFBWSxFQUFB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