auouymous
2020-09-09 d7336670f2bdc69c343ddac76b6e2d2e64f930c0
Constructor: Add protection check (#564)

Check if the player who placed constructor can access protected positions before placing or removing nodes.
1 files modified
9 ■■■■■ changed files
technic/machines/other/constructor.lua 9 ●●●●● patch | view | raw | blame | history
technic/machines/other/constructor.lua
@@ -88,6 +88,7 @@
local function make_on(mark, length)
    return function(pos, node)
        local meta = minetest.get_meta(pos)
        local owner = meta:get_string("owner")
        local inv = meta:get_inventory()
        local dir = vector.new()
        if node.param2 == 3 then dir.x = 1 end
@@ -102,6 +103,9 @@
            minetest.check_for_falling(pos)
            for i = 1, length do
                place_pos = vector.add(place_pos, dir)
                if owner ~= "" and minetest.is_protected(place_pos, owner) then
                    return
                end
                local place_node = minetest.get_node(place_pos)
                deploy_node(inv, "slot"..i, place_pos, place_node, node)
            end
@@ -156,6 +160,11 @@
            for i = 1, length do
                inv:set_size("slot"..i, 1)
            end
            meta:set_string("owner", "?")
        end,
        after_place_node = function(pos, placer)
            local meta = minetest.get_meta(pos)
            meta:set_string("owner", (placer and placer:get_player_name() or "?"))
        end,
        can_dig = function(pos, player)
            local meta = minetest.get_meta(pos)