Constructor: Add protection check (#564)

Check if the player who placed constructor can access protected positions before placing or removing nodes.
This commit is contained in:
auouymous 2020-09-09 09:44:12 -07:00 committed by GitHub
parent 3c85abb3b2
commit d7336670f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -88,6 +88,7 @@ minetest.register_craft({
local function make_on(mark, length) local function make_on(mark, length)
return function(pos, node) return function(pos, node)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
local inv = meta:get_inventory() local inv = meta:get_inventory()
local dir = vector.new() local dir = vector.new()
if node.param2 == 3 then dir.x = 1 end if node.param2 == 3 then dir.x = 1 end
@ -102,6 +103,9 @@ local function make_on(mark, length)
minetest.check_for_falling(pos) minetest.check_for_falling(pos)
for i = 1, length do for i = 1, length do
place_pos = vector.add(place_pos, dir) 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) local place_node = minetest.get_node(place_pos)
deploy_node(inv, "slot"..i, place_pos, place_node, node) deploy_node(inv, "slot"..i, place_pos, place_node, node)
end end
@ -156,6 +160,11 @@ local function make_constructor(mark, length)
for i = 1, length do for i = 1, length do
inv:set_size("slot"..i, 1) inv:set_size("slot"..i, 1)
end 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, end,
can_dig = function(pos, player) can_dig = function(pos, player)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)