return (self:gsub("^%s*(.-)%s*$", "%1"))
end
-assert(string.trim("\n \t\tfoo\t ") == "foo")
+assert(string.trim("\n \t\tfoo bar\t ") == "foo bar")
+
+function minetest.pos_to_string(pos)
+ return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
+end
--
-- Item definition helpers
.. "{" .. img3:gsub("%^", "&")
end
-function minetest.pos_to_string(pos)
- return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
-end
-
function minetest.get_pointed_thing_position(pointed_thing, above)
if pointed_thing.type == "node" then
if above then
return list
end
+function minetest.hash_node_position(pos)
+ return (pos.z+32768)*65536*65536 + (pos.y+32768)*65536 + pos.x+32768
+end
+
+--
+-- Privileges
+--
+
minetest.registered_privileges = {}
function minetest.register_privilege(name, description)
minetest.registered_privileges[name] = description
local newtable = {}
local file, errmsg = io.open(minetest.auth_file_path, 'rb')
if not file then
- error(minetest.auth_file_path.." could not be opened for reading: "..errmsg)
+ minetest.log("info", minetest.auth_file_path.." could not be opened for reading ("..errmsg.."); assuming new world")
+ return
end
for line in file:lines() do
if line ~= "" then
if not minetest.auth_table[name] then
minetest.builtin_auth_handler.create_auth(name, minetest.get_password_hash(name, minetest.setting_get("default_password")))
end
- if minetest.is_singleplayer() or name == minetest.setting_get("name") then
+ if minetest.is_singleplayer() then
return {
password = "",
privileges = minetest.registered_privileges
}
else
- return minetest.auth_table[name]
+ if minetest.auth_table[name] and name == minetest.setting_get("name") then
+ return {
+ password = minetest.auth_table[name].password,
+ privileges = minetest.registered_privileges
+ }
+ else
+ return minetest.auth_table[name]
+ end
end
end,
create_auth = function(name, password)