diff --git a/mods/MAPGEN/mcl_nether_fortresses/init.lua b/mods/MAPGEN/mcl_nether_fortresses/init.lua index a250b7fbd..4375089ee 100644 --- a/mods/MAPGEN/mcl_nether_fortresses/init.lua +++ b/mods/MAPGEN/mcl_nether_fortresses/init.lua @@ -19,7 +19,6 @@ mcl_structures.register_structure("nether_outpost",{ after_place = function(pos) local sp = minetest.find_nodes_in_area(pos,vector.offset(pos,0,20,0),{"mcl_mobspawners:spawner"}) if not sp[1] then return end - table.shuffle(sp) mcl_mobspawners.setup_spawner(sp[1], "mobs_mc:blaze", 0, minetest.LIGHT_MAX+1, 10, 8, 0) end }) @@ -37,6 +36,9 @@ mcl_structures.register_structure("nether_bulwark",{ filenames = { modpath.."/schematics/mcl_nether_fortresses_nether_bulwark.mts" }, + daughters = { + [modpath.."/schematics/mcl_nether_fortresses_nether_bulwark_interior_1.mts"] = vector.new(5,0,5), + }, y_offset = 0, construct_nodes = {"group:wall"}, after_place = function(pos,def,pr) diff --git a/mods/MAPGEN/mcl_nether_fortresses/schematics/mcl_nether_fortresses_nether_bulwark_interior_1.mts b/mods/MAPGEN/mcl_nether_fortresses/schematics/mcl_nether_fortresses_nether_bulwark_interior_1.mts new file mode 100644 index 000000000..a4fb24f28 Binary files /dev/null and b/mods/MAPGEN/mcl_nether_fortresses/schematics/mcl_nether_fortresses_nether_bulwark_interior_1.mts differ diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index f542dddba..f385bb2f3 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -1,5 +1,11 @@ mcl_structures.registered_structures = {} - +local rotations = { + "0", + "90", + "180", + "270" +} +local place_queue = {} local disabled_structures = minetest.settings:get("mcl_disabled_structures") if disabled_structures then disabled_structures = disabled_structures:split(",") else disabled_structures = {} end @@ -140,6 +146,18 @@ local function foundation(ground_p1,ground_p2,pos,sidelen) minetest.bulk_set_node(stone,{name=node_stone}) end +local function process_queue() + if #place_queue < 1 then return end + local s = table.remove(place_queue) + mcl_structures.place_schematic(s.pos, s.file, s.rot, nil, true, "place_center_x,place_center_z",function(s) + if s.after_place then + s.after_place(s.pos,s.def,s.pr) + end + end,s.pr) + minetest.after(0.5,process_queue) +end + + function mcl_structures.place_structure(pos, def, pr, blockseed) if not def then return end local log_enabled = logging and not def.terrain_feature @@ -177,12 +195,30 @@ function mcl_structures.place_structure(pos, def, pr, blockseed) local r = pr:next(1,#def.filenames) local file = def.filenames[r] if file then + local rot = rotations[pr:next(1,#rotations)] local ap = function(pos,def,pr,blockseed) end - if def.after_place then ap = def.after_place end - mcl_structures.place_schematic(pp, file, "random", nil, true, "place_center_x,place_center_z",function(p) - if def.loot then generate_loot(pp,def,pr,blockseed) end - if def.construct_nodes then construct_nodes(pp,def,pr,blockseed) end + if def.daughters then + for fn,p in pairs(def.daughters) do + local p = vector.add(pp,p) + ap = function(pos,def,pr,blockseed) + mcl_structures.place_schematic(pos, fn, rot, nil, true, "place_center_x,place_center_z",function() + if def.loot then generate_loot(pp,def,pr,blockseed) end + if def.construct_nodes then construct_nodes(pp,def,pr,blockseed) end + if def.after_place then + def.after_place(pos,def,pr) + end + --ap(pos,def,pr,blockseed) + end,pr) + end + end + elseif def.after_place then ap = def.after_place + end + mcl_structures.place_schematic(pp, file, rot, nil, true, "place_center_x,place_center_z",function(p) + if not def.daughters then + if def.loot then generate_loot(pp,def,pr,blockseed) end + if def.construct_nodes then construct_nodes(pp,def,pr,blockseed) end + end return ap(pp,def,pr,blockseed) end,pr) if log_enabled then