UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

244 lines (242 loc) 7.4 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", { value: true }); exports.CommandScope = void 0; const Log_1 = require("../core/Log"); const Utilities_1 = require("../core/Utilities"); const CommandStructure_1 = require("./CommandStructure"); const ICommand_1 = require("./ICommand"); var CommandScope; (function (CommandScope) { CommandScope[CommandScope["any"] = 1] = "any"; CommandScope[CommandScope["project"] = 2] = "project"; CommandScope[CommandScope["minecraft"] = 3] = "minecraft"; CommandScope[CommandScope["carto"] = 4] = "carto"; CommandScope[CommandScope["host"] = 5] = "host"; CommandScope[CommandScope["debug"] = 10] = "debug"; CommandScope[CommandScope["debugProject"] = 11] = "debugProject"; CommandScope[CommandScope["debugMinecraft"] = 12] = "debugMinecraft"; CommandScope[CommandScope["debugHost"] = 14] = "debugHost"; })(CommandScope = exports.CommandScope || (exports.CommandScope = {})); const MinecraftCommands = [ "allowlist", "alwaysday", "camera", "camerashake", "changesetting", "clear", "clearspawnpoint", "clone", "connect", "damage", "daylock", "deop", "dialogue", "difficulty", "effect", "enchant", "event", "execute", "fill", "fog", "function", "gamemode", "gamerule", "gametest", "give", "help", "inputpermission", "kick", "kill", "list", "locate", "loot", "me", "msg", "mobevent", "music", "op", "ops", "particle", "permission", "playanimation", "playsound", "project", "recipe", "reload", "reloadconfig", "replaceitem", "ride", "save", "say", "schedule", "scoreboard", "script", "scriptevent", "setblock", "setmaxplayers", "setworldspawn", "simulationtype", "spawnpoint", "spreadplayers", "stop", "stopsound", "structure", "summon", "tag", "teleport", "tell", "tellraw", "testfor", "testforblock", "testforblocks", "tickingarea", "tp", "time", "title", "titleraw", "toggledownfall", "transfer", "volumearea", "weather", "wsserver", "whitelist", "?", "w", "xp", ]; const MinecraftAddOnBlockedCommands = [ "allowlist", "alwaysday", "changesetting", "connect", "daylock", "deop", "difficulty", "gamemode", "gamerule", "gametest", "help", "kick", "list", "locate", "op", "ops", "permission", "project", "reload", "reloadconfig", "save", "script", "setmaxplayers", "setworldspawn", "simulationtype", "stop", "tickingarea", "time", "transfer", "wsserver", "whitelist", "?", ]; class CommandRegistry { constructor() { this._commandsByName = {}; this._commandsByScope = {}; } static get main() { if (!this._registry) { this._registry = new CommandRegistry(); this._registry.registerCommand("sleep", CommandScope.any, async (context, name, args) => { if (args.length === 1) { let delay = 0; try { delay = parseInt(args[0]); } catch (e) { } if (delay > 0) { context.carto.notifyStatusUpdate("(Delaying commands for " + delay + "ms)."); await Utilities_1.default.sleep(delay); } } return { status: ICommand_1.CommandStatus.completed }; }); } return this._registry; } registerCommand(commandName, commandScope, command) { commandName = commandName.toLowerCase(); this._commandsByName[commandName] = command; this._commandsByScope[commandName] = commandScope; } logHelp() { let commandArr = []; for (const commandName in this._commandsByName) { commandArr.push(commandName); } commandArr = commandArr.sort(); Log_1.default.message("Use help <command name> for more detailed help on a command."); for (let i = 0; i < commandArr.length; i++) { Log_1.default.message(commandArr[i]); } } static isMinecraftBuiltInCommand(name) { return MinecraftCommands.includes(name) || name === "#"; } static isAddOnBlockedCommand(name) { return MinecraftAddOnBlockedCommands.includes(name); } async runCommand(context, commandText) { const command = CommandStructure_1.default.parse(commandText); if (!command || !command.name || !command.commandArguments) { return undefined; } const scope = this._commandsByScope[command.name]; const commandName = this._commandsByName[command.name]; if (command.name === "help") { this.logHelp(); return { status: ICommand_1.CommandStatus.completed }; } else if (CommandRegistry.isMinecraftBuiltInCommand(command.name) && context.minecraft) { Log_1.default.debug("Sending '" + commandText + "' to Minecraft."); let result = await context.minecraft.runCommand(commandText); return { data: result, status: ICommand_1.CommandStatus.completed, }; } else if (scope && commandName) { if ((scope === CommandScope.debug || scope === CommandScope.debugProject || scope === CommandScope.debugMinecraft) && !Utilities_1.default.isDebug) { return undefined; } if ((scope === CommandScope.project || scope === CommandScope.debugProject) && !context.project) { Log_1.default.message("Could not run command '" + command.name + "'; no active project."); return undefined; } if ((scope === CommandScope.minecraft || scope === CommandScope.debugMinecraft) && !context.minecraft) { Log_1.default.message("Could not run command '" + command.name + "'; no active Minecraft deploy target was set."); return undefined; } if ((scope === CommandScope.host || scope === CommandScope.debugHost) && !context.host) { Log_1.default.message("Could not run command '" + command.name + "'; no host was set."); return undefined; } const result = await commandName(context, command.name, command.commandArguments); if (result.status === ICommand_1.CommandStatus.invalidEnvironment) { Log_1.default.error("'" + command.name + "' was not set up properly."); } else if (result.status === ICommand_1.CommandStatus.invalidArguments) { Log_1.default.error("'" + command.name + "' command arguments were not set up."); } return result; } context.carto.notifyStatusUpdate("Could not find a command '" + command.name + "'."); return undefined; } } exports.default = CommandRegistry; //# sourceMappingURL=../maps/app/CommandRegistry.js.map