--- normalize_nodename wrapper for convenience purposes\r
-local function get_node(name, nodename)\r
- local node = worldedit.normalize_nodename(nodename)\r
- if not node then\r
- worldedit.player_notify(name, "invalid node name: " .. nodename)\r
- return nil\r
+-- Registers a chatcommand for WorldEdit\r
+-- name = "about" -- Name of the chat command (without any /)\r
+-- def = {\r
+-- privs = {}, -- Privileges needed\r
+-- params = "", -- Human readable parameter list (optional)\r
+-- -- setting params = "" will automatically provide a parse() if not given \r
+-- description = "", -- Description\r
+-- require_pos = 0, -- Number of positions required to be set (optional)\r
+-- parse = function(param)\r
+-- return true, foo, bar, ...\r
+-- -- or\r
+-- return false\r
+-- -- or\r
+-- return false, "error message"\r
+-- end,\r
+-- nodes_needed = function(name, foo, bar, ...), -- (optional)\r
+-- return n\r
+-- end,\r
+-- func = function(name, foo, bar, ...)\r
+-- return success, "message"\r
+-- end,\r
+-- }\r
+function worldedit.register_command(name, def)\r
+ local def = table.copy(def)\r
+ assert(name and #name > 0)\r
+ assert(def.privs)\r
+ def.require_pos = def.require_pos or 0\r
+ assert(def.require_pos >= 0 and def.require_pos < 3)\r
+ if def.params == "" and not def.parse then\r
+ def.parse = function(param) return true end\r
+ else\r
+ assert(def.parse)\r