mirror of
https://github.com/mt-mods/homedecor_modpack.git
synced 2024-11-16 15:20:35 +01:00
add proper air-checking and stacking of spiral staircases
also added a register_on_placenode hook to make sure other stuff can be placed on top of the staircase
This commit is contained in:
parent
e010bdeb27
commit
bcf9269235
|
@ -747,7 +747,7 @@ homedecor.register("spiral_staircase", {
|
||||||
},
|
},
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -1.5, -0.5, -1.5, 0.5, 3.0, 0.5 }
|
fixed = { -1.5, -0.5, -1.5, 0.5, 2.5, 0.5 }
|
||||||
},
|
},
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
@ -774,5 +774,57 @@ homedecor.register("spiral_staircase", {
|
||||||
},
|
},
|
||||||
groups = {choppy=2},
|
groups = {choppy=2},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||||
|
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||||
|
local leftx = homedecor.fdir_to_left[fdir+1][1]
|
||||||
|
local leftz = homedecor.fdir_to_left[fdir+1][2]
|
||||||
|
local revx = -homedecor.fdir_to_fwd[fdir+1][1]
|
||||||
|
local revz = -homedecor.fdir_to_fwd[fdir+1][2]
|
||||||
|
|
||||||
|
local corner1 = { x = pos.x + leftx + revx, y = pos.y, z = pos.z + leftz + revz}
|
||||||
|
local corner2 = { x = pos.x, y = pos.y + 2, z = pos.z }
|
||||||
|
|
||||||
|
local minp = { x = math.min(corner1.x, corner2.x),
|
||||||
|
y = math.min(corner1.y, corner2.y),
|
||||||
|
z = math.min(corner1.z, corner2.z) }
|
||||||
|
|
||||||
|
local maxp = { x = math.max(corner1.x, corner2.x),
|
||||||
|
y = math.max(corner1.y, corner2.y),
|
||||||
|
z = math.max(corner1.z, corner2.z) }
|
||||||
|
|
||||||
|
if #minetest.find_nodes_in_area(minp, maxp, "air") < 11 then
|
||||||
|
minetest.set_node(pos, {name = "air"})
|
||||||
|
minetest.chat_send_player(placer:get_player_name(), "This object takes up a 2x3x2 block of space (the bottom step goes in the forward-right corner), and some of it is occupied!" )
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local belownode = minetest.get_node({ x = pos.x, y = pos.y - 1, z = pos.z })
|
||||||
|
|
||||||
|
if belownode and belownode.name == "homedecor:spiral_staircase" then
|
||||||
|
local newpos = { x = pos.x, y = pos.y + 2, z = pos.z }
|
||||||
|
minetest.set_node(pos, { name = "air" })
|
||||||
|
minetest.set_node(newpos, { name = "homedecor:spiral_staircase", param2 = belownode.param2 })
|
||||||
|
end
|
||||||
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing)
|
||||||
|
|
||||||
|
local belownode = minetest.get_node({ x = pos.x, y = pos.y - 1, z = pos.z })
|
||||||
|
|
||||||
|
if belownode and belownode.name == "homedecor:spiral_staircase" then
|
||||||
|
|
||||||
|
minetest.set_node(pos, { name = "air" })
|
||||||
|
|
||||||
|
local newpos = { x = pos.x, y = pos.y + 2, z = pos.z }
|
||||||
|
local checknode = minetest.get_node(newpos)
|
||||||
|
|
||||||
|
if checknode and checknode.name == "air" then
|
||||||
|
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||||
|
minetest.set_node(newpos, { name = newnode.name, param2 = fdir })
|
||||||
|
else
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user