@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
61 lines (60 loc) • 8.28 kB
JavaScript
import ChatEvent from "../../events/chat/ChatEvent.es.js";
import { Command } from "../Command.es.js";
import { CommandArgumentEntity, CommandArgumentGamemode } from "../CommandArguments.es.js";
import { Chat } from "../../chat/Chat.es.js";
import { getGametypeId } from "@jsprismarine/minecraft";
import { argument, literal } from "@jsprismarine/brigadier";
//#region src/command/vanilla/GamemodeCommand.ts
/**
* Manage a player's {@link Gametype} (gamemode).
* @remarks the `/gamemode` command.
*/
var GamemodeCommand = class 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);
})));
}
};
//#endregion
export { GamemodeCommand as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZW1vZGVDb21tYW5kLmVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kL3ZhbmlsbGEvR2FtZW1vZGVDb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZERpc3BhdGNoZXIgfSBmcm9tICdAanNwcmlzbWFyaW5lL2JyaWdhZGllcic7XG5pbXBvcnQgeyBhcmd1bWVudCwgbGl0ZXJhbCB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvYnJpZ2FkaWVyJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtaW1wb3J0c1xuaW1wb3J0IHR5cGUgeyBHYW1ldHlwZSB9IGZyb20gJ0Bqc3ByaXNtYXJpbmUvbWluZWNyYWZ0JztcbmltcG9ydCB7IGdldEdhbWV0eXBlSWQgfSBmcm9tICdAanNwcmlzbWFyaW5lL21pbmVjcmFmdCc7XG5pbXBvcnQgdHlwZSBQbGF5ZXIgZnJvbSAnLi4vLi4vUGxheWVyJztcbmltcG9ydCB7IENoYXQgfSBmcm9tICcuLi8uLi9jaGF0L0NoYXQnO1xuaW1wb3J0IENoYXRFdmVudCBmcm9tICcuLi8uLi9ldmVudHMvY2hhdC9DaGF0RXZlbnQnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJy4uL0NvbW1hbmQnO1xuaW1wb3J0IHsgQ29tbWFuZEFyZ3VtZW50RW50aXR5LCBDb21tYW5kQXJndW1lbnRHYW1lbW9kZSB9IGZyb20gJy4uL0NvbW1hbmRBcmd1bWVudHMnO1xuXG4vKipcbiAqIE1hbmFnZSBhIHBsYXllcidzIHtAbGluayBHYW1ldHlwZX0gKGdhbWVtb2RlKS5cbiAqIEByZW1hcmtzIHRoZSBgL2dhbWVtb2RlYCBjb21tYW5kLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lbW9kZUNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGlkOiAnbWluZWNyYWZ0OmdhbWVtb2RlJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hhbmdlcyBnYW1lbW9kZSBmb3IgYSBwbGF5ZXIuJyxcbiAgICAgICAgICAgIHBlcm1pc3Npb246ICdtaW5lY3JhZnQuY29tbWFuZC5nYW1lbW9kZSdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRHYW1lbW9kZShzb3VyY2U6IFBsYXllciwgdGFyZ2V0OiBQbGF5ZXIsIGdhbWVtb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCEodGFyZ2V0IGFzIGFueSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IENoYXRFdmVudChcbiAgICAgICAgICAgICAgICBuZXcgQ2hhdCh7XG4gICAgICAgICAgICAgICAgICAgIHNlbmRlcjogc291cmNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgUGxheWVyIGlzIG5vdCBvbmxpbmUhYCxcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogYCoucGxheWVyLiR7c291cmNlLmdldE5hbWUoKX1gXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBzb3VyY2UuZ2V0U2VydmVyKCkuZW1pdCgnY2hhdCcsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGFyZ2V0LmlzUGxheWVyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IENoYXRFdmVudChcbiAgICAgICAgICAgICAgICBuZXcgQ2hhdCh7XG4gICAgICAgICAgICAgICAgICAgIHNlbmRlcjogc291cmNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2FuJ3Qgc2V0ICR7c291cmNlLmdldEZvcm1hdHRlZFVzZXJuYW1lKCl9IHRvICR7Z2FtZW1vZGV9YCxcblxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBgKi5wbGF5ZXIuJHtzb3VyY2UuZ2V0TmFtZSgpfWBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IHNvdXJjZS5nZXRTZXJ2ZXIoKS5lbWl0KCdjaGF0JywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGFyZ2V0LnNldEdhbWVtb2RlKGdldEdhbWV0eXBlSWQoZ2FtZW1vZGUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIoZGlzcGF0Y2hlcjogQ29tbWFuZERpc3BhdGNoZXI8YW55Pikge1xuICAgICAgICBkaXNwYXRjaGVyLnJlZ2lzdGVyKFxuICAgICAgICAgICAgbGl0ZXJhbCgnZ2FtZW1vZGUnKS50aGVuKFxuICAgICAgICAgICAgICAgIGFyZ3VtZW50KCdnYW1lbW9kZScsIG5ldyBDb21tYW5kQXJndW1lbnRHYW1lbW9kZSgpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50KCdwbGF5ZXInLCBuZXcgQ29tbWFuZEFyZ3VtZW50RW50aXR5KHsgbmFtZTogJ3BsYXllcicsIG9wdGlvbmFsOiB0cnVlIH0pKS5leGVjdXRlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZSgpIGFzIFBsYXllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IGNvbnRleHQuZ2V0QXJndW1lbnQoJ3BsYXllcicpIGFzIFBsYXllcltdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdhbWVtb2RlID0gY29udGV4dC5nZXRBcmd1bWVudCgnZ2FtZW1vZGUnKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwbGF5ZXJgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMubWFwKGFzeW5jICh0YXJnZXQpID0+IGF3YWl0IHRoaXMuc2V0R2FtZW1vZGUoc291cmNlLCB0YXJnZXQsIGdhbWVtb2RlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmV4ZWN1dGVzKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZSgpIGFzIFBsYXllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdhbWVtb2RlID0gY29udGV4dC5nZXRBcmd1bWVudCgnZ2FtZW1vZGUnKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0R2FtZW1vZGUoc291cmNlLCBzb3VyY2UsIGdhbWVtb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBZUEsSUFBcUIsa0JBQXJCLGNBQTZDLFFBQVE7Q0FDakQsY0FBcUI7RUFDakIsTUFBTTtHQUNGLElBQUk7R0FDSixhQUFhO0dBQ2IsWUFBWTtFQUNoQixDQUFDO0NBQ0w7Q0FFQSxNQUFjLFlBQVksUUFBZ0IsUUFBZ0IsVUFBa0I7RUFDeEUsSUFBSSxDQUFFLFFBQWdCO0dBQ2xCLE1BQU0sUUFBUSxJQUFJLFVBQ2QsSUFBSSxLQUFLO0lBQ0wsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTLFlBQVksT0FBTyxRQUFRO0dBQ3hDLENBQUMsQ0FDTDtHQUNBLE1BQU0sT0FBTyxVQUFVLEVBQUUsS0FBSyxRQUFRLEtBQUs7R0FDM0M7RUFDSjtFQUVBLElBQUksQ0FBQyxPQUFPLFNBQVMsR0FBRztHQUNwQixNQUFNLFFBQVEsSUFBSSxVQUNkLElBQUksS0FBSztJQUNMLFFBQVE7SUFDUixTQUFTLGFBQWEsT0FBTyxxQkFBcUIsRUFBRSxNQUFNO0lBRTFELFNBQVMsWUFBWSxPQUFPLFFBQVE7R0FDeEMsQ0FBQyxDQUNMO0dBQ0EsTUFBTSxPQUFPLFVBQVUsRUFBRSxLQUFLLFFBQVEsS0FBSztHQUMzQztFQUNKO0VBRUEsTUFBTSxPQUFPLFlBQVksY0FBYyxRQUFRLENBQUM7Q0FDcEQ7Q0FFQSxNQUFhLFNBQVMsWUFBb0M7RUFDdEQsV0FBVyxTQUNQLFFBQVEsVUFBVSxFQUFFLEtBQ2hCLFNBQVMsWUFBWSxJQUFJLHdCQUF3QixDQUFDLEVBQzdDLEtBQ0csU0FBUyxVQUFVLElBQUksc0JBQXNCO0dBQUUsTUFBTTtHQUFVLFVBQVU7RUFBSyxDQUFDLENBQUMsRUFBRSxTQUM5RSxPQUFPLFlBQVk7R0FDZixNQUFNLFNBQVMsUUFBUSxVQUFVO0dBQ2pDLE1BQU0sVUFBVSxRQUFRLFlBQVksUUFBUTtHQUU1QyxNQUFNLFdBQVcsUUFBUSxZQUFZLFVBQVU7R0FFL0MsSUFBSSxDQUFDLFFBQVEsUUFBUSxNQUFNLElBQUksTUFBTSxvQkFBb0I7R0FFekQsTUFBTSxRQUFRLElBQ1YsUUFBUSxJQUFJLE9BQU8sV0FBVyxNQUFNLEtBQUssWUFBWSxRQUFRLFFBQVEsUUFBUSxDQUFDLENBQ2xGO0VBQ0osQ0FDSixDQUNKLEVBQ0MsU0FBUyxPQUFPLFlBQVk7R0FDekIsTUFBTSxTQUFTLFFBQVEsVUFBVTtHQUNqQyxNQUFNLFdBQVcsUUFBUSxZQUFZLFVBQVU7R0FFL0MsTUFBTSxLQUFLLFlBQVksUUFBUSxRQUFRLFFBQVE7RUFDbkQsQ0FBQyxDQUNULENBQ0o7Q0FDSjtBQUNKIn0=