diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua index 55e0edccb3..361fd08ae2 100644 --- a/mods/flowers/mapgen.lua +++ b/mods/flowers/mapgen.lua @@ -1,70 +1,35 @@ -function flowers.mgv6ongen(minp, maxp, seed) - if maxp.y >= 2 and minp.y <= 0 then - -- Generate flowers - local perlin1 = minetest.get_perlin(436, 3, 0.6, 100) - -- Assume X and Z lengths are equal - local divlen = 16 - local divs = (maxp.x-minp.x)/divlen+1; - for divx=0,divs-1 do - for divz=0,divs-1 do - local x0 = minp.x + math.floor((divx+0)*divlen) - local z0 = minp.z + math.floor((divz+0)*divlen) - local x1 = minp.x + math.floor((divx+1)*divlen) - local z1 = minp.z + math.floor((divz+1)*divlen) - -- Determine flowers amount from perlin noise - local grass_amount = math.floor(perlin1:get2d({x=x0, y=z0}) ^ 3 * 9) - -- Find random positions for flowers based on this random - local pr = PseudoRandom(seed+456) - for i=0,grass_amount do - local x = pr:next(x0, x1) - local z = pr:next(z0, z1) - -- Find ground level (0...15) - local ground_y = nil - for y=30,0,-1 do - if minetest.get_node({x=x,y=y,z=z}).name ~= "air" then - ground_y = y - break - end - end - - if ground_y then - local p = {x=x,y=ground_y+1,z=z} - local nn = minetest.get_node(p).name - -- Check if the node can be replaced - if minetest.registered_nodes[nn] and - minetest.registered_nodes[nn].buildable_to then - nn = minetest.get_node({x=x,y=ground_y,z=z}).name - if nn == "default:dirt_with_grass" then - local flower_choice = pr:next(1, 6) - local flower - if flower_choice == 1 then - flower = "flowers:tulip" - elseif flower_choice == 2 then - flower = "flowers:rose" - elseif flower_choice == 3 then - flower = "flowers:dandelion_yellow" - elseif flower_choice == 4 then - flower = "flowers:dandelion_white" - elseif flower_choice == 5 then - flower = "flowers:geranium" - elseif flower_choice == 6 then - flower = "flowers:viola" - end - minetest.set_node(p, {name=flower}) - end - end - end +local function register_flower(name) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.006, + spread = {x=100, y=100, z=100}, + seed = 436, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "flowers:"..name.."", + }) +end - end - end - end - end +function flowers.register_mgv6_decorations() + register_flower("rose") + register_flower("tulip") + register_flower("dandelion_yellow") + register_flower("geranium") + register_flower("viola") + register_flower("dandelion_white") end -- Enable in mapgen v6 only -minetest.register_on_mapgen_init(function(mg_params) - if mg_params.mgname == "v6" then - minetest.register_on_generated(flowers.mgv6ongen) - end -end) +local mg_params = minetest.get_mapgen_params() +if mg_params.mgname == "v6" then + flowers.register_mgv6_decorations() +end +