Check for area protection in buckets
authorNovatux <nathanael.courant@laposte.net>
Sat, 23 Nov 2013 20:54:19 +0000 (21:54 +0100)
committerShadowNinja <noreply@gmail.com>
Sat, 14 Dec 2013 18:51:07 +0000 (13:51 -0500)
mods/bucket/init.lua

index c3f20b3a669b61fd59fabe8d513c273cdc20dd46..c566dda55a192aad6e62d1ffbeed6c772254d7bb 100644 (file)
@@ -18,6 +18,19 @@ minetest.register_craft({
 bucket = {}
 bucket.liquids = {}
 
+local function check_protection(pos, name, text)
+       if minetest.is_protected(pos, name) then
+               minetest.log("action", name
+                       .. " tried to " .. text
+                       .. " at protected position "
+                       .. minetest.pos_to_string(pos)
+                       .. " with a bucket")
+               minetest.record_protection_violation(pos, name)
+               return true
+       end
+       return false
+end
+
 -- Register a new liquid
 --   source = name of the source node
 --   flowing = name of the flowing node
@@ -55,6 +68,11 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
                                end
 
                                local place_liquid = function(pos, node, source, flowing, fullness)
+                                       if check_protection(pos,
+                                                       user:get_player_name(),
+                                                       "place "..source) then
+                                               return
+                                       end
                                        if math.floor(fullness/128) == 1 or (not minetest.setting_getbool("liquid_finite")) then
                                                minetest.add_node(pos, {name=source, param2=fullness})
                                                return
@@ -112,6 +130,12 @@ minetest.register_craftitem("bucket:bucket_empty", {
                if liquiddef ~= nil and liquiddef.itemname ~= nil and (node.name == liquiddef.source or
                        (node.name == liquiddef.flowing and minetest.setting_getbool("liquid_finite"))) then
 
+                       if check_protection(pointed_thing.under,
+                                       user:get_player_name(),
+                                       "take ".. node.name) then
+                               return
+                       end
+
                        minetest.add_node(pointed_thing.under, {name="air"})
 
                        if node.name == liquiddef.source then node.param2 = LIQUID_MAX end