forked from mtcontrib/homedecor_modpack
fix missing protection on sofas and coffee tables
add some informative messages
This commit is contained in:
parent
b20b3bb8e9
commit
e492780510
|
@ -24,9 +24,13 @@ minetest.register_node("lrfurn:coffeetable_back", {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
on_construct = function(pos)
|
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||||
|
if minetest.is_protected(pos, placer:get_player_name()) then return true end
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local param2 = node.param2
|
local param2 = node.param2
|
||||||
|
|
||||||
|
if lrfurn.check_forward(pos, fdir, false, placer) then
|
||||||
|
|
||||||
node.name = "lrfurn:coffeetable_front"
|
node.name = "lrfurn:coffeetable_front"
|
||||||
if param2 == 0 then
|
if param2 == 0 then
|
||||||
pos.z = pos.z+1
|
pos.z = pos.z+1
|
||||||
|
@ -37,14 +41,19 @@ minetest.register_node("lrfurn:coffeetable_back", {
|
||||||
elseif param2 == 3 then
|
elseif param2 == 3 then
|
||||||
pos.x = pos.x-1
|
pos.x = pos.x-1
|
||||||
end
|
end
|
||||||
if( minetest.get_node({x=pos.x, y=pos.y, z=pos.z}).name == "air" ) then
|
|
||||||
minetest.set_node(pos, node)
|
minetest.set_node(pos, node)
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(placer:get_player_name(), "No room to place the coffee table!")
|
||||||
|
minetest.set_node(pos, {name = "air"})
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_destruct = function(pos)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
local node = minetest.get_node(pos)
|
if minetest.is_protected(pos, digger:get_player_name()) then return true end
|
||||||
local param2 = node.param2
|
|
||||||
|
local param2 = oldnode.param2
|
||||||
if param2 == 0 then
|
if param2 == 0 then
|
||||||
pos.z = pos.z+1
|
pos.z = pos.z+1
|
||||||
elseif param2 == 1 then
|
elseif param2 == 1 then
|
||||||
|
@ -54,11 +63,13 @@ minetest.register_node("lrfurn:coffeetable_back", {
|
||||||
elseif param2 == 3 then
|
elseif param2 == 3 then
|
||||||
pos.x = pos.x-1
|
pos.x = pos.x-1
|
||||||
end
|
end
|
||||||
if( minetest.get_node({x=pos.x, y=pos.y, z=pos.z}).name == "lrfurn:coffeetable_front" ) then
|
|
||||||
if( minetest.get_node({x=pos.x, y=pos.y, z=pos.z}).param2 == param2 ) then
|
if minetest.is_protected(pos, digger:get_player_name()) then return true end
|
||||||
|
|
||||||
|
if (minetest.get_node({x=pos.x, y=pos.y, z=pos.z}).name == "lrfurn:coffeetable_front")
|
||||||
|
and (minetest.get_node({x=pos.x, y=pos.y, z=pos.z}).param2 == param2) then
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -8,19 +8,32 @@ lrfurn.fdir_to_fwd = {
|
||||||
{ -1, 0 },
|
{ -1, 0 },
|
||||||
}
|
}
|
||||||
|
|
||||||
function lrfurn.check_forward(pos, fdir, long)
|
function lrfurn.check_forward(pos, fdir, long, placer)
|
||||||
|
|
||||||
if not fdir or fdir > 3 then fdir = 0 end
|
if not fdir or fdir > 3 then fdir = 0 end
|
||||||
|
|
||||||
local pos2 = { x = pos.x + lrfurn.fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + lrfurn.fdir_to_fwd[fdir+1][2] }
|
local pos2 = { x = pos.x + lrfurn.fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + lrfurn.fdir_to_fwd[fdir+1][2] }
|
||||||
local pos3 = { x = pos.x + lrfurn.fdir_to_fwd[fdir+1][1] * 2, y=pos.y, z = pos.z + lrfurn.fdir_to_fwd[fdir+1][2] * 2 }
|
local pos3 = { x = pos.x + lrfurn.fdir_to_fwd[fdir+1][1] * 2, y=pos.y, z = pos.z + lrfurn.fdir_to_fwd[fdir+1][2] * 2 }
|
||||||
|
|
||||||
local node2 = minetest.get_node(pos2)
|
local node2 = minetest.get_node(pos2)
|
||||||
if node2 and node2.name ~= "air" then return false end
|
if node2 and node2.name ~= "air" then
|
||||||
|
return false
|
||||||
|
elseif minetest.is_protected(pos2, placer:get_player_name()) then
|
||||||
|
if not long then
|
||||||
|
minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where other end goes!")
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where the middle or far end goes!")
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
if long then
|
if long then
|
||||||
local node3 = minetest.get_node(pos3)
|
local node3 = minetest.get_node(pos3)
|
||||||
if node3 and node3.name ~= "air" then return false end
|
if node3 and node3.name ~= "air" then
|
||||||
|
return false
|
||||||
|
elseif minetest.is_protected(pos3, placer:get_player_name()) then
|
||||||
|
minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where the other end goes!")
|
||||||
|
return false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -42,15 +42,18 @@ for i in ipairs(longsofas_list) do
|
||||||
selection_box = longsofa_sbox,
|
selection_box = longsofa_sbox,
|
||||||
node_box = longsofa_cbox,
|
node_box = longsofa_cbox,
|
||||||
on_rotate = screwdriver.disallow,
|
on_rotate = screwdriver.disallow,
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
local pos = pointed_thing.above
|
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||||
|
if minetest.is_protected(pos, placer:get_player_name()) then return true end
|
||||||
|
|
||||||
local fdir = minetest.dir_to_facedir(placer:get_look_dir(), false)
|
local fdir = minetest.dir_to_facedir(placer:get_look_dir(), false)
|
||||||
|
|
||||||
if lrfurn.check_forward(pos, fdir, true) then
|
if lrfurn.check_forward(pos, fdir, true, placer) then
|
||||||
minetest.set_node(pos, {name = "lrfurn:longsofa_"..colour, param2 = fdir})
|
minetest.set_node(pos, {name = "lrfurn:longsofa_"..colour, param2 = fdir})
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
else
|
else
|
||||||
minetest.chat_send_player(placer:get_player_name(), "No room to place the sofa!")
|
minetest.chat_send_player(placer:get_player_name(), "No room to place the sofa!")
|
||||||
|
minetest.set_node(pos, { name = "air" })
|
||||||
end
|
end
|
||||||
return itemstack
|
return itemstack
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -42,15 +42,19 @@ for i in ipairs(sofas_list) do
|
||||||
selection_box = sofa_sbox,
|
selection_box = sofa_sbox,
|
||||||
node_box = sofa_cbox,
|
node_box = sofa_cbox,
|
||||||
on_rotate = screwdriver.disallow,
|
on_rotate = screwdriver.disallow,
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
local pos = pointed_thing.above
|
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||||
|
if minetest.is_protected(pos, placer:get_player_name()) then return true end
|
||||||
|
|
||||||
local fdir = minetest.dir_to_facedir(placer:get_look_dir(), false)
|
local fdir = minetest.dir_to_facedir(placer:get_look_dir(), false)
|
||||||
|
|
||||||
if lrfurn.check_forward(pos, fdir, true) then
|
if lrfurn.check_forward(pos, fdir, false, placer) then
|
||||||
minetest.set_node(pos, {name = "lrfurn:sofa_"..colour, param2 = fdir})
|
minetest.set_node(pos, {name = "lrfurn:sofa_"..colour, param2 = fdir})
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
else
|
else
|
||||||
minetest.chat_send_player(placer:get_player_name(), "No room to place the sofa!")
|
minetest.chat_send_player(placer:get_player_name(), "No room to place the sofa!")
|
||||||
|
minetest.set_node(pos, { name = "air" })
|
||||||
|
|
||||||
end
|
end
|
||||||
return itemstack
|
return itemstack
|
||||||
end,
|
end,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user