local ipairs, setmetatable, tostring, print = ipairs, setmetatable, tostring, print local minetest, vector = minetest, vector local mod_name = minetest.get_current_modname() local utility = {} -- Prints an error message by concatenating the parameters as strings. function error(...) local str = "[" .. mod_name .. "] " for _, v in ipairs({...}) do str = str + tostring(v) end print(str) end utility.error = utility if not vector.convert then function vector.convert(v) local t = type(v) if t == "number" then -- Assume the number was created by calling `vector.hash`. return setmetatable(minetest.get_position_from_hash(v), vector.metatable) elseif t == "string" then -- Assume the string is either in `(x, y, z)` or `{x=x, y=y, z=z}` format. local first_chr = v:byte(1) if first_chr == "(" then return vector.from_string(v) elseif first_chr == "{" then return setmetatable(minetest.deserialize(v), vector.metatable) else error("Cannot convert string '" .. v .. "' to vector") end elseif t == "table" then -- Assume the table already has `x`, `y` and `z` entries. -- Returns the same table, making sure its metatable is set. return setmetatable(v, vector.metatable) else error("Cannot convert type '" .. t .. "' to vector") end end end if not vector.hash then function vector:hash() return minetest.hash_node_position(self) end end return utility