Added wrapper for commands
This commit is contained in:
parent
e2e1657b65
commit
c0db2e3301
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -6,9 +6,6 @@ better_commands.register_command("ability", {
|
||||
description = S("Sets <priv> of <player> to [value] (true/false). If [value] is not supplied, returns the existing value of <priv>"),
|
||||
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
|
||||
|
@ -3,12 +3,9 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
better_commands.register_command("say", {
|
||||
params = S("<message>"),
|
||||
description = S("Says <message> to all players (which can include selectors such as @@a if you have the server priv)"),
|
||||
description = S("Says <message> 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("<target> <message>"),
|
||||
description = S("Sends <message> privately to <target> (which can include selectors like @@a if you have the server priv)"),
|
||||
description = S("Sends <message> privately to <target> (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("<action>"),
|
||||
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("<message>"),
|
||||
description = S("Sends <message> privately to all team members (which can include selectors like @@a if you have the server priv)"),
|
||||
description = S("Sends <message> 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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -14,9 +14,6 @@ better_commands.register_command("gamemode", {
|
||||
params = S("<gamemode> [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]
|
||||
|
@ -46,9 +46,6 @@ better_commands.register_command("give", {
|
||||
description = S("Gives [count] of <item> to <target>"),
|
||||
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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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 = "<objective> [add|set <value>]",
|
||||
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
|
||||
|
@ -5,9 +5,6 @@ better_commands.register_command("setblock", {
|
||||
params = S("<pos> <block> [keep|replace]"),
|
||||
description = S("Places <block> at <pos>. 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
|
||||
|
@ -6,8 +6,6 @@ better_commands.register_command("gamerule", {
|
||||
params = S("<setting> [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]
|
||||
|
@ -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]
|
||||
|
@ -6,9 +6,6 @@ better_commands.register_command("summon", {
|
||||
params = S("<entity> [pos] [ (<yRot> [xRot]) | (facing <entity>) ])"),
|
||||
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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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=
|
||||
<player> <priv> [value]=
|
||||
Sets <priv> of <player> to [value] (true/false). If [value] is not supplied, returns the existing value of <priv>=
|
||||
[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=
|
||||
<message>=
|
||||
Says <message> to all players (which can include selectors such as @@a if you have the server priv)=
|
||||
<target> <message>=
|
||||
Sends <message> privately to <target> (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)=
|
||||
<action>=
|
||||
Sends <message> 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=
|
||||
<command data>=
|
||||
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=
|
||||
<align|anchored|as|at|facing|positioned|rotated|run> ...=
|
||||
Run any Better Command (not other commands) after changing the context=
|
||||
Invalid subcommand: @1=
|
||||
Successfully executed @1 times=
|
||||
Sets a player's gamemode=
|
||||
<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=
|
||||
<target> <item> [count] [wear]=
|
||||
Gives [count] of <item> to <target>=
|
||||
Gave item(s) to @1 players=
|
||||
<item> [count] [wear]=
|
||||
Gives [count] of <item> to yourself=
|
||||
[target]=
|
||||
Kills [target] or self=
|
||||
Killed @1=
|
||||
Killed @1 entities=
|
||||
=
|
||||
Kills self=
|
||||
Unexpected argument: @1=
|
||||
<sound> <targets|pos> [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.<color>=
|
||||
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=
|
||||
<pos> <block> [keep|replace]=
|
||||
Places <block> at <pos>. 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=
|
||||
<setting> [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=
|
||||
<entity> [pos] [ (<yRot> [xRot]) | (facing <entity>) ])=
|
||||
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] <location/entity> ([yaw] [pitch] | [facing <location/entity>])=
|
||||
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 <time>)|(set <time>)|(query daytime|gametime|day)=
|
||||
Sets or gets the time=
|
||||
Time set=
|
||||
Current time: @1=
|
||||
Time since world creation: @1=
|
||||
Day count: @1=
|
||||
Must be 'daytime', 'gametime', or 'day', got @1=
|
||||
Must be 'add', 'set', or 'query'=
|
||||
Item=
|
||||
Falling Node=
|
||||
Angelfish=
|
||||
Bat=
|
||||
Bird=
|
||||
Blue Tang=
|
||||
Cat=
|
||||
Chicken=
|
||||
Clownfish=
|
||||
Cow=
|
||||
Fox=
|
||||
Frog=
|
||||
Grizzly Bear=
|
||||
Horse=
|
||||
Opossum=
|
||||
Owl=
|
||||
Pig=
|
||||
Rat=
|
||||
Reindeer=
|
||||
Sheep=
|
||||
Song Bird=
|
||||
Tropical Fish=
|
||||
Turkey=
|
||||
Wolf=
|
||||
Badger=
|
||||
Butterfly=
|
||||
Fire Dragon=
|
||||
Lightning Dragon=
|
||||
Poison Dragon=
|
||||
Ice Dragon=
|
||||
Boss Dragon=
|
||||
Elephant=
|
||||
Gnorm=
|
||||
Golem=
|
||||
Hedgehog=
|
||||
Nyan Cat=
|
||||
Ogre=
|
||||
Orc=
|
||||
Morgul Orc=
|
||||
Panda=
|
||||
Flying Pig=
|
||||
Skeleton=
|
||||
Tortoise=
|
||||
Treeman=
|
||||
Wasp=
|
||||
King of Sting=
|
||||
Boss Waterdragon=
|
||||
Waterdragon=
|
||||
Whale=
|
||||
Wyvern=
|
||||
Jungle Wyvern=
|
||||
Cyst=
|
||||
Flyingrod=
|
||||
Lavawalker=
|
||||
Noodlemaster=
|
||||
Razorback=
|
||||
Soka Archer=
|
||||
Soka Melee=
|
||||
Tardigrade=
|
||||
Flesh Whip=
|
||||
Bee=
|
||||
Bunny=
|
||||
Kitten=
|
||||
Penguin=
|
||||
Pumba=
|
||||
Balrog=
|
||||
Crocodile=
|
||||
Jellyfish=
|
||||
Mese Monster=
|
||||
Dirt Monster=
|
||||
Dungeon Master=
|
||||
Fire Spirit=
|
||||
Land Guard=
|
||||
Lava Flan=
|
||||
Obsidian Flan=
|
||||
Oerkki=
|
||||
Sand Monster=
|
||||
Spider=
|
||||
Stone Monster=
|
||||
Tree Monster=
|
||||
Shark=
|
||||
Skeleton Archer=
|
||||
Dark Skeleton Archer=
|
||||
Turtle=
|
||||
Sea Turtle=
|
||||
Ant Queen=
|
||||
Ant Soldier=
|
||||
Ant Worker=
|
||||
Black Widow=
|
||||
Bloco=
|
||||
Crab=
|
||||
Daddy Long Legs=
|
||||
Dolidrosaurus=
|
||||
Duck=
|
||||
Duckking=
|
||||
Echidna=
|
||||
Enderduck=
|
||||
Felucco=
|
||||
Flying Duck=
|
||||
Giant Sandworm=
|
||||
Icelamander=
|
||||
Icesnake=
|
||||
Kraken=
|
||||
Larva=
|
||||
Lava Titan=
|
||||
Manticore=
|
||||
Mantis=
|
||||
Mantis Beast=
|
||||
Masticone=
|
||||
Mese Dragon=
|
||||
Moonheron=
|
||||
Morbat=
|
||||
Mordain=
|
||||
Morde=
|
||||
Morgre=
|
||||
Morgut=
|
||||
Morlu=
|
||||
Mortick=
|
||||
Morvalar=
|
||||
Morvy=
|
||||
Morwa=
|
||||
Night Master=
|
||||
Octopus=
|
||||
Phoenix=
|
||||
Pumpboom=
|
||||
Pumpking=
|
||||
Sand Bloco=
|
||||
Sandworm=
|
||||
Scrausics=
|
||||
Signosigno=
|
||||
Snow Biter=
|
||||
Spiderduck=
|
||||
Stoneater=
|
||||
Swimming Duck=
|
||||
Tarantula=
|
||||
Uloboros=
|
||||
Werewolf=
|
||||
Xgaloctobus=
|
||||
@1 Sheep=
|
Loading…
x
Reference in New Issue
Block a user