-- Lichen biome -- glowing fungi minetest.register_node("caverealms:fungus", { description = "Glowing Fungus", tiles = {"caverealms_fungi.png"}, inventory_image = "caverealms_fungi.png", wield_image = "caverealms_fungi.png", is_ground_content = true, groups = {oddly_breakable_by_hand = 3, attached_node = 1}, light_source = 5, paramtype = "light", drawtype = "plantlike", walkable = false, buildable_to = true, visual_scale = 1.0, selection_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, }, }) -- mycena mushroom minetest.register_node("caverealms:mycena", { description = "Mycena Mushroom", tiles = {"caverealms_mycena.png"}, inventory_image = "caverealms_mycena.png", wield_image = "caverealms_mycena.png", is_ground_content = true, groups = {oddly_breakable_by_hand = 3, attached_node = 1}, light_source = 6, paramtype = "light", drawtype = "plantlike", walkable = false, buildable_to = true, visual_scale = 1.0, selection_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, }, }) -- giant mushroom if minetest.get_modpath("ethereal") then minetest.register_alias("caverealms:mushroom_cap", "ethereal:mushroom") minetest.register_alias("caverealms:mushroom_stem", "ethereal:mushroom_trunk") else -- stem minetest.register_node("caverealms:mushroom_stem", { description = "Giant Mushroom Stem", tiles = {"caverealms_mushroom_stem.png"}, is_ground_content = true, groups = {choppy=2, oddly_breakable_by_hand=1}, }) -- cap minetest.register_node("caverealms:mushroom_cap", { description = "Giant Mushroom Cap", tiles = {"caverealms_mushroom_cap.png"}, is_ground_content = true, groups = {choppy=2, oddly_breakable_by_hand=1,}, drop = { max_items = 1, items = { {items = {"caverealms:mushroom_sapling"}, rarity = 20}, {items = {"caverealms:mushroom_cap"}} } }, }) -- sapling minetest.register_node("caverealms:mushroom_sapling", { description = "Mushroom Tree Sapling", drawtype = "plantlike", tiles = {"caverealms_mushroom_sapling.png"}, paramtype = "light", sunlight_propagates = true, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} }, groups = {snappy = 2, dig_immediate = 3, flammable = 2}, sounds = default.node_sound_leaves_defaults(), }) end -- gills minetest.register_node("caverealms:mushroom_gills", { description = "Giant Mushroom Gills", tiles = {"caverealms_mushroom_gills.png"}, is_ground_content = true, light_source = 10, groups = {choppy=2, oddly_breakable_by_hand=1}, drawtype = "plantlike", paramtype = "light", }) -- Saplings -- grow trees local add_tree = function (pos, ofx, ofy, ofz, schem) if not schem then print ("Schematic not found") return end minetest.swap_node(pos, {name = "air"}) minetest.place_schematic( {x = pos.x - ofx, y = pos.y - ofy, z = pos.z - ofz}, schem, 0, nil, false) end local path = minetest.get_modpath("caverealms").."/schematics/" -- giant mushrooms function grow_caverealms_mushroom(pos) add_tree(pos, 5, 0, 5, path .. "shroom.mts") end -- height check local function enough_height(pos, height) local nod = minetest.line_of_sight( {x = pos.x, y = pos.y + 1, z = pos.z}, {x = pos.x, y = pos.y + height, z = pos.z}) if not nod then return false else return true end end minetest.register_abm({ label = "Caverealms grow sapling", nodenames = {"ethereal:mushroom_sapling", "caverealms:mushroom_sapling"}, interval = 10, chance = 50, catch_up = false, action = function(pos, node) local light_level = minetest.get_node_light(pos) -- check light level if not light_level or light_level > 10 then return end -- get node under sapling local under = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}).name -- check if registered if not minetest.registered_nodes[node.name] then return end -- ethereal sapling on lichen stone if node.name == "ethereal:mushroom_sapling" and under == "caverealms:stone_with_lichen" and enough_height(pos, 10) then grow_caverealms_mushroom(pos) -- caverealms sapling on lichen stone elseif node.name == "caverealms:mushroom_sapling" and under == "caverealms:stone_with_lichen" and enough_height(pos, 10) then grow_caverealms_mushroom(pos) end end, }) -- spread moss/lichen/algae to nearby cobblestone minetest.register_abm({ label = "Caverealms stone spread", nodenames = { "caverealms:stone_with_moss", "caverealms:stone_with_lichen", "caverealms:stone_with_algae", }, neighbors = {"air"}, interval = 16, chance = 50, catch_up = false, action = function(pos, node) local num = minetest.find_nodes_in_area_under_air( {x = pos.x - 1, y = pos.y - 2, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, "default:cobble") if #num > 0 then minetest.set_node(num[math.random(#num)], {name = node.name}) end end, })