summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGael-de-Sailly <gael.chretien@akeonet.com>2015-07-02 16:38:02 +0200
committerGael-de-Sailly <gael.chretien@akeonet.com>2015-07-02 16:38:02 +0200
commitc30be1232a3200af86a1d196ac32899f1c97c021 (patch)
tree2799ff2c70ed5e6631ef23f57bd95237a0b1706b
parent074029a586d69cb87f570f1085ed97413f8ae118 (diff)
Rewrite mapfix
-rw-r--r--init.lua31
1 files changed, 24 insertions, 7 deletions
diff --git a/init.lua b/init.lua
index 5ec0549..4ba394e 100644
--- a/init.lua
+++ b/init.lua
@@ -1,22 +1,39 @@
+local function mapfix(minp, maxp)
+ local vm = minetest.get_voxel_manip(minp, maxp)
+ vm:update_liquids()
+ vm:write_to_map()
+ vm:update_map()
+end
+
+local previous = -math.huge
+
+local default_size = tonumber(minetest.setting_get("mapfix_default_size")) or 40
+local max_size = tonumber(minetest.setting_get("mapfix_max_size")) or 50
+local delay = tonumber(minetest.setting_get("mapfix_delay")) or 15
+
minetest.register_chatcommand("mapfix", {
params = "<size>",
description = "Recalculate the flowing liquids and the light of a chunk",
func = function(name, param)
local pos = minetest.get_player_by_name(name):getpos()
local size = tonumber(param) or 40
+ local privs = minetest.check_player_privs(name, {server=true})
+ local time = os.clock()
- if size > 50 and not minetest.check_player_privs(name, {server=true}) then
- return false, "You need the server privilege to exceed the radius of 50 blocks"
+ if not privs then
+ if size > 50 and not privs then
+ return false, "You need the server privilege to exceed the radius of " .. max_size .. " blocks"
+ elseif time - previous < 15 then
+ return false, "Wait at least " .. delay .. " seconds from the previous \"/mapfix\"."
+ end
+ previous = time
end
local minp = vector.round(vector.subtract(pos, size - 0.5))
local maxp = vector.round(vector.add(pos, size + 0.5))
- -- use the voxelmanip to fix problems
- local vm = minetest.get_voxel_manip(minp, maxp)
- vm:update_liquids()
- vm:write_to_map()
- vm:update_map()
+ minetest.log("action", name .. " uses mapfix at " .. minetest.pos_to_string(vector.round(pos)) .. " with radius " .. size)
+ mapfix(minp, maxp)
return true, "Done."
end,
})