forked from mtcontrib/locks
Add check for is_protected when placing door
This commit is contained in:
parent
2f420ef71a
commit
0458df996e
@ -1,4 +1,4 @@
|
|||||||
-- xDoors² mod by xyz
|
-- xDoors² mod by xyz
|
||||||
-- modified by Sokomine to allow locked doors that can only be opened/closed/dig up by the player who placed them
|
-- modified by Sokomine to allow locked doors that can only be opened/closed/dig up by the player who placed them
|
||||||
-- a little bit modified by addi to allow someone with the priv "opendoors" to open/close/dig all locked doors.
|
-- a little bit modified by addi to allow someone with the priv "opendoors" to open/close/dig all locked doors.
|
||||||
-- Sokomine: modified again so that it uses the new locks-mod
|
-- Sokomine: modified again so that it uses the new locks-mod
|
||||||
@ -139,38 +139,42 @@ minetest.register_node("locks:door", {
|
|||||||
stack_max = 1,
|
stack_max = 1,
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
local above = pointed_thing.above
|
local above = pointed_thing.above
|
||||||
|
if minetest.is_protected(above, placer:get_player_name()) then
|
||||||
-- there should be 2 empty nodes
|
minetest.chat_send_player(placer:get_player_name(), "This area is protected!")
|
||||||
if minetest.env:get_node({x = above.x, y = above.y + 1, z = above.z}).name ~= "air" then
|
return itemstack
|
||||||
return itemstack
|
else
|
||||||
end
|
-- there should be 2 empty nodes
|
||||||
|
if minetest.env:get_node({x = above.x, y = above.y + 1, z = above.z}).name ~= "air" then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
local fdir = 0
|
local fdir = 0
|
||||||
local placer_pos = placer:getpos()
|
local placer_pos = placer:getpos()
|
||||||
if placer_pos then
|
if placer_pos then
|
||||||
dir = {
|
dir = {
|
||||||
x = above.x - placer_pos.x,
|
x = above.x - placer_pos.x,
|
||||||
y = above.y - placer_pos.y,
|
y = above.y - placer_pos.y,
|
||||||
z = above.z - placer_pos.z
|
z = above.z - placer_pos.z
|
||||||
}
|
}
|
||||||
fdir = minetest.dir_to_facedir(dir)
|
fdir = minetest.dir_to_facedir(dir)
|
||||||
end
|
end
|
||||||
|
|
||||||
local t = 1
|
local t = 1
|
||||||
local another_door = minetest.env:get_node({x = above.x + delta[fdir + 1].x, y = above.y, z = above.z + delta[fdir + 1].z})
|
local another_door = minetest.env:get_node({x = above.x + delta[fdir + 1].x, y = above.y, z = above.z + delta[fdir + 1].z})
|
||||||
if (another_door.name:sub(-1) == "1" and another_door.param2 == fdir)
|
if (another_door.name:sub(-1) == "1" and another_door.param2 == fdir)
|
||||||
or (another_door.name:sub(-1) == "2" and another_door.param2 == (fdir + 1) % 4) then
|
or (another_door.name:sub(-1) == "2" and another_door.param2 == (fdir + 1) % 4) then
|
||||||
t = 2
|
t = 2
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.env:add_node(above, {name = "locks:door_bottom_"..t, param2 = fdir})
|
minetest.env:add_node(above, {name = "locks:door_bottom_"..t, param2 = fdir})
|
||||||
minetest.env:add_node({x = above.x, y = above.y + 1, z = above.z}, {name = "locks:door_top_"..t, param2 = fdir})
|
minetest.env:add_node({x = above.x, y = above.y + 1, z = above.z}, {name = "locks:door_top_"..t, param2 = fdir})
|
||||||
|
|
||||||
-- store who owns the door; the other data can be default for now
|
-- store who owns the door; the other data can be default for now
|
||||||
locks:lock_set_owner( above, placer:get_player_name() or "", "Shared locked door");
|
locks:lock_set_owner( above, placer:get_player_name() or "", "Shared locked door");
|
||||||
locks:lock_set_owner( {x = above.x, y = above.y + 1, z = above.z}, placer:get_player_name() or "", "Shared locked door");
|
locks:lock_set_owner( {x = above.x, y = above.y + 1, z = above.z}, placer:get_player_name() or "", "Shared locked door");
|
||||||
|
|
||||||
return ItemStack("")
|
return ItemStack("")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user