From eaa06289a112a8eed3cd479f7a82429dde81d4fe Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 7 Jun 2022 04:22:50 +0200 Subject: [PATCH] use gennotify for lakegen --- mods/MAPGEN/mcl_biomes/init.lua | 20 ++++++++++++++++++-- mods/MAPGEN/mcl_lush_caves/init.lua | 17 +++-------------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 194ca8907a..48002b8343 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -2451,7 +2451,7 @@ local function register_dimension_ores() end - +local deco_id_makelake -- All mapgens except mgv6 -- Template to register a grass or fern decoration @@ -4389,13 +4389,14 @@ local function register_decorations() }) minetest.register_decoration({ + name = "mcl_biomes:lake_structblock", decoration = "mcl_lush_caves:lake_structblock", deco_type = "simple", place_on = {"group:material_stone","mcl_core:gravel","mcl_lush_caves:moss","mcl_core:clay"}, spawn_by = {"air"}, num_spawn_by = 4, sidelen = 16, - fill_ratio = 10, + fill_ratio = 4, flags = "place_center_x, place_center_z, force_placement, all_floors", biomes = lushcaves, }) @@ -4825,6 +4826,9 @@ local function register_dimension_decorations() deco_id_chorus_plant = minetest.get_decoration_id("mcl_biomes:chorus_plant") minetest.set_gen_notify({decoration=true}, { deco_id_chorus_plant }) + deco_id_makelake = minetest.get_decoration_id("mcl_biomes:lake_structblock") + minetest.set_gen_notify({decoration=true}, { deco_id_makelake }) + -- TODO: End cities end @@ -4895,4 +4899,16 @@ if mg_name ~= "singlenode" then end) end + mcl_mapgen_core.register_generator("mcl_lush_caves:lakegen", nil, function(minp, maxp, blockseed) + local gennotify = minetest.get_mapgen_object("gennotify") + local pr = PseudoRandom(blockseed + 15) + for _, pos in ipairs(gennotify["decoration#"..deco_id_makelake] or {}) do + local realpos = vector.offset(pos,0,1,0) + local node = minetest.get_node(realpos) + if node and node.name == "mcl_lush_caves:lake_structblock" then + minetest.remove_node(realpos) + mcl_lush_caves.makelake(realpos, pr) + end + end + end) end diff --git a/mods/MAPGEN/mcl_lush_caves/init.lua b/mods/MAPGEN/mcl_lush_caves/init.lua index 2732e4f702..bdc1a157a3 100644 --- a/mods/MAPGEN/mcl_lush_caves/init.lua +++ b/mods/MAPGEN/mcl_lush_caves/init.lua @@ -1,6 +1,5 @@ local S = minetest.get_translator(minetest.get_current_modname()) -local pr = PseudoRandom(minetest.get_mapgen_setting("seed")) local adjacents = { vector.new(1,0,0), vector.new(-1,0,0), @@ -14,8 +13,8 @@ local vector_distance_xz = function(a, b) { x=b.x, y=0, z=b.z } ) end - -local function makelake(pos) +mcl_lush_caves = {} +function mcl_lush_caves.makelake(pos,pr) local p1 = vector.offset(pos,-5,-2,-5) local p2 = vector.offset(pos,5,1,5) local nn = minetest.find_nodes_in_area_under_air(p1,p2,{"group:material_stone","mcl_core:clay"}) @@ -23,7 +22,7 @@ local function makelake(pos) return vector_distance_xz(pos, a) < vector_distance_xz(pos, b) end) if not nn[1] then return end - for i=1,math.random(#nn) do + for i=1,pr:next(1,#nn) do minetest.set_node(nn[i],{name="mcl_core:water_source"}) end local nnn = minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_core:water_source","group:water"}) @@ -348,13 +347,3 @@ minetest.register_abm({ end end }) - -minetest.register_lbm({ - name = "mcl_lush_caves:make_lakes", - run_at_every_load = true, - nodenames = {"mcl_lush_caves:lake_structblock"}, - action = function(pos, node) - minetest.set_node(pos,{name="air"}) - makelake(pos) - end -})