--add in tree_remove function --ore_chance needs to be 0-1 function new_biome(required_noise,first_layer_depth,first_layer,second_layer_depth,second_layer,third_layer_depth,third_layer,ore,ore_chance,tree,tree_height,tree_chance,stump,leaves,remove_tree) minetest.register_on_generated(function(minp, maxp, seed) local env = minetest.env local perlin1 = env:get_perlin(112,3, 0.5, 150) local divlen = 16 local divs = (maxp.x-minp.x); local x0 = minp.x local z0 = minp.z local x1 = maxp.x local z1 = maxp.z local ground_y = nil if not (perlin1:get2d({x=x0, y=z0}) > required_noise) and not (perlin1:get2d({x=x1, y=z1}) > required_noise) and not (perlin1:get2d({x=x0, y=z1}) > required_noise) and not (perlin1:get2d({x=x1, y=z0}) > required_noise) and not (perlin1:get2d({x=(x1-x0)/2, y=(z1-z0)/2}) > required_noise) then return end --THIS ALSO NEEDS TO BE FIXED TO STOP IT FROM HAVING TREES CREATE SPOTS OF NON BIOME for y=maxp.y,minp.y+1,-1 do --print(dump(env:get_node({x=x,y=y,z=z}).name)) if env:get_node({x=x,y=y,z=z}).name == first_layer then ground_y = y break end end local pr = PseudoRandom(seed+57) local biome = pr:next(1, 12) --Reseed random. pr = PseudoRandom(seed+68) --Loop through chunk. for j=0,divs do for i=0,divs do local x = x0+i local z = z0+j --Check if we are in the biome local in_biome = false local test = perlin1:get2d({x=x, y=z}) if (test > 0.73 or (test > 0.43 and pr:next(0,29) > (0.73 - test) * 100 )) then in_biome = true elseif test < required_noise then in_biome = true end if in_biome then -- Find ground level (Needs to be fixed for trees) local ground_y = nil for y=maxp.y,minp.y+1,-1 do --print(dump(env:get_node({x=x,y=y,z=z}).name)) if remove_tree == true then if env:get_node({x=x,y=y,z=z}).name == "default:tree" or env:get_node({x=x,y=y,z=z}).name == "default:leaves" then minetest.env:remove_node({x=x,y=y,z=z}) end end if env:get_node({x=x,y=y,z=z}).name ~= "air" then ground_y = y break end end --Created Biome if ground_y ~= nil then if minetest.env:get_node({x=x,y=ground_y,z=z}).name == "default:dirt_with_grass" or minetest.env:get_node({x=x,y=ground_y,z=z}).name == "default:dirt" then if tree == true then local chancer = math.random() if chancer <= tree_chance then for i = 1,tree_height do minetest.env:add_node({x=x,y=ground_y + i,z=z}, {name=stump}) if i == tree_height then --print( for dx=-2,2 do for dz=-2,2 do for dy=2,-2,-1 do local pos = {} pos.x = x+dx pos.y = ground_y+tree_height+dy pos.z = z+dz local node = minetest.env:get_node(pos) if node.name == "air" then minetest.env:add_node(pos, {name=leaves}) end pos.x = pos.x-dx pos.y = pos.y-dy pos.z = pos.z-dz end end end end end end end for i = 0,first_layer_depth-1 do if minetest.env:get_node({x=x,y=ground_y - i,z=z}).name ~= "air" then minetest.env:add_node({x=x,y=ground_y - i,z=z}, {name=first_layer}) end end for i = first_layer_depth,second_layer_depth do if minetest.env:get_node({x=x,y=ground_y - i,z=z}).name ~= "air" then minetest.env:add_node({x=x,y=ground_y - i,z=z}, {name=second_layer}) end end for i = first_layer_depth+second_layer_depth,third_layer_depth do if minetest.env:get_node({x=x,y=ground_y - i,z=z}).name ~= "air" then if ore ~= nil then local ore_generate = math.random() if ore_generate <= ore_chance then minetest.env:add_node({x=x,y=ground_y - i,z=z}, {name=ore}) end if ore_generate > ore_chance then minetest.env:add_node({x=x,y=ground_y - i,z=z}, {name=third_layer}) end end end end end end end end end end) end --[[ new_biome(0.5,1,"default:stone",5,"default:glass",20,"default:mese","default:lava_source",0.05) THIS WAS A TEST OF A GLASSIFIED BIOME ]]-- new_biome(0.8,1,"default:dirt_with_grass",5,"default:dirt",30,"default:stone","default:stone_with_iron",0.08,true,8,0.05,"default:tree","default:leaves",false) print("LOADED BIOME API")