local function growth_timer(pos) minetest.get_node_timer(pos):start(3) local meta = minetest.get_meta(pos) meta:set_int("ebiometrees:age", 0) meta:mark_as_private("ebiometrees:age") end local S = minetest.get_translator("ebiometrees") function ebiometrees.register_tree(modname, basename, data) -- register saplings local sapling_name = modname..":"..basename.."_sapling" local sprout_name = modname..":"..basename.."_sprout" local sapling_groups = table.copy(data.groups) local sprout_groups = table.copy(data.groups) sapling_groups.sapling = 1 sapling_groups.snappy = 2 sapling_groups.dig_immediate = 3 sprout_groups.sapling = 1 sprout_groups.snappy = 2 minetest.register_node(sapling_name, { description = S(data.description.." sapling"), drawtype = "plantlike", tiles = { modname.."_"..basename.."_sapling.png"}, paramtype = "light", on_timer = ebiometrees.grow_closure( modname..":"..basename.."_sprout" ), sunlight_propagates = true, walkable = false, groups = sapling_groups, on_construct = growth_timer }) minetest.register_node(sprout_name, { description = S(data.description.." sprout"), drawtype = "plantlike", visual_scale = 1.4, tiles = { modname.."_"..basename.."_sprout.png" }, paramtype = "light", sunlight_propagates = true, walkable = false, on_timer = ebiometrees.grow_closure( modname..":"..basename.."_trunk_growing_terminal" ), groups = sprout_groups, on_construct = growth_timer }) -- register tree leaves local leaves_groups = table.copy(data.groups) leaves_groups.leaves = 1 leaves_groups.leafdecay = 3 leaves_groups.snappy = 3 minetest.register_node(modname..":"..basename.."_leaves", { description = S(data.description.." leaves"), drawtype = "allfaces_optional", waving = 1, tiles = { modname.."_"..basename.."_leaves.png" }, special_tiles = { modname.."_"..basename.."_leaves_simple.png" }, paramtype = "light", is_ground_content = false, groups = leaves_groups }) -- registers corresponding trunk nodes local trunk_groups = table.copy(data.groups) trunk_groups.choppy = 2 -- TODO: customizations trunk_groups.treetrunk = 1 local trunk_types = {"growing", "normal"} local trunk_subtypes = {"terminal", "straight", "corner", "tjunction", "t2junction", "xjunction", "xtjunction", "x2junction"} for _, trunk_type in ipairs(trunk_types) do local texture_basename = modname.."_"..basename.."_trunk_"..trunk_type.."_" local subtype_tiles = { terminal = { texture_basename.."top.png", texture_basename.."slice.png", texture_basename.."terminal.png" }, straight = { texture_basename.."slice.png", texture_basename.."slice.png", texture_basename.."normal.png" }, corner = { texture_basename.."normal.png", texture_basename.."slice.png", texture_basename.."corner.png^[transformFX", texture_basename.."corner.png", texture_basename.."normal.png", texture_basename.."slice.png", }, tjunction = { texture_basename.."slice.png", texture_basename.."slice.png", texture_basename.."tjunction.png^[transformFX", texture_basename.."tjunction.png", texture_basename.."normal.png", texture_basename.."slice.png", }, t2junction = { texture_basename.."slice.png", texture_basename.."slice.png", texture_basename.."tjunction.png^[transformFX", texture_basename.."slice.png", texture_basename.."tjunction.png", texture_basename.."slice.png", }, xjunction = { texture_basename.."slice.png", texture_basename.."slice.png", texture_basename.."xjunction.png^[transformFX", texture_basename.."xjunction.png", texture_basename.."slice.png", texture_basename.."slice.png", }, xtjunction = { texture_basename.."slice.png", texture_basename.."slice.png", texture_basename.."xjunction.png", texture_basename.."slice.png", texture_basename.."slice.png", texture_basename.."slice.png", }, x2junction = { texture_basename.."slice.png" } } for _, trunk_subtype in ipairs(trunk_subtypes) do local nodespec = { description = S(data.description.." "..trunk_type.." "..trunk_subtype), groups = trunk_groups, tiles = subtype_tiles[trunk_subtype], paramtype2 = "facedir", is_ground_content = false, on_place = minetest.rotate_node, on_construct = growth_timer } if trunk_type == "growing" then nodespec.on_timer = ebiometrees.tree_grower( modname..":"..basename.."_leaves", { {ebiometrees.directions.up}, { ebiometrees.directions.north, ebiometrees.directions.east, ebiometrees.directions.south, ebiometrees.directions.west } }, modname..":"..basename.."_trunk_growing_terminal", modname..":"..basename.."_trunk_normal_"..trunk_subtype, 20 ) end minetest.register_node( modname..":"..basename.."_trunk_"..trunk_type.."_"..trunk_subtype, nodespec) end end end