1
0
mirror of https://github.com/mt-mods/homedecor_modpack.git synced 2025-06-28 12:56:01 +02:00

add banisters, placed on side of blocks

when placing, code will try to determine if the bannister should be
left- or right-sided.  Defaults to left-sided; hold shift while placing
to force right-sided.
This commit is contained in:
Vanessa Ezekowitz
2015-04-27 03:04:22 -04:00
parent c0bb7fc784
commit c8633be1dc
8 changed files with 445 additions and 2 deletions

View File

@ -197,3 +197,49 @@ function homedecor.unextend_bed(pos, color)
end
end
function homedecor.place_banister(itemstack, placer, pointed_thing)
local pos, def = select_node(pointed_thing)
if def.on_rightclick then
return def.on_rightclick(pointed_thing.under, minetest.get_node(pos), placer, itemstack)
end
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
local abovepos = { x=pos.x, y=pos.y+1, z=pos.z }
local abovenode = minetest.get_node(abovepos)
local adef = minetest.registered_nodes[abovenode.name]
local placer_name = placer:get_player_name()
if not (adef and adef.buildable_to) then
minetest.chat_send_player(placer_name, "Not enough room - the upper space is occupied!" )
return
end
if minetest.is_protected(abovepos, placer_name) then
minetest.chat_send_player(placer_name, "Someone already owns that spot." )
return
end
local rxd = homedecor.fdir_to_right[fdir+1][1]
local rzd = homedecor.fdir_to_right[fdir+1][2]
local fxd = homedecor.fdir_to_fwd[fdir+1][1]
local fzd = homedecor.fdir_to_fwd[fdir+1][2]
local right_fwd_above_pos = { x=pos.x+rxd+fxd, y=pos.y+1, z=pos.z+rzd+fzd }
local right_fwd_above_node = minetest.get_node(right_fwd_above_pos)
local new_place_name = itemstack:get_name()
if placer:get_player_control()["sneak"]
or not is_buildable_to(placer_name, right_fwd_above_pos, nil, right_fwd_above_pos) then
new_place_name = string.gsub(new_place_name, "_left", "_right")
end
minetest.set_node(pos, {name = new_place_name, param2 = fdir})
itemstack:take_item()
return itemstack
end