diff --git a/API/parsing.lua b/API/parsing.lua index bb42eb2..2a44d97 100644 --- a/API/parsing.lua +++ b/API/parsing.lua @@ -182,7 +182,7 @@ function better_commands.parse_selector(selector_data, context, require_one) if selector_data[3]:sub(1,1) ~= "@" then local player = minetest.get_player_by_name(selector_data[3]) if not player then - return nil, S("Player @1 not found", selector_data[3]) + return nil, S("No player was found") else return {player} end @@ -247,19 +247,19 @@ function better_commands.parse_selector(selector_data, context, require_one) for _, arg in ipairs(arg_table) do local key, value = unpack(arg) if better_commands.supported_keys[key] == nil then - return nil, S("Invalid key: @1", key) + return nil, S("Unknown option '@1'", key) elseif key == "x" or key == "y" or key == "z" then if checked[key] then - return nil, S("Duplicate key: @1", key) + return nil, S("Duplicate option '@1'", key) end - if value:sub(1,1) == "~" then + if value:sub(1,1) == "!" then value = value:sub(2,-1) if value == "" then value = 0 end end checked[key] = true pos[key] = tonumber(value) if not pos[key] then - return nil, S("Invalid value for @1", key) + return nil, S("Expected number for option '@1'", key) end checked[key] = true elseif key == "sort" then @@ -288,7 +288,7 @@ function better_commands.parse_selector(selector_data, context, require_one) local key, value = unpack(arg) if better_commands.supported_keys[key] == true then if checked[key] then - return nil, S("Duplicate key: @1", key) + return nil, S("Duplicate option '@1'", key) end checked[key] = true end @@ -315,7 +315,7 @@ function better_commands.parse_selector(selector_data, context, require_one) end else if checked.type then - return nil, S("Duplicate key: @1", key) + return nil, S("Duplicate option '@1'", key) end checked.type = true if not type_table[value] then @@ -330,7 +330,7 @@ function better_commands.parse_selector(selector_data, context, require_one) end else if checked.name then - return nil, S("Duplicate key: @1", key) + return nil, S("Duplicate option '@1'", key) end checked.name = true if obj_name ~= value then @@ -339,11 +339,11 @@ function better_commands.parse_selector(selector_data, context, require_one) end elseif key == "r" then value = tonumber(value) - if not value then return nil, S("@1 must be a number", key) end + if not value then return nil, S("Expected number for option '@1'", key) end matches = vector.distance(obj:get_pos(), pos) <= value elseif key == "rm" then value = tonumber(value) - if not value then return nil, S("@1 must be a number", key) end + if not value then return nil, S("Expected number for option '@1'", key) end matches = vector.distance(obj:get_pos(), pos) >= value elseif key == "level" then if not (obj.is_player and obj:is_player()) then @@ -357,7 +357,7 @@ function better_commands.parse_selector(selector_data, context, require_one) end elseif key == "l" then value = tonumber(value) - if not value then return nil, S("@1 must be a number", key) end + if not value then return nil, S("Expected number for option '@1'", key) end if not (obj.is_player and obj:is_player()) then matches = false else @@ -367,7 +367,7 @@ function better_commands.parse_selector(selector_data, context, require_one) end elseif key == "lm" then value = tonumber(value) - if not value then return nil, S("@1 must be a number", key) end + if not value then return nil, S("Expected number for option '@1'", key) end if not (obj.is_player and obj:is_player()) then matches = false else @@ -386,10 +386,10 @@ function better_commands.parse_selector(selector_data, context, require_one) local gamemode = better_commands.gamemode_aliases[value] or value if better_commands.mcl then if table.indexof(mcl_gamemode.gamemodes, gamemode) == -1 then - return nil, S("Invalid gamemode @1", gamemode) + return nil, S("Unknown game mode: @1", gamemode) end elseif gamemode ~= "creative" and gamemode ~= "survival" then - return nil, S("Invalid gamemode @1", gamemode) + return nil, S("Unknown game mode: @1", gamemode) end matches = better_commands.get_gamemode(obj) == gamemode end @@ -444,9 +444,6 @@ end ---@return string? err ---@nodiscard function better_commands.parse_pos(data, start, context) - if not context then - return nil, S("Missing context") - end local axes = {"x","y","z"} local result = table.copy(context.pos) local look @@ -474,7 +471,7 @@ function better_commands.parse_pos(data, start, context) result[axes[i+1]] = tonumber(coordinate:sub(2,-1)) or 0 look = true else - return nil, S("Invalid coordinate: @1", coordinate) + return nil, S("Invalid coordinate '@1'", coordinate) end end if look then @@ -500,7 +497,7 @@ end ---@nodiscard function better_commands.parse_item(item_data, ignore_count) if not better_commands.handle_alias(item_data[3]) then - return nil, S("Invalid item: @1", item_data[3]) + return nil, S("Invalid item '@1'", item_data[3]) end if item_data.type == "item" and not item_data.extra_data then local stack = ItemStack(item_data[3]) @@ -521,7 +518,6 @@ function better_commands.parse_item(item_data, ignore_count) if arg_table then local meta = stack:get_meta() for key, value in pairs(arg_table) do - minetest.log(S("@1 = @2", key, value)) if key == "wear" then stack:set_wear(tonumber(value) or 0) else @@ -535,7 +531,7 @@ function better_commands.parse_item(item_data, ignore_count) stack:set_wear(tonumber(item_data[6]) or stack:get_wear()) return stack end - return nil, S("Invalid item: @1", item_data[3]) + return nil, S("Invalid item: '@1'", item_data[3]) end ---Parses node data, returns node and metadata table @@ -550,10 +546,10 @@ function better_commands.parse_node(item_data) end local itemstring = better_commands.handle_alias(item_data[3]) if not itemstring then - return nil, nil, S("Invalid item: @1", item_data[3]) + return nil, nil, S("Unknown node '@1'", item_data[3]) end if not minetest.registered_nodes[itemstring] then - return nil, nil, S("Not a node: @1", itemstring) + return nil, nil, S("'@1' is not a node", itemstring) end if item_data.type == "item" and not item_data.extra_data then return {name = itemstring} @@ -573,7 +569,7 @@ function better_commands.parse_node(item_data) end return node_table, meta_table end - return nil, nil, S("Invalid item: @1", item_data[3]) + return nil, nil, S("Invalid item '@1'", item_data[3]) end ---Parses a time string and returns a time (between 0 and 1) @@ -597,7 +593,7 @@ function better_commands.parse_time_string(time, absolute) if unit == "" then unit = "t" end amount = tonumber(amount) end - -- Don't think it's even possible to be negative but just in case + -- The pattern shouldn't let through any negative numbers... but just in case if amount < 0 then return nil, S("Amount must not be negative") end if unit == "s" then local second_multiplier = tonumber(minetest.settings:get("time_speed")) or 72 @@ -605,7 +601,7 @@ function better_commands.parse_time_string(time, absolute) elseif unit == "d" then amount = amount * 24000 elseif unit ~= "t" then - return nil, S("Unit must be either t (default), s, or d, not @1", unit) + return nil, S("Invalid unit '@1'", unit) end if not absolute then @@ -647,7 +643,7 @@ function better_commands.expand_selectors(str, split_param, index, context) end for j, obj in ipairs(targets) do if j > 1 then next_part = next_part.." " end - if not obj.is_player then + if not obj.is_player then -- this should only happen with @s next_part = next_part..S("Command Block") break end diff --git a/API/scoreboard.lua b/API/scoreboard.lua index b3d341f..87b59bb 100644 --- a/API/scoreboard.lua +++ b/API/scoreboard.lua @@ -13,7 +13,7 @@ function better_commands.get_scoreboard_names(selector, context, objective, requ local result = {} local objectives = better_commands.scoreboard.objectives if objective and not objectives[objective] then - return nil, S("Invalid objective: @1", objective) + return nil, S("Invalid objective '@1'", objective) end if selector[3] == "*" then if objective then diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e20b22..56a4f94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,8 @@ Initial release. Missing *lots* of commands, several `execute` subcommands, lots * Added `/teammsg` command * Added `/gamerule` and `/changesetting` commands * Command results are now shown to other players as well, unless `better_commands.send_command_feedback` is disabled +* Error messages are now red +* Command outputs now match Minecraft's ### Bugfixes * Fixed a bug with the `/kill` command (it should work now). * The `rm`/`r` selector arguments now actually treat their values as numbers (not strings), and are now inclusive as intended. diff --git a/COMMANDS/ability.lua b/COMMANDS/ability.lua index 78ffeca..5310e3d 100644 --- a/COMMANDS/ability.lua +++ b/COMMANDS/ability.lua @@ -6,9 +6,6 @@ better_commands.register_command("ability", { description = S("Sets of to [value] (true/false). If [value] is not supplied, returns the existing value of "), privs = {privs = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] then return false, nil, 0 @@ -46,12 +43,12 @@ better_commands.register_command("ability", { if minetest.registered_privileges[priv] then return true, S("@1 = @2", priv, tostring(privs[priv])), 1 else - return false, minetest.colorize("red", S("Invalid privilege: @1", priv)), 0 + return false, minetest.colorize("red", S("Invalid privilege '@1'", priv)), 0 end end else if not minetest.registered_privileges[priv] then - return false, minetest.colorize("red", S("Invalid privilege: @1", priv)), 0 + return false, minetest.colorize("red", S("Invalid privilege '@1'", priv)), 0 else if set == "true" then privs[priv] = true diff --git a/COMMANDS/chat.lua b/COMMANDS/chat.lua index e496c07..4473ff5 100644 --- a/COMMANDS/chat.lua +++ b/COMMANDS/chat.lua @@ -3,12 +3,9 @@ local S = minetest.get_translator(minetest.get_current_modname()) better_commands.register_command("say", { params = S(""), - description = S("Says to all players (which can include selectors such as @@a if you have the server priv)"), + description = S("Says to all players (which can include selectors such as @@a if you have the 'server' priv)"), privs = {shout = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] then return false, nil, 0 end local message @@ -26,12 +23,9 @@ better_commands.register_command("say", { better_commands.register_command("msg", { params = S(" "), - description = S("Sends privately to (which can include selectors like @@a if you have the server priv)"), + description = S("Sends privately to (which can include selectors like @@a if you have the 'server' priv)"), privs = {shout = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] and split_param[2] then return false, nil, 0 @@ -65,13 +59,10 @@ better_commands.register_command_alias("w", "msg") better_commands.register_command_alias("tell", "msg") better_commands.register_command("me", { - description = S("Broadcasts a message about yourself (which can include selectors like @@a if you have the server priv)"), + description = S("Broadcasts a message about yourself (which can include selectors like @@a if you have the 'server' priv)"), params = S(""), privs = {shout = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] then return false, nil, 0 end local message @@ -89,12 +80,9 @@ better_commands.register_command("me", { better_commands.register_command("teammsg", { params = S(""), - description = S("Sends privately to all team members (which can include selectors like @@a if you have the server priv)"), + description = S("Sends privately to all team members (which can include selectors like @@a if you have the 'server' priv)"), privs = {shout = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] then return false, nil, 0 diff --git a/COMMANDS/clear.lua b/COMMANDS/clear.lua index 84760d4..d716d9c 100644 --- a/COMMANDS/clear.lua +++ b/COMMANDS/clear.lua @@ -5,8 +5,6 @@ better_commands.register_command("clear", { privs = { server = true }, params = S("[targets] [items] [maxCount]"), func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end local split_param = better_commands.parse_params(param) local selector = split_param[1] local targets, err diff --git a/COMMANDS/command_runners.lua b/COMMANDS/command_runners.lua index e179dd6..4c912bb 100644 --- a/COMMANDS/command_runners.lua +++ b/COMMANDS/command_runners.lua @@ -6,9 +6,6 @@ better_commands.register_command("bc", { description = S("Runs any Better Commands command, so Better Commands don't have to override existing commands"), privs = {}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local command, command_param = param:match("^%/?([%S]+)%s*(.-)$") local def = better_commands.commands[command] if def then @@ -31,9 +28,6 @@ better_commands.register_command("old", { description = S("Runs any command that Better Commands has overridden"), privs = {}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local command, command_param = param:match("^%/?([%S]+)%s*(.-)$") local def = better_commands.old_commands[command] if def then diff --git a/COMMANDS/execute.lua b/COMMANDS/execute.lua index 2be7dba..74d6532 100644 --- a/COMMANDS/execute.lua +++ b/COMMANDS/execute.lua @@ -291,9 +291,6 @@ better_commands.register_command("execute", { description = S("Run any Better Command (not other commands) after changing the context"), privs = {server = true, ban = true, privs = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] then return false, nil, 0 end local branch = 1 diff --git a/COMMANDS/gamemode.lua b/COMMANDS/gamemode.lua index cfc0e17..53295fd 100644 --- a/COMMANDS/gamemode.lua +++ b/COMMANDS/gamemode.lua @@ -14,9 +14,6 @@ better_commands.register_command("gamemode", { params = S(" [player]"), privs = {server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param, err = better_commands.parse_params(param) if err then return false, minetest.colorize("red", err), 0 end local gamemode = split_param[1] and split_param[1][3] diff --git a/COMMANDS/give.lua b/COMMANDS/give.lua index 1decafa..b949a39 100644 --- a/COMMANDS/give.lua +++ b/COMMANDS/give.lua @@ -46,9 +46,6 @@ better_commands.register_command("give", { description = S("Gives [count] of to "), privs = {server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not (split_param[1] and split_param[2]) then return false, nil, 0 diff --git a/COMMANDS/kill.lua b/COMMANDS/kill.lua index 76335e7..1adddf9 100644 --- a/COMMANDS/kill.lua +++ b/COMMANDS/kill.lua @@ -6,9 +6,6 @@ better_commands.register_command("kill", { description = S("Kills [target] or self"), privs = {server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end if param == "" then param = "@s" end local split_param = better_commands.parse_params(param) local targets, err = better_commands.parse_selector(split_param[1], context) diff --git a/COMMANDS/playsound.lua b/COMMANDS/playsound.lua index 09de956..35c720a 100644 --- a/COMMANDS/playsound.lua +++ b/COMMANDS/playsound.lua @@ -6,8 +6,6 @@ better_commands.register_command("playsound", { description = S("Plays a sound"), privs = {server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end local split_param = better_commands.parse_params(param) if not (split_param[1] and split_param[2]) then return false, nil, 0 diff --git a/COMMANDS/scoreboard.lua b/COMMANDS/scoreboard.lua index 355b6bf..def10d6 100644 --- a/COMMANDS/scoreboard.lua +++ b/COMMANDS/scoreboard.lua @@ -20,8 +20,6 @@ better_commands.register_command("scoreboard", { description = S("Manupulates the scoreboard"), privs = {server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end local split_param = better_commands.parse_params(param) if not (split_param[1] and split_param[2]) then return false, minetest.colorize("red", S("Missing arguments")), 0 @@ -581,9 +579,6 @@ better_commands.register_command("trigger", { privs = {}, param = " [add|set ]", func = function (name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end if not (context.executor.is_player and context.executor:is_player()) then return false, minetest.colorize("red", S("/trigger can only be used by players")), 0 end diff --git a/COMMANDS/setblock.lua b/COMMANDS/setblock.lua index 1121d89..16d2591 100644 --- a/COMMANDS/setblock.lua +++ b/COMMANDS/setblock.lua @@ -5,9 +5,6 @@ better_commands.register_command("setblock", { params = S(" [keep|replace]"), description = S("Places at . If keep, only replace air"), func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] and split_param[2] and split_param[3] and split_param[4] then return false, nil, 0 diff --git a/COMMANDS/settings.lua b/COMMANDS/settings.lua index b47ada2..db3b33d 100644 --- a/COMMANDS/settings.lua +++ b/COMMANDS/settings.lua @@ -6,8 +6,6 @@ better_commands.register_command("gamerule", { params = S(" [value]"), privs = {server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] then return false, nil, 0 end local setting = split_param[1][3] diff --git a/COMMANDS/spawnpoint.lua b/COMMANDS/spawnpoint.lua index d7a22bf..7c242cc 100644 --- a/COMMANDS/spawnpoint.lua +++ b/COMMANDS/spawnpoint.lua @@ -5,9 +5,6 @@ better_commands.register_command("spawnpoint", { privs = {server = true}, params = S("[targets]"), func = function (name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param, err = better_commands.parse_params(param) if err then return false, minetest.colorize("red", err), 0 end local selector = split_param[1] @@ -46,9 +43,6 @@ better_commands.register_command("clearspawnpoint", { privs = {server = true}, params = S("[targets]"), func = function (name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param, err = better_commands.parse_params(param) if err then return false, minetest.colorize("red", err), 0 end local selector = split_param[1] diff --git a/COMMANDS/summon.lua b/COMMANDS/summon.lua index aacd22b..8d413c8 100644 --- a/COMMANDS/summon.lua +++ b/COMMANDS/summon.lua @@ -6,9 +6,6 @@ better_commands.register_command("summon", { params = S(" [pos] [ ( [xRot]) | (facing ) ])"), privs = {server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) local entity = split_param[1] if not entity then return false, minetest.colorize("red", S("Missing entity")), 0 end diff --git a/COMMANDS/team.lua b/COMMANDS/team.lua index 468d069..cfdce26 100644 --- a/COMMANDS/team.lua +++ b/COMMANDS/team.lua @@ -6,9 +6,6 @@ better_commands.register_command("team", { description = S("Controls teams"), privs = {server = true}, func = function (name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param, err = better_commands.parse_params(param) if err then return false, minetest.colorize("red", err), 0 end if not split_param[1] then return false, minetest.colorize("red", S("Missing subcommand")), 0 end diff --git a/COMMANDS/teleport.lua b/COMMANDS/teleport.lua index 0f7de01..aba1494 100644 --- a/COMMANDS/teleport.lua +++ b/COMMANDS/teleport.lua @@ -7,9 +7,6 @@ better_commands.register_command("teleport", { description = S("Teleports and rotates things"), privs = {server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not split_param[1] then return false, nil, 0 end if split_param[1].type == "selector" then diff --git a/COMMANDS/time.lua b/COMMANDS/time.lua index e518b9e..0924155 100644 --- a/COMMANDS/time.lua +++ b/COMMANDS/time.lua @@ -15,9 +15,6 @@ better_commands.register_command("time", { description = S("Sets or gets the time"), privs = {settime = true, server = true}, func = function(name, param, context) - context = better_commands.complete_context(name, context) - if not context then return false, minetest.colorize("red", S("Missing context")), 0 end - if not context.executor then return false, minetest.colorize("red", S("Missing executor")), 0 end local split_param = better_commands.parse_params(param) if not (split_param[1] and split_param[2]) then return false, nil, 0 end local action = split_param[1][3]:lower() diff --git a/locale/template.txt b/locale/template.txt deleted file mode 100644 index b5a67db..0000000 --- a/locale/template.txt +++ /dev/null @@ -1,402 +0,0 @@ -# textdomain: better_commands -Unknown Falling Node= -Falling @1= -Command Block= -???= -Player @1 not found= -Invalid key: @1= -Duplicate key: @1= -Invalid value for @1= -Only 1 of keys c and limit can exist= -@1 must be a non-zero integer= -@1 must be a number= -Only 1 of keys m and gamemode can exist= -Multiple matching entities found= -Missing coordinate= -Cannot mix local and global coordinates= -Invalid coordinate: @1= -Invalid item: @1= -Invalid item= -Not a node: @1= -Invalid amount= -Amount must not be negative= -Unit must be either t (default), s, or d, not @1= -Missing context= -No entity was found= -@1 @= @2= -Invalid gamemode @1= -No targets found= -Multiple targets found= -Invalid objective: @1= - [value]= -Sets of to [value] (true/false). If [value] is not supplied, returns the existing value of = -[value] must be true or false (or missing), not '@1'= -Invalid privilege: @1= -@1 privilege @2 by @3= -@1 privilege @2 for @3= -Missing executor= -= -Says to all players (which can include selectors such as @@a if you have the server priv)= - = -Sends privately to (which can include selectors like @@a if you have the server priv)= -@1 whispers to you: = -You whisper to @1: = -Broadcasts a message about yourself (which can include selectors like @@a if you have the server priv)= -= -Sends privately to all team members (which can include selectors like @@a if you have the server priv)= -An entity is required to run this command here= -You must be on a team to message your team= -[@1] <@2> = -Clears player inventories= -[targets] [items] [maxCount]= -maxCount must be a number= -No items were found on player @1= -Found @1 matching items(s) on player @2= -Removed all items from player @1= -Removed @1 item(s) from player @2= -No items were found on @1 players= -Found @1 matching items(s) on @2 players= -Removed all items from @1 players= -Removed @1 items from @2 players= -No player was found= -= -Runs any Better Commands command, so Better Commands don't have to override existing commands= -You don't have permission to run this command (missing privileges: @1)= -Invalid command: @1= -Runs any command that Better Commands has overridden= -Missing argument for subcommand @1= -Invalid swizzle, expected combination of 'x', 'y', and 'z'= -Invalid entity anchor position @1= -Invalid target: @1= -Invalid argument for @1= -Invalid argument for rotated= -Missing argument(s)) for rotated= -Missing command= -Invalid command or privs: @1= - ...= -Run any Better Command (not other commands) after changing the context= -Invalid subcommand: @1= -Successfully executed @1 times= -Sets a player's gamemode= - [player]= -Missing gamemode= -Set own gamemode to @1= -Set gamemode of @1 to @2= -Set gamemode of @1 players to @2= -Cannot give an empty item= -Unknown item '@1'= -Giving 'ignore' is not allowed= -Gave [@1] to @2= - [count] [wear]= -Gives [count] of to = -Gave item(s) to @1 players= - [count] [wear]= -Gives [count] of to yourself= -[target]= -Kills [target] or self= -Killed @1= -Killed @1 entities= -= -Kills self= -Unexpected argument: @1= - [volume] [pitch] [maxDistance]= -Plays a sound= -Must be a number, not @1= -Sound played= -objectives|players ...= -Manupulates the scoreboard= -Missing arguments= -Missing name= -Objective @1 already exists= -Missing criterion= -Invalid criterion @1= -Added objective @1= -There are no objectives= -There are @1 objective(s): @2= -Missing objective= -Unknown scoreboard objective '@1'= -Must be 'displayname' or 'numberformat'= -Missing display name= -@1 set to @2= -Cleared numberformat for @1= -Missing argument= -Invalid color= -Must be 'blank', 'fixed', or 'styled'= -Removed objective @1= -`list` support has not been added yet.= -`below_name` support has not been added yet.= -Must be 'list', 'below_name', 'sidebar', or 'sidebar.team.= -Expected ascending|descending, got @1= -Display slot @1 does not support sorting.= -Set display slot @1 to show objective @2= -Expected 'add', 'list', 'modify', 'remove', or 'setdisplay', got '@1'= -Missing target= -Missing score= -No scores found= -Set score for @1= -Set score for @1 entities= -Must be 'name' or 'numberformat'= -Set display name of @1 to @2= -Set display name of @1 entities to @2= -Cleared format for @1= -Must be 'name' or 'numberformat', not @1= -@1 is not a trigger objective= -No players found= -Enabled trigger [@1] for @2= -Enabled trigger [@1] for @2 players= -@1 has @2 [@3]= -@1 does not have a score for @2= -There are no tracked players= -There are @1 tracked player(s): @2= -@1 has no scores= -@1 has @2 score(s): @3= -Missing source selector= -Missing source objective= -Invalid source objective= -Missing operator= -Invalid operator: @1= -Missing target selector= -Missing target objective= -Invalid target objective= -Skipping attempt to divide by zero= -@1 [@2] score of @3 @4 [@5] score of @6= -Changed @1 scores (@2 total operations)= -Missing selector= -Invalid objective= -Missing min= -Must be a number= -Missing max= -Randomized score for @1= -Randomized @2 scores= -Reset score for @1= -Reset @2 scores= -Player @1 has no scores recorded= -Score @1 is in range @2 to @3= -Score @1 is NOT in range @2 to @3= -Expected 'add', 'display', 'enable', 'get', 'list', 'operation', 'random', 'reset', 'set', or 'test', got @1= -Allows players to set their own scores in certain conditions= -/trigger can only be used by players= -You can only trigger objectives that are 'trigger' type= -You cannot trigger this objective yet= -Triggered [@1]= -Missing value= -Value must be a number= -Triggered [@1] (added @2 to value)= -Triggered [@1] (set value to @2)= -Expected 'add' or 'set', got @1= -Invalid color: @1= -No target entities found= -No entities found= - [keep|replace]= -Places at . If keep, only replace air= -Last argument ust be either 'replace' (default)), 'keep', or missing, not @1= -Position is not empty= -Node set= -Sets or queries settings= - [value]= -Failed. Cannot modify secure settings. Edit the settings file manually= -Set @1 to @2 (new setting)= -Set @1 to @2= -Setting @1 has not been set= -Sets players' spawnpoints= -[targets]= -Spawn point set= -Non-player entities are not supported by this command= -No player was found.= -Set spawn point to @1 for @2= -Set spawn point to @1 for @2 players= -Clear players' spawnpoints= -Spawn point cleared= -Cleared spawn point for @2= -Set spawn point for @2 players= -Summons an entity= - [pos] [ ( [xRot]) | (facing ) ])= -Missing entity= -Invalid entity: @1= -Could not summon @1= -Summoned @1= -add|empty|join|leave|list|modify|remove ...= -Controls teams= -Missing subcommand= -Missing team name= -Team @1 already exists= -Invalid team name @1: Can only contain letters, numbers, and underscores= -Added team @1= -Removed team [@1]= -Removed all players from team [@1]= -Team @1 does not exist= -Joined team [@1]= -Added @1 to team [@2]= -Added @1 entities to [@2]= -Non-players cannot be on a team= -Removed @1 from any team= -There are @1 team(s): @2= -There are no teams= -Team [@1] has @2 member(s): @3= -There are no members on team [@1]= -Team [@1] does not exist= -Team name is required= -Unknown team '@1'= -Missing key= -Set color of team [@1] to @2= -Reset color of team [@1]= -Set display name of team [@1] to @2= -Reset display name of team [@1]= -Value must be 'true' or 'false', not @1= -Set friendly fire for team [@1] to @2= -Reset name format for team [@1]= -Set name format for team [@1] to @2= -Value must be 'color', 'displayName', 'friendlyFire', or 'nameFormat'= -Must be 'add', 'empty', 'join', 'leave', 'list', 'modify', or 'remove', not @1= -[entity/ies] ([yaw] [pitch] | [facing ])= -Teleports and rotates things= -Command blocks can't teleport (although I did consider making it possible)= -Teleported @1 to @2= -Teleported @1 entities to @2= -(add