Epic/mods/caverealms_lite/plants.lua

189 lines
4.9 KiB
Lua

-- 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,
})