diff --git a/builtin/common/chatcommands.lua b/builtin/common/chatcommands.lua index 52edda659..acde61a76 100644 --- a/builtin/common/chatcommands.lua +++ b/builtin/common/chatcommands.lua @@ -103,6 +103,49 @@ if INIT == "client" then return do_help_cmd(nil, param) end, }) + + function core.register_list_command(command, desc, setting) + local def = {} + def.description = desc + def.params = "del | add | list" + function def.func(param) + local list = (minetest.settings:get(setting) or ""):split(",") + if param == "list" then + return true, table.concat(list, ", ") + else + local sparam = param:split(" ") + local cmd = sparam[1] + local item = sparam[2] + if cmd == "del" then + if not item then + return false, "Missing item." + end + local i = table.indexof(list, item) + if i == -1 then + return false, item .. " is not on the list." + else + table.remove(list, i) + core.settings:set(setting, table.concat(list, ",")) + return true, "Removed " .. item .. " from the list." + end + elseif cmd == "add" then + if not item then + return false, "Missing item." + end + local i = table.indexof(list, item) + if i ~= -1 then + return false, item .. " is already on the list." + else + table.insert(list, item) + core.settings:set(setting, table.concat(list, ",")) + return true, "Added " .. item .. " to the list." + end + end + end + return false, "Invalid usage. (See /help " .. command .. ")" + end + core.register_chatcommand(command, def) + end else core.register_chatcommand("help", { params = "[all | privs | ]", diff --git a/clientmods/commands/init.lua b/clientmods/commands/init.lua index 8d06b85a5..68f027006 100644 --- a/clientmods/commands/init.lua +++ b/clientmods/commands/init.lua @@ -1,153 +1,4 @@ --- Minetest: builtin/common/chatcommands.lua - -core.registered_chatcommands = {} - -function core.register_chatcommand(cmd, def) - def = def or {} - def.params = def.params or "" - def.description = def.description or "" - def.privs = def.privs or {} - def.mod_origin = core.get_current_modname() or "??" - core.registered_chatcommands[cmd] = def -end - -function core.unregister_chatcommand(name) - if core.registered_chatcommands[name] then - core.registered_chatcommands[name] = nil - else - core.log("warning", "Not unregistering chatcommand " ..name.. - " because it doesn't exist.") - end -end - -function core.override_chatcommand(name, redefinition) - local chatcommand = core.registered_chatcommands[name] - assert(chatcommand, "Attempt to override non-existent chatcommand "..name) - for k, v in pairs(redefinition) do - rawset(chatcommand, k, v) - end - core.registered_chatcommands[name] = chatcommand -end - if INIT == "client" then - function core.register_list_command(command, desc, setting) - local def = {} - def.description = desc - def.params = "del | add | list" - function def.func(param) - local list = (minetest.settings:get(setting) or ""):split(",") - if param == "list" then - return true, table.concat(list, ", ") - else - local sparam = param:split(" ") - local cmd = sparam[1] - local item = sparam[2] - if cmd == "del" then - if not item then - return false, "Missing item." - end - local i = table.indexof(list, item) - if i == -1 then - return false, item .. " is not on the list." - else - table.remove(list, i) - core.settings:set(setting, table.concat(list, ",")) - return true, "Removed " .. item .. " from the list." - end - elseif cmd == "add" then - if not item then - return false, "Missing item." - end - local i = table.indexof(list, item) - if i ~= -1 then - return false, item .. " is already on the list." - else - table.insert(list, item) - core.settings:set(setting, table.concat(list, ",")) - return true, "Added " .. item .. " to the list." - end - end - end - return false, "Invalid usage. (See /help " .. command .. ")" - end - core.register_chatcommand(command, def) - end -end - -local cmd_marker = "/" - -local function gettext(...) - return ... -end - -local function gettext_replace(text, replace) - return text:gsub("$1", replace) -end - - -if INIT == "client" then - cmd_marker = "." - gettext = core.gettext - gettext_replace = fgettext_ne -end - -local function do_help_cmd(name, param) - local function format_help_line(cmd, def) - local msg = core.colorize("#00ffff", cmd_marker .. cmd) - if def.params and def.params ~= "" then - msg = msg .. " " .. def.params - end - if def.description and def.description ~= "" then - msg = msg .. ": " .. def.description - end - return msg - end - if param == "" then - local cmds = {} - for cmd, def in pairs(core.registered_chatcommands) do - if INIT == "client" or core.check_player_privs(name, def.privs) then - cmds[#cmds + 1] = cmd - end - end - table.sort(cmds) - return true, gettext("Available commands: ") .. table.concat(cmds, " ") .. "\n" - .. gettext_replace("Use '$1help ' to get more information," - .. " or '$1help all' to list everything.", cmd_marker) - elseif param == "all" then - local cmds = {} - for cmd, def in pairs(core.registered_chatcommands) do - if INIT == "client" or core.check_player_privs(name, def.privs) then - cmds[#cmds + 1] = format_help_line(cmd, def) - end - end - table.sort(cmds) - return true, gettext("Available commands:").."\n"..table.concat(cmds, "\n") - elseif INIT == "game" and param == "privs" then - local privs = {} - for priv, def in pairs(core.registered_privileges) do - privs[#privs + 1] = priv .. ": " .. def.description - end - table.sort(privs) - return true, "Available privileges:\n"..table.concat(privs, "\n") - else - local cmd = param - local def = core.registered_chatcommands[cmd] - if not def then - return false, gettext("Command not available: ")..cmd - else - return true, format_help_line(cmd, def) - end - end -end - -if INIT == "client" then - core.register_chatcommand("help", { - params = gettext("[all | ]"), - description = gettext("Get help for commands"), - func = function(param) - return do_help_cmd(nil, param) - end, - }) core.register_chatcommand("say", { description = "Send raw text", @@ -237,10 +88,4 @@ core.register_chatcommand("set", { end, }) -else - core.register_chatcommand("help", { - params = "[all | privs | ]", - description = "Get help for commands or list privileges", - func = do_help_cmd, - }) end