decor.lua 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732
  1. if minetest.registered_nodes["farming:cotton_wild"] then
  2. minetest.register_decoration({
  3. name = "farming:cotton_wild",
  4. deco_type = "simple",
  5. place_on = {"default:dry_dirt_with_dry_grass"},
  6. sidelen = 16,
  7. noise_params = {
  8. offset = -0.1,
  9. scale = 0.1,
  10. spread = {x = 50, y = 50, z = 50},
  11. seed = 4242,
  12. octaves = 3,
  13. persist = 0.7
  14. },
  15. biomes = {"savanna"},
  16. y_max = 31000,
  17. y_min = 1,
  18. decoration = "farming:cotton_wild",
  19. })
  20. end
  21. -- water pools in swamp areas if 5.0 detected
  22. if minetest.registered_nodes["default:permafrost"] then
  23. minetest.register_decoration({
  24. deco_type = "simple",
  25. place_on = {"default:dirt_with_grass"},
  26. place_offset_y = -1,
  27. sidelen = 16,
  28. fill_ratio = 0.01,
  29. biomes = {"swamp"},
  30. y_max = 2,
  31. y_min = 1,
  32. flags = "force_placement",
  33. decoration = "default:water_source",
  34. spawn_by = "default:dirt_with_grass",
  35. num_spawn_by = 8,
  36. })
  37. minetest.register_decoration({
  38. deco_type = "simple",
  39. place_on = {"default:dirt_with_grass"},
  40. place_offset_y = -1,
  41. sidelen = 16,
  42. fill_ratio = 0.1,
  43. biomes = {"swamp"},
  44. y_max = 2,
  45. y_min = 1,
  46. flags = "force_placement",
  47. decoration = "default:water_source",
  48. spawn_by = {"default:dirt_with_grass", "default:water_source"},
  49. num_spawn_by = 8,
  50. })
  51. end
  52. if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then
  53. minetest.register_decoration({
  54. deco_type = "simple",
  55. place_on = {"default:dry_dirt_with_dry_grass"},
  56. sidelen = 4,
  57. noise_params = {
  58. offset = -1.5,
  59. scale = -1.5,
  60. spread = {x = 200, y = 200, z = 200},
  61. seed = 329,
  62. octaves = 4,
  63. persist = 1.0
  64. },
  65. biomes = {"savanna"},
  66. y_max = 31000,
  67. y_min = 1,
  68. decoration = "default:dry_dirt",
  69. place_offset_y = -1,
  70. flags = "force_placement",
  71. })
  72. end
  73. -- helper string
  74. local tmp
  75. -- helper function
  76. local add_node = function(a, b, c, d, e, f, g, h, i, j)
  77. if j ~= 1 then return end
  78. minetest.register_decoration({
  79. deco_type = "simple",
  80. place_on = a,
  81. sidelen = 80,
  82. fill_ratio = b,
  83. biomes = c,
  84. y_min = d,
  85. y_max = e,
  86. decoration = f,
  87. height_max = g,
  88. spawn_by = h,
  89. num_spawn_by = i,
  90. })
  91. end
  92. --firethorn shrub
  93. add_node({"default:snowblock"}, 0.001, {"glacier"}, 1, 30,
  94. {"ethereal:firethorn"}, nil, nil, nil, ethereal.glacier)
  95. -- scorched tree
  96. add_node({"ethereal:dry_dirt"}, 0.006, {"plains"}, 1, 100,
  97. {"ethereal:scorched_tree"}, 6, nil, nil, ethereal.plains)
  98. -- dry shrub
  99. add_node({"ethereal:dry_dirt"}, 0.015, {"plains"}, 1, 100,
  100. {"default:dry_shrub"}, nil, nil, nil, ethereal.plains)
  101. add_node({"default:sand"}, 0.015, {"grassy_ocean"}, 1, 100,
  102. {"default:dry_shrub"}, nil, nil, nil, ethereal.grassy)
  103. add_node({"default:desert_sand"}, 0.015, {"desert"}, 1, 100,
  104. {"default:dry_shrub"}, nil, nil, nil, ethereal.desert)
  105. add_node({"default:sandstone"}, 0.015, {"sandstone"}, 1, 100,
  106. {"default:dry_shrub"}, nil, nil, nil, ethereal.sandstone)
  107. add_node({"bakedclay:red", "bakedclay:orange"}, 0.015, {"mesa"}, 1, 100,
  108. {"default:dry_shrub"}, nil, nil, nil, ethereal.mesa)
  109. -- dry grass
  110. add_node({"default:dry_dirt_with_dry_grass",
  111. "default:dirt_with_dry_grass"}, 0.25, {"savanna"}, 1, 100,
  112. {"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
  113. "default:dry_grass_5"}, nil, nil, nil, ethereal.savanna)
  114. add_node({"default:dirt_with_dry_grass"}, 0.10, {"mesa"}, 1, 100,
  115. {"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
  116. "default:dry_grass_5"}, nil, nil, nil, ethereal.mesa)
  117. add_node({"default:desert_stone"}, 0.005, {"caves"}, 5, 40,
  118. {"default:dry_grass_2", "default:dry_grass_3", "default:dry_shrub"},
  119. nil, nil, nil, ethereal.caves)
  120. -- flowers & strawberry
  121. add_node({"default:dirt_with_grass"}, 0.025, {"grassy"}, 1, 100,
  122. {"flowers:dandelion_white", "flowers:dandelion_yellow",
  123. "flowers:geranium", "flowers:rose", "flowers:tulip",
  124. "flowers:viola", "ethereal:strawberry_7"}, nil, nil, nil,
  125. ethereal.grassy)
  126. add_node({"default:dirt_with_grass"}, 0.025, {"grassytwo"}, 1, 100,
  127. {"flowers:dandelion_white", "flowers:dandelion_yellow",
  128. "flowers:geranium", "flowers:rose", "flowers:tulip",
  129. "flowers:viola", "ethereal:strawberry_7"}, nil, nil, nil,
  130. ethereal.grassytwo)
  131. -- prairie flowers & strawberry
  132. add_node({"ethereal:prairie_dirt"}, 0.035, {"prairie"}, 1, 100,
  133. {"flowers:dandelion_white", "flowers:dandelion_yellow",
  134. "flowers:geranium", "flowers:rose", "flowers:tulip",
  135. "flowers:viola", "ethereal:strawberry_7",
  136. "flowers:chrysanthemum_green", "flowers:tulip_black"}, nil, nil, nil,
  137. ethereal.prairie)
  138. -- crystal spike & crystal grass
  139. add_node({"ethereal:crystal_dirt"}, 0.02, {"frost"}, 1, 100,
  140. {"ethereal:crystal_spike", "ethereal:crystalgrass"}, nil, nil, nil,
  141. ethereal.frost)
  142. -- red shrub
  143. add_node({"ethereal:fiery_dirt"}, 0.10, {"fiery"}, 1, 100,
  144. {"ethereal:dry_shrub"}, nil, nil, nil, ethereal.fiery)
  145. -- snowy grass
  146. add_node({"ethereal:gray_dirt"}, 0.05, {"grayness"}, 1, 100,
  147. {"ethereal:snowygrass"}, nil, nil, nil, ethereal.grayness)
  148. add_node({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"}, 0.05,
  149. {"snowy"}, 1, 100, {"ethereal:snowygrass"}, nil, nil, nil, ethereal.snowy)
  150. -- cactus
  151. add_node({"default:sandstone"}, 0.0025, {"sandstone"}, 1, 100,
  152. {"default:cactus"}, 3, nil, nil, ethereal.sandstone)
  153. add_node({"default:desert_sand"}, 0.005, {"desert"}, 1, 100,
  154. {"default:cactus"}, 4, nil, nil, ethereal.desert)
  155. -- wild red mushroom
  156. add_node({"ethereal:mushroom_dirt"}, 0.01, {"mushroom"}, 1, 100,
  157. {"flowers:mushroom_fertile_red"}, nil, nil, nil, ethereal.mushroom)
  158. local list = {
  159. {"junglee", {"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, ethereal.junglee},
  160. {"grassy", {"default:dirt_with_grass"}, ethereal.grassy},
  161. {"grassytwo", {"default:dirt_with_grass"}, ethereal.grassytwo},
  162. {"prairie", {"ethereal:prairie_dirt"}, ethereal.prairie},
  163. {"mushroom", {"ethereal:mushroom_dirt"}, ethereal.mushroom},
  164. {"swamp", {"default:dirt_with_grass"}, ethereal.swamp},
  165. }
  166. -- wild red and brown mushrooms
  167. for _, row in pairs(list) do
  168. if row[3] == 1 then
  169. minetest.register_decoration({
  170. deco_type = "simple",
  171. place_on = row[2],
  172. sidelen = 16,
  173. noise_params = {
  174. offset = 0,
  175. scale = 0.009,
  176. spread = {x = 200, y = 200, z = 200},
  177. seed = 2,
  178. octaves = 3,
  179. persist = 0.66
  180. },
  181. biomes = {row[1]},
  182. y_min = 1,
  183. y_max = 120,
  184. decoration = {"flowers:mushroom_brown", "flowers:mushroom_red"},
  185. })
  186. end
  187. end
  188. -- jungle grass
  189. add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
  190. 0.10, {"junglee"}, 1, 100, {"default:junglegrass"}, nil, nil, nil,
  191. ethereal.junglee)
  192. add_node({"default:dirt_with_grass"}, 0.15, {"jumble"}, 1, 100,
  193. {"default:junglegrass"}, nil, nil, nil, ethereal.jumble)
  194. add_node({"default:dirt_with_grass"}, 0.25, {"swamp"}, 1, 100,
  195. {"default:junglegrass"}, nil, nil, nil, ethereal.swamp)
  196. -- grass
  197. add_node({"default:dirt_with_grass"}, 0.35, {"grassy"}, 1, 100,
  198. {"default:grass_2", "default:grass_3", "default:grass_4",
  199. "default:grass_5"}, nil, nil, nil, ethereal.grassy)
  200. add_node({"default:dirt_with_grass"}, 0.35, {"grassytwo"}, 1, 100,
  201. {"default:grass_2", "default:grass_3", "default:grass_4",
  202. "default:grass_5"}, nil, nil, nil, ethereal.grassytwo)
  203. add_node({"default:dirt_with_grass"}, 0.35, {"jumble"}, 1, 100,
  204. {"default:grass_2", "default:grass_3", "default:grass_4",
  205. "default:grass_5"}, nil, nil, nil, ethereal.jumble)
  206. add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
  207. 0.35, {"junglee"}, 1, 100, {"default:grass_2", "default:grass_3",
  208. "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.junglee)
  209. add_node({"ethereal:prairie_dirt"}, 0.35, {"prairie"}, 1, 100,
  210. {"default:grass_2", "default:grass_3", "default:grass_4",
  211. "default:grass_5"}, nil, nil, nil, ethereal.prairie)
  212. add_node({"ethereal:grove_dirt"}, 0.35, {"grove"}, 1, 100,
  213. {"default:grass_2", "default:grass_3", "default:grass_4",
  214. "default:grass_5"}, nil, nil, nil, ethereal.grove)
  215. add_node({"ethereal:bamboo_dirt"}, 0.35, {"bamboo"}, 1, 100,
  216. {"default:grass_2", "default:grass_3", "default:grass_4",
  217. "default:grass_5"}, nil, nil, nil, ethereal.bamboo)
  218. add_node({"default:dirt_with_grass"}, 0.35, {"clearing", "swamp"},
  219. 1, 100, {"default:grass_3", "default:grass_4"}, nil, nil, nil, 1)
  220. add_node({"ethereal:bamboo_dirt"}, 0.35, {"sakura"}, 1, 100,
  221. {"default:grass_2", "default:grass_3", "default:grass_4",
  222. "default:grass_5"}, nil, nil, nil, ethereal.sakura)
  223. -- grass on sand
  224. if minetest.registered_nodes["default:marram_grass_1"] then
  225. add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:marram_grass_1",
  226. "default:marram_grass_2", "default:marram_grass_3"}, nil, nil, nil,
  227. ethereal.sandclay)
  228. else
  229. add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:grass_2",
  230. "default:grass_3"}, nil, nil, nil, ethereal.sandclay)
  231. end
  232. -- ferns
  233. add_node({"ethereal:grove_dirt"}, 0.2, {"grove"}, 1, 100, {"ethereal:fern"},
  234. nil, nil, nil, ethereal.grove)
  235. add_node({"default:dirt_with_grass"}, 0.1, {"swamp"}, 1, 100,
  236. {"ethereal:fern"}, nil, nil, nil, ethereal.swamp)
  237. -- snow
  238. add_node({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"},
  239. 0.8, {"snowy"}, 4, 40, {"default:snow"}, nil, nil, nil, ethereal.snowy)
  240. add_node({"default:dirt_with_snow"}, 0.8, {"alpine"}, 40, 140,
  241. {"default:snow"}, nil, nil, nil, ethereal.alpine)
  242. -- wild onion
  243. add_node({"default:dirt_with_grass", "ethereal:prairie_dirt"}, 0.25,
  244. {"grassy", "grassytwo", "jumble", "prairie"}, 1, 100,
  245. {"ethereal:onion_4"}, nil, nil, nil, 1)
  246. -- papyrus
  247. add_node({"default:dirt_with_grass"}, 0.1, {"grassy"}, 1, 1,
  248. {"default:papyrus"}, 4, "default:water_source", 1, ethereal.grassy)
  249. add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
  250. 0.1, {"junglee"}, 1, 1, {"default:papyrus"}, 4, "default:water_source",
  251. 1, ethereal.junglee)
  252. add_node({"default:dirt_with_grass"}, 0.1, {"swamp"}, 1, 1,
  253. {"default:papyrus"}, 4, "default:water_source", 1, ethereal.swamp)
  254. --= Farming Redo plants
  255. if farming and farming.mod and farming.mod == "redo" then
  256. print ("[MOD] Ethereal - Farming Redo detected and in use")
  257. -- potato
  258. add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
  259. 0.035, {"junglee"}, 1, 100, {"farming:potato_3"}, nil, nil, nil,
  260. ethereal.junglee)
  261. -- carrot, cucumber, potato, tomato, corn, coffee, raspberry, rhubarb
  262. add_node({"default:dirt_with_grass"}, 0.05, {"grassytwo"}, 1, 100,
  263. {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3",
  264. "farming:tomato_7", "farming:corn_8", "farming:coffee_5",
  265. "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
  266. "farming:cabbage_6"}, nil, nil, nil, ethereal.grassytwo)
  267. add_node({"default:dirt_with_grass"}, 0.05, {"grassy"}, 1, 100,
  268. {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3",
  269. "farming:tomato_7", "farming:corn_8", "farming:coffee_5",
  270. "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
  271. "farming:beetroot_5"}, nil, nil, nil, ethereal.grassy)
  272. add_node({"default:dirt_with_grass"}, 0.05, {"jumble"}, 1, 100,
  273. {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3",
  274. "farming:tomato_7", "farming:corn_8", "farming:coffee_5",
  275. "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
  276. "farming:cabbage_6"}, nil, nil, nil, ethereal.jumble)
  277. add_node({"ethereal:prairie_dirt"}, 0.05, {"prairie"}, 1, 100,
  278. {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3",
  279. "farming:tomato_7", "farming:corn_8", "farming:coffee_5",
  280. "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4",
  281. "farming:pea_5", "farming:beetroot_5"}, nil, nil, nil, ethereal.prairie)
  282. -- melon and pumpkin
  283. add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
  284. 0.015, {"junglee"}, 1, 1, {"farming:melon_8", "farming:pumpkin_8"},
  285. nil, "default:water_source", 1, ethereal.junglee)
  286. add_node({"default:dirt_with_grass"}, 0.015, {"grassy"}, 1, 1,
  287. {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source",
  288. 1, ethereal.grassy)
  289. add_node({"default:dirt_with_grass"}, 0.015, {"grassytwo"}, 1, 1,
  290. {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source",
  291. 1, ethereal.grassytwo)
  292. add_node({"default:dirt_with_grass"}, 0.015, {"jumble"}, 1, 1,
  293. {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source",
  294. 1, ethereal.jumble)
  295. -- mint
  296. add_node({"default:dirt_with_grass", "default:dirt_with_coniferous_grass",
  297. "ethereal:bamboo_dirt"}, 0.003, nil, 1, 75, "farming:mint_4", nil,
  298. "group:water", 1, 1)
  299. -- green beans
  300. add_node({"default:dirt_with_grass"}, 0.035, {"grassytwo"}, 1, 100,
  301. {"farming:beanbush"}, nil, nil, nil, ethereal.grassytwo)
  302. -- grape bushel
  303. add_node({"default:dirt_with_grass"}, 0.025, {"grassytwo"}, 1, 100,
  304. {"farming:grapebush"}, nil, nil, nil, ethereal.grassytwo)
  305. add_node({"default:dirt_with_grass"}, 0.025, {"grassy"}, 1, 100,
  306. {"farming:grapebush"}, nil, nil, nil, ethereal.grassy)
  307. add_node({"ethereal:prairie_dirt"}, 0.025, {"prairie"}, 1, 100,
  308. {"farming:grapebush"}, nil, nil, nil, ethereal.prairie)
  309. minetest.register_decoration({
  310. deco_type = "simple",
  311. place_on = {"default:dirt_with_grass", "ethereal:prairie_dirt",
  312. "default:dirt_with_rainforest_litter"},
  313. sidelen = 16,
  314. noise_params = {
  315. offset = 0,
  316. scale = 0.09,
  317. spread = {x = 100, y = 100, z = 100},
  318. seed = 760,
  319. octaves = 3,
  320. persist = 0.6
  321. },
  322. y_min = 5,
  323. y_max = 35,
  324. decoration = {"farming:chili_8", "farming:garlic_5", "farming:pepper_5",
  325. "farming:onion_5", "farming:hemp_7"},
  326. spawn_by = "group:tree",
  327. num_spawn_by = 1,
  328. })
  329. minetest.register_decoration({
  330. deco_type = "simple",
  331. place_on = {"default:dirt_with_dry_grass"},
  332. sidelen = 16,
  333. noise_params = {
  334. offset = 0,
  335. scale = 0.06,
  336. spread = {x = 100, y = 100, z = 100},
  337. seed = 917,
  338. octaves = 3,
  339. persist = 0.6
  340. },
  341. y_min = 18,
  342. y_max = 30,
  343. decoration = {"farming:pineapple_8"},
  344. })
  345. end
  346. -- is baked clay mod active? add new flowers if so
  347. if minetest.get_modpath("bakedclay") then
  348. minetest.register_decoration({
  349. deco_type = "simple",
  350. place_on = {
  351. "ethereal:prairie_grass", "default:dirt_with_grass",
  352. "ethereal:grove_dirt"
  353. },
  354. sidelen = 16,
  355. noise_params = {
  356. offset = 0,
  357. scale = 0.004,
  358. spread = {x = 100, y = 100, z = 100},
  359. seed = 7133,
  360. octaves = 3,
  361. persist = 0.6
  362. },
  363. y_min = 10,
  364. y_max = 90,
  365. decoration = "bakedclay:delphinium",
  366. })
  367. minetest.register_decoration({
  368. deco_type = "simple",
  369. place_on = {
  370. "ethereal:prairie_grass", "default:dirt_with_grass",
  371. "ethereal:grove_dirt", "ethereal:bamboo_dirt"
  372. },
  373. sidelen = 16,
  374. noise_params = {
  375. offset = 0,
  376. scale = 0.004,
  377. spread = {x = 100, y = 100, z = 100},
  378. seed = 7134,
  379. octaves = 3,
  380. persist = 0.6
  381. },
  382. y_min = 15,
  383. y_max = 90,
  384. decoration = "bakedclay:thistle",
  385. })
  386. minetest.register_decoration({
  387. deco_type = "simple",
  388. place_on = {"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"},
  389. sidelen = 16,
  390. noise_params = {
  391. offset = 0,
  392. scale = 0.01,
  393. spread = {x = 100, y = 100, z = 100},
  394. seed = 7135,
  395. octaves = 3,
  396. persist = 0.6
  397. },
  398. y_min = 1,
  399. y_max = 90,
  400. decoration = "bakedclay:lazarus",
  401. spawn_by = "default:jungletree",
  402. num_spawn_by = 1,
  403. })
  404. minetest.register_decoration({
  405. deco_type = "simple",
  406. place_on = {"default:dirt_with_grass", "default:sand"},
  407. sidelen = 16,
  408. noise_params = {
  409. offset = 0,
  410. scale = 0.009,
  411. spread = {x = 100, y = 100, z = 100},
  412. seed = 7136,
  413. octaves = 3,
  414. persist = 0.6
  415. },
  416. y_min = 1,
  417. y_max = 15,
  418. decoration = "bakedclay:mannagrass",
  419. spawn_by = "group:water",
  420. num_spawn_by = 1,
  421. })
  422. end
  423. if ethereal.desert and minetest.get_modpath("wine") then
  424. minetest.register_decoration({
  425. deco_type = "simple",
  426. place_on = {"default:desert_sand"},
  427. sidelen = 16,
  428. fill_ratio = 0.001,
  429. biomes = {"desert"},
  430. decoration = {"wine:blue_agave"},
  431. })
  432. end
  433. if ethereal.snowy and minetest.registered_nodes["default:fern_1"] then
  434. local function register_fern_decoration(seed, length)
  435. minetest.register_decoration({
  436. name = "default:fern_" .. length,
  437. deco_type = "simple",
  438. place_on = {
  439. "ethereal:cold_dirt", "default:dirt_with_coniferous_litter"},
  440. sidelen = 16,
  441. noise_params = {
  442. offset = 0,
  443. scale = 0.2,
  444. spread = {x = 100, y = 100, z = 100},
  445. seed = seed,
  446. octaves = 3,
  447. persist = 0.7
  448. },
  449. y_max = 31000,
  450. y_min = 6,
  451. decoration = "default:fern_" .. length,
  452. })
  453. end
  454. register_fern_decoration(14936, 3)
  455. register_fern_decoration(801, 2)
  456. register_fern_decoration(5, 1)
  457. end
  458. if ethereal.tundra and minetest.registered_nodes["default:permafrost"] then
  459. -- Tundra moss
  460. minetest.register_decoration({
  461. deco_type = "simple",
  462. place_on = {"default:permafrost_with_stones"},
  463. sidelen = 4,
  464. noise_params = {
  465. offset = -0.8,
  466. scale = 2.0,
  467. spread = {x = 100, y = 100, z = 100},
  468. seed = 53995,
  469. octaves = 3,
  470. persist = 1.0
  471. },
  472. biomes = {"tundra"},
  473. y_max = 50,
  474. y_min = 2,
  475. decoration = "default:permafrost_with_moss",
  476. place_offset_y = -1,
  477. flags = "force_placement",
  478. })
  479. -- Tundra patchy snow
  480. minetest.register_decoration({
  481. deco_type = "simple",
  482. place_on = {
  483. "default:permafrost_with_moss",
  484. "default:permafrost_with_stones",
  485. "default:stone",
  486. "default:gravel"
  487. },
  488. sidelen = 4,
  489. noise_params = {
  490. offset = 0,
  491. scale = 1.0,
  492. spread = {x = 100, y = 100, z = 100},
  493. seed = 172555,
  494. octaves = 3,
  495. persist = 1.0
  496. },
  497. biomes = {"tundra", "tundra_beach"},
  498. y_max = 50,
  499. y_min = 1,
  500. decoration = "default:snow",
  501. })
  502. end
  503. if minetest.get_modpath("butterflies") then
  504. minetest.register_decoration({
  505. name = "butterflies:butterfly",
  506. deco_type = "simple",
  507. place_on = {"default:dirt_with_grass", "ethereal:prairie_dirt"},
  508. place_offset_y = 2,
  509. sidelen = 80,
  510. fill_ratio = 0.005,
  511. biomes = {"grassy", "grassytwo", "prairie", "jumble"},
  512. y_max = 31000,
  513. y_min = 1,
  514. decoration = {
  515. "butterflies:butterfly_white",
  516. "butterflies:butterfly_red",
  517. "butterflies:butterfly_violet"
  518. },
  519. spawn_by = "group:flower",
  520. num_spawn_by = 1
  521. })
  522. end
  523. if minetest.get_modpath("fireflies") then
  524. minetest.register_decoration({
  525. name = "fireflies:firefly_low",
  526. deco_type = "simple",
  527. place_on = {
  528. "default:dirt_with_grass",
  529. "default:dirt_with_coniferous_litter",
  530. "default:dirt_with_rainforest_litter",
  531. "default:dirt",
  532. "ethereal:cold_dirt",
  533. },
  534. place_offset_y = 2,
  535. sidelen = 80,
  536. fill_ratio = 0.0005,
  537. biomes = {"grassy", "grassytwo", "snowy", "junglee", "swamp"},
  538. y_max = 31000,
  539. y_min = -1,
  540. decoration = "fireflies:hidden_firefly",
  541. })
  542. end
  543. -- Coral Reef (Minetest 5.0)
  544. if minetest.registered_nodes["default:coral_green"] then
  545. minetest.register_decoration({
  546. name = "default:corals",
  547. deco_type = "simple",
  548. place_on = {"default:sand"},
  549. place_offset_y = -1,
  550. sidelen = 4,
  551. noise_params = {
  552. offset = -4,
  553. scale = 4,
  554. spread = {x = 50, y = 50, z = 50},
  555. seed = 7013,
  556. octaves = 3,
  557. persist = 0.7,
  558. },
  559. biomes = {
  560. "desert_ocean",
  561. "savanna_ocean",
  562. "junglee_ocean",
  563. },
  564. y_max = -2,
  565. y_min = -8,
  566. flags = "force_placement",
  567. decoration = {
  568. "default:coral_green", "default:coral_pink",
  569. "default:coral_cyan", "default:coral_brown",
  570. "default:coral_orange", "default:coral_skeleton",
  571. },
  572. })
  573. -- Kelp
  574. minetest.register_decoration({
  575. name = "default:kelp",
  576. deco_type = "simple",
  577. place_on = {"default:sand"},
  578. place_offset_y = -1,
  579. sidelen = 16,
  580. noise_params = {
  581. offset = -0.04,
  582. scale = 0.1,
  583. spread = {x = 200, y = 200, z = 200},
  584. seed = 87112,
  585. octaves = 3,
  586. persist = 0.7
  587. },
  588. biomes = {
  589. "frost_ocean", "grassy_ocean", "sandstone_ocean", "swamp_ocean"},
  590. y_max = -5,
  591. y_min = -10,
  592. flags = "force_placement",
  593. decoration = "default:sand_with_kelp",
  594. param2 = 48,
  595. param2_max = 96,
  596. })
  597. end
  598. local random = math.random
  599. -- Generate Illumishroom in caves on top of coal
  600. minetest.register_on_generated(function(minp, maxp)
  601. if minp.y > -30 or maxp.y < -3000 then
  602. return
  603. end
  604. local bpos
  605. local coal = minetest.find_nodes_in_area_under_air(
  606. minp, maxp, "default:stone_with_coal")
  607. for n = 1, #coal do
  608. if random(2) == 1 then
  609. bpos = {x = coal[n].x, y = coal[n].y + 1, z = coal[n].z}
  610. if bpos.y > -3000 and bpos.y < -2000 then
  611. minetest.swap_node(bpos, {name = "ethereal:illumishroom3"})
  612. elseif bpos.y > -2000 and bpos.y < -1000 then
  613. minetest.swap_node(bpos, {name = "ethereal:illumishroom2"})
  614. elseif bpos.y > -1000 and bpos.y < -30 then
  615. minetest.swap_node(bpos, {name = "ethereal:illumishroom"})
  616. end
  617. end
  618. end
  619. end)