From 8a8712e4a3c32fdce0b43f874a8a5cdcee46d882 Mon Sep 17 00:00:00 2001
From: paramat <mat.gregory@virginmedia.com>
Date: Tue, 24 Mar 2015 20:48:59 +0000
Subject: [PATCH] flowers/mapgen.lua: Register flower decorations for mgv6

---
 mods/flowers/mapgen.lua | 95 +++++++++++++----------------------------
 1 file changed, 30 insertions(+), 65 deletions(-)

diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua
index 55e0edc..361fd08 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
+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
 
-				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
-
-			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
+