we_core: fix bugs, add more useful error messages

This commit is contained in:
Starbeamrainbowlabs 2021-11-07 13:35:40 +00:00
parent 3f1f3b5628
commit 12371a472d
No known key found for this signature in database
GPG Key ID: 1BE5172E637709C2
6 changed files with 35 additions and 11 deletions

@ -6,6 +6,7 @@ exclude_files = {
"worldeditadditions/utils/bit.lua" "worldeditadditions/utils/bit.lua"
} }
files["worldeditadditions_core/register/check.lua"] = { read_globals = { "table" } }
ignore = { ignore = {
"631", "61[124]", "631", "61[124]",

@ -1,14 +1,37 @@
function worldeditadditions_core.register_command(def) function worldeditadditions_core.register_command(name, def)
-- TODO: Implement our own deep copy function here
-- Depending on a Minetest-specific addition here makes be very uneasy
-- ...especially since it's not obvious at first glance that this isn't a
-- core feature provided by Lua itself
local def = table.copy(def) local def = table.copy(def)
assert(name and #name > 0)
assert(def.privs) assert(
def.privs,
"Error: No privileges specified in definition of command '"..name.."'."
)
def.require_pos = def.require_pos or 0 def.require_pos = def.require_pos or 0
assert(def.require_pos >= 0 and def.require_pos < 3) assert(def.require_pos >= 0 and def.require_pos < 3)
if def.params == "" and not def.parse then if def.params == "" and not def.parse then
def.parse = function(params_text) return true end def.parse = function(params_text) return true end
else else
assert(def.parse) assert(
def.parse,
"Error: No parameter parsing function specified, even though parameters were specified in definition of command '"..name.."'."
)
end end
assert(def.nodes_needed == nil or type(def.nodes_needed) == "function")
assert(def.func) assert(
def.nodes_needed == nil or type(def.nodes_needed) == "function",
"Error: nodes_needed must be either not specified or be a function that returns the number of nodes that could potentially be changed for a given set fo parsed parameters in definition of command '"..name.."'"
)
assert(
def.func,
"Error: 'func' is not defined. It must be defined to the function to call to run the command in definition of command '"..name.."'."
)
return def
end end

@ -1,5 +1,5 @@
function worldeditadditions_core.chatcommand_handler(cmd_name, name, param) function worldeditadditions_core.chatcommand_handler(cmd_name, name, param)
local def = assert(worldedit.registered_commands[cmd_name]) local def = assert(worldedit.registered_commands[cmd_name], "Error: Failed to locate worldedit command definition for command '"..name.."' (this is probably a bug).")
if def.require_pos == 2 then if def.require_pos == 2 then
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]

@ -1,6 +1,6 @@
local we_c = worldeditadditions_core local we_c = worldeditadditions_core
function we_c.override_command(name, def) function we_c.override_command(name, def)
local success, def = we_c.check(def) local success, def = we_c.check(name, def)
if not success then if not success then
return false, def return false, def

@ -1,6 +1,6 @@
local we_c = worldeditadditions_core local we_c = worldeditadditions_core
function we_c.register_command(name, def) function we_c.register_command(name, def)
local success, def = we_c.check(def) local success, def = we_c.check(name, def)
if not success then if not success then
return false, def return false, def

@ -1,4 +1,4 @@
--- WorldEdit dependencies for WorldEditAdditions --- WorldEdit shim just in case WorldEdit doesn't exist
worldedit = { worldedit = {
registered_commands = { } registered_commands = { }