diff --git a/mods/CORE/mcl_mapgen/init.lua b/mods/CORE/mcl_mapgen/init.lua index 35090b714..2d7e0eba7 100644 --- a/mods/CORE/mcl_mapgen/init.lua +++ b/mods/CORE/mcl_mapgen/init.lua @@ -488,3 +488,6 @@ function mcl_mapgen.clamp_to_chunk(x, size) end return x - overflow end +function mcl_mapgen.get_chunk_beginning(x) + return x - ((x + central_chunk_min_pos) % CS_NODES) +end diff --git a/mods/MAPGEN/mcl_structures/jungle_temple.lua b/mods/MAPGEN/mcl_structures/jungle_temple.lua index 9bdf1d111..2fe1fdd2b 100644 --- a/mods/MAPGEN/mcl_structures/jungle_temple.lua +++ b/mods/MAPGEN/mcl_structures/jungle_temple.lua @@ -22,9 +22,28 @@ local corner_z = sz - 3 local air_offset_x = ox - 6 local air_offset_z = oz - 6 +local function is_air(pos) + local node = minetest.get_node(pos) + return node.name == "air" +end + +local stair_support_node = {name = "mcl_core:cobble"} local function on_placed(p1, rotation, pr, size) local p2 = {x = p1.x + sx - 1, y = p1.y + sy - 1, z = p1.z + sz - 1} + -- Support stairs + local y = p1.y + 5 + local bottom = mcl_mapgen.get_chunk_beginning(y) + local stair_list = minetest.find_nodes_in_area({x = p1.x, y = y, z = p1.z}, {x = p2.x, y = y, z = p2.z}, {"mcl_stairs:stair_cobble"}, false) + for i = 1, #stair_list do + local pos = stair_list[i] + pos.y = y - 1 + while is_air(pos) and pos.y > bottom do + minetest.swap_node(pos, stair_support_node) + pos.y = pos.y - 1 + end + end + -- Find chests. local chests = minetest.find_nodes_in_area(p1, {x = p2.x, y = p1.y + 5, z = p2.z}, "mcl_chests:chest") @@ -87,11 +106,6 @@ local function process_pos(pos) } end -local function is_air(pos) - local node = minetest.get_node(pos) - return node.name == "air" -end - local function get_place_rank(pos) local x1 = pos.x + 1 local x2 = x1 + corner_x @@ -107,7 +121,7 @@ local function get_place_rank(pos) local p1 = {x = x1 + air_offset_x, y = y2, z = z1 + air_offset_z} local p2 = {x = x2 - air_offset_x, y = y2, z = z2 + air_offset_z} local pos_counter_air = #minetest.find_nodes_in_area(p1, p2, {"air", "group:buildable_to", "group:deco_block"}, false) - local pos_counter_air = pos_counter_air - #minetest.find_nodes_in_area(p1, p2, {"group:tree"}, false) + local pos_counter_air = pos_counter_air - 2 * (#minetest.find_nodes_in_area(p1, p2, {"group:tree"}, false)) local p1 = {x = x1 + 1, y = y1, z = z1 + 1} local p2 = {x = x2 - 1, y = y1, z = z2 - 1}