diff --git a/mods/hades_trees/api.lua b/mods/hades_trees/api.lua index 3186468..1474a6c 100644 --- a/mods/hades_trees/api.lua +++ b/mods/hades_trees/api.lua @@ -91,7 +91,7 @@ hades_trees.register_leaves = function(id, def) waving = 1, is_ground_content = false, place_param2 = 1, - groups = {snappy=3, leafdecay=3, flammable=2, leaves=1, ash_fertilizer=def.ash_fertilizer, porous=1}, + groups = {snappy=3, leafdecay=def.leafdecay or 3, flammable=2, leaves=1, ash_fertilizer=def.ash_fertilizer, porous=1}, drop = drop, sounds = def.sounds or hades_sounds.node_sound_leaves_defaults(), }) diff --git a/mods/hades_trees/apple.lua b/mods/hades_trees/apple.lua index 87491ce..c972ae8 100644 --- a/mods/hades_trees/apple.lua +++ b/mods/hades_trees/apple.lua @@ -26,7 +26,7 @@ minetest.register_abm({ interval = 20, chance = 50, action = function(pos, node) - hades_trees.generate_appletree(pos) + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/banana.lua b/mods/hades_trees/banana.lua index f63c61f..82071ca 100644 --- a/mods/hades_trees/banana.lua +++ b/mods/hades_trees/banana.lua @@ -26,6 +26,6 @@ minetest.register_abm({ interval = 60, chance = 10, action = function(pos, node) - hades_trees.generate_bananatree(pos) + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/birch.lua b/mods/hades_trees/birch.lua index 0b5c988..9c9280f 100644 --- a/mods/hades_trees/birch.lua +++ b/mods/hades_trees/birch.lua @@ -26,7 +26,7 @@ minetest.register_abm({ interval = 60, chance = 20, action = function(pos, node) - hades_trees.generate_birchtree(pos) + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/canvas.lua b/mods/hades_trees/canvas.lua index b2efe83..b340e17 100644 --- a/mods/hades_trees/canvas.lua +++ b/mods/hades_trees/canvas.lua @@ -28,7 +28,7 @@ minetest.register_abm({ interval = 15, chance = 40, action = function(pos, node) - hades_trees.generate_birchtree(pos, nil, "hades_trees:canvas_tree", "hades_trees:canvas_leaves") + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/charred.lua b/mods/hades_trees/charred.lua index 42c115a..6c4cf78 100644 --- a/mods/hades_trees/charred.lua +++ b/mods/hades_trees/charred.lua @@ -21,6 +21,7 @@ hades_trees.register_leaves("burned_branches", { description = S("Burned Branches"), image = "hades_trees_burned_branches.png", sounds = hades_sounds.node_sound_straw_defaults(), + leafdecay = 0, }) minetest.register_craft({ diff --git a/mods/hades_trees/cjtree.lua b/mods/hades_trees/cjtree.lua index da6edfb..8cc6f1d 100644 --- a/mods/hades_trees/cjtree.lua +++ b/mods/hades_trees/cjtree.lua @@ -18,7 +18,7 @@ minetest.register_abm({ interval = 60, chance = 20, action = function(pos, node) - hades_trees.generate_cjtree(pos) + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/cocoa.lua b/mods/hades_trees/cocoa.lua index 29f026e..340057a 100644 --- a/mods/hades_trees/cocoa.lua +++ b/mods/hades_trees/cocoa.lua @@ -33,6 +33,6 @@ minetest.register_abm({ interval = 60, chance = 20, action = function(pos, node) - hades_trees.generate_cocoatree(pos) + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/generator.lua b/mods/hades_trees/generator.lua index 489c2cb..8269d0e 100644 --- a/mods/hades_trees/generator.lua +++ b/mods/hades_trees/generator.lua @@ -10,28 +10,36 @@ local DEFAULT_MIN_LIGHT function hades_trees.grow_sapling(pos, check_light) local node = minetest.get_node(pos, check_light) + local trunk, leaves, replacement + -- Grow tree charred if sapling was close to lava + local lava = minetest.find_node_near(pos, 1, "group:lava") + if lava then + trunk = "hades_trees:charred_tree" + leaves = "hades_trees:burned_branches" + replacement = {} + end if node.name == "hades_trees:sapling" then - hades_trees.generate_appletree(pos, check_light) + hades_trees.generate_appletree(pos, check_light, trunk, leaves, nil, replacement) elseif node.name == "hades_trees:jungle_sapling" then - hades_trees.generate_jungletree(pos, check_light) + hades_trees.generate_jungletree(pos, check_light, trunk, leaves) elseif node.name == "hades_trees:cultivated_jungle_sapling" then - hades_trees.generate_cjtree(pos, check_light) + hades_trees.generate_cjtree(pos, check_light, trunk, leaves) elseif node.name == "hades_trees:olive_sapling" then - hades_trees.generate_olivetree(pos, check_light) + hades_trees.generate_olivetree(pos, check_light, trunk, leaves, nil, replacement) elseif node.name == "hades_trees:birch_sapling" then - hades_trees.generate_birchtree(pos, check_light) + hades_trees.generate_birchtree(pos, check_light, trunk, leaves) elseif node.name == "hades_trees:pale_sapling" then - hades_trees.generate_paletree(pos, check_light) + hades_trees.generate_paletree(pos, check_light, trunk, leaves, nil, replacement) elseif node.name == "hades_trees:banana_sapling" then - hades_trees.generate_bananatree(pos, check_light) + hades_trees.generate_bananatree(pos, check_light, trunk, leaves, nil, replacement) elseif node.name == "hades_trees:orange_sapling" then - hades_trees.generate_orangetree(pos, check_light) + hades_trees.generate_orangetree(pos, check_light, trunk, leaves, nil, replacement) elseif node.name == "hades_trees:cocoa_sapling" then - hades_trees.generate_cocoatree(pos, check_light) + hades_trees.generate_cocoatree(pos, check_light, trunk, leaves, nil, replacement) elseif node.name == "hades_trees:coconut_sapling" then - hades_trees.generate_coconutpalm(pos, check_light) + hades_trees.generate_coconutpalm(pos, check_light, trunk, leaves, nil, replacement) elseif node.name == "hades_trees:canvas_sapling" then - hades_trees.generate_canvastree(pos, check_light) + hades_trees.generate_canvastree(pos, check_light, trunk, leaves) end end @@ -314,7 +322,7 @@ function hades_trees.generate_cuboid_tree(pos, check_light, trunk, leaves, under local tnode = minetest.get_node(pos) if tnode.name == "air" and math.random(1, config.leaves_chance_denominator) <= config.leaves_chance_numerator then local replaced = false - if replacement then + if replacement and replacement.name then if math.random(1, replacement.chance) == 1 then table.insert(replacementnodes, table.copy(pos)) replaced = true @@ -343,10 +351,10 @@ function hades_trees.generate_cuboid_tree(pos, check_light, trunk, leaves, under end -function hades_trees.generate_paletree(pos, check_light) - local trunk = "hades_trees:pale_tree" - local leaves = "hades_trees:pale_leaves" - local underground = table.copy(DEFAULT_UNDERGROUND) +function hades_trees.generate_paletree(pos, check_light, trunk, leaves, underground) + trunk = trunk or "hades_trees:pale_tree" + leaves = leaves or "hades_trees:pale_leaves" + underground = underground or table.copy(DEFAULT_UNDERGROUND) table.insert(underground, "hades_core:ash") table.insert(underground, "hades_core:volcanic_sand") table.insert(underground, "hades_core:fertile_sand") @@ -361,10 +369,10 @@ function hades_trees.generate_paletree(pos, check_light) hades_trees.generate_cuboid_tree(pos, check_light, trunk, leaves, underground, nil, config) end -function hades_trees.generate_birchtree(pos, check_light) - local trunk = "hades_trees:birch_tree" - local leaves = "hades_trees:birch_leaves" - local underground = DEFAULT_UNDERGROUND +function hades_trees.generate_birchtree(pos, check_light, trunk, leaves, underground) + trunk = trunk or "hades_trees:birch_tree" + leaves = leaves or "hades_trees:birch_leaves" + underground = underground or DEFAULT_UNDERGROUND local config = { trunk_height = 7, leaves_start_height = 3, @@ -376,10 +384,10 @@ function hades_trees.generate_birchtree(pos, check_light) hades_trees.generate_cuboid_tree(pos, check_light, trunk, leaves, underground, nil, config) end -function hades_trees.generate_canvastree(pos, check_light) - local trunk = "hades_trees:canvas_tree" - local leaves = "hades_trees:canvas_leaves" - local underground = DEFAULT_UNDERGROUND +function hades_trees.generate_canvastree(pos, check_light, trunk, leaves, underground) + trunk = trunk or "hades_trees:canvas_tree" + leaves = leaves or "hades_trees:canvas_leaves" + underground = underground or DEFAULT_UNDERGROUND local config = { trunk_height = 7, leaves_start_height = 3, @@ -391,10 +399,10 @@ function hades_trees.generate_canvastree(pos, check_light) hades_trees.generate_cuboid_tree(pos, check_light, trunk, leaves, underground, nil, config) end -function hades_trees.generate_cjtree(pos, check_light) - local trunk = "hades_trees:jungle_tree" - local leaves = "hades_trees:cultivated_jungle_leaves" - local underground = DEFAULT_UNDERGROUND +function hades_trees.generate_cjtree(pos, check_light, trunk, leaves, underground) + trunk = trunk or "hades_trees:jungle_tree" + leaves = leaves or "hades_trees:cultivated_jungle_leaves" + underground = underground or DEFAULT_UNDERGROUND local config = { trunk_height = 13, leaves_start_height = 10, @@ -406,11 +414,11 @@ function hades_trees.generate_cjtree(pos, check_light) hades_trees.generate_cuboid_tree(pos, check_light, trunk, leaves, underground, nil, config) end -function hades_trees.generate_bananatree(pos, check_light) - local trunk = "hades_trees:tree" - local leaves = "hades_trees:banana_leaves" - local underground = DEFAULT_UNDERGROUND - local replacement = {name="hades_trees:banana", chance=9} +function hades_trees.generate_bananatree(pos, check_light, trunk, leaves, underground, replacement) + trunk = trunk or "hades_trees:tree" + leaves = leaves or "hades_trees:banana_leaves" + underground = underground or DEFAULT_UNDERGROUND + replacement = replacement or {name="hades_trees:banana", chance=9} local config = { trunk_height = 3, leaves_start_height = 1, @@ -427,15 +435,9 @@ end -------- local c_air = minetest.CONTENT_AIR local c_ignore = minetest.CONTENT_IGNORE -local c_jungletree = minetest.get_content_id("hades_trees:jungle_tree") -local c_jungleleaves = minetest.get_content_id("hades_trees:jungle_leaves") -local c_tree = minetest.get_content_id("hades_trees:tree") -local c_leaves = minetest.get_content_id("hades_trees:leaves") -local c_apple = minetest.get_content_id("hades_trees:apple") -function hades_trees.generate_jungletree(pos, check_light) +function hades_trees.generate_jungletree(pos, check_light, trunk, leaves) local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name - local ret = false for _,name in ipairs(DEFAULT_UNDERGROUND) do if nu == name then @@ -448,6 +450,11 @@ function hades_trees.generate_jungletree(pos, check_light) end minetest.log("action", "[action] A jungle sapling grows into a tree at "..minetest.pos_to_string(pos)) + trunk = trunk or "hades_trees:jungle_tree" + leaves = leaves or "hades_trees:jungle_leaves" + local c_jungletree = minetest.get_content_id(trunk) + local c_jungleleaves = minetest.get_content_id(leaves) + local vm = minetest.get_voxel_manip() local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y-1, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16}) local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp} @@ -522,7 +529,9 @@ function hades_trees.generate_jungletree(pos, check_light) vm:update_map() end -function hades_trees.generate_appletree(pos, check_light, is_apple_tree) +local c_apple = minetest.get_content_id("hades_trees:apple") + +function hades_trees.generate_appletree(pos, check_light, trunk, leaves, underground, replacement) local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name local ret = false @@ -542,13 +551,22 @@ function hades_trees.generate_appletree(pos, check_light, is_apple_tree) end minetest.log("action", "[hades_trees] A sapling grows into an apple tree at "..minetest.pos_to_string(pos)) + trunk = trunk or "hades_trees:tree" + leaves = leaves or "hades_trees:leaves" + underground = underground or DEFAULT_UNDERGROUND + replacement = replacement or {name="hades_trees:apple", chance=100} + local c_tree = minetest.get_content_id(trunk) + local c_leaves = minetest.get_content_id(leaves) + local c_replacement + if replacement.name then + minetest.get_content_id(replacement.name) + end + local vm = minetest.get_voxel_manip() local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16}) local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp} local data = vm:get_data() - if is_apple_tree == nil then - is_apple_tree = math.random(1, 4) == 1 - end + local is_apple_tree = math.random(1, 4) == 1 if not pr_a then local seed = math.random(1,100000) @@ -600,8 +618,8 @@ function hades_trees.generate_appletree(pos, check_light, is_apple_tree) local vi = a:index(x+xi, y+yi, z+zi) if data[vi] == c_air or data[vi] == c_ignore then if leaves_buffer[leaves_a:index(xi, yi, zi)] then - if pr_a:next(1, 100) <= 3 then -- is_apple_tree and(zwischen if und pr:next) - data[vi] = c_apple + if c_replacement and pr_a:next(1, replacement.chance) == 1 then + data[vi] = c_replacement else data[vi] = c_leaves end diff --git a/mods/hades_trees/jungle.lua b/mods/hades_trees/jungle.lua index 933cb0a..c6447cb 100644 --- a/mods/hades_trees/jungle.lua +++ b/mods/hades_trees/jungle.lua @@ -28,7 +28,7 @@ minetest.register_abm({ interval = 20, chance = 50, action = function(pos, node) - hades_trees.generate_jungletree(pos) + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/olive.lua b/mods/hades_trees/olive.lua index 46540a1..452f50e 100644 --- a/mods/hades_trees/olive.lua +++ b/mods/hades_trees/olive.lua @@ -25,6 +25,6 @@ minetest.register_abm({ interval = 60, chance = 20, action = function(pos, node) - hades_trees.generate_olivetree(pos) + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/orange.lua b/mods/hades_trees/orange.lua index f91965e..d6d3109 100644 --- a/mods/hades_trees/orange.lua +++ b/mods/hades_trees/orange.lua @@ -34,6 +34,6 @@ minetest.register_abm({ interval = 60, chance = 10, action = function(pos, node) - hades_trees.generate_orangetree(pos) + hades_trees.grow_sapling(pos) end }) diff --git a/mods/hades_trees/paletree.lua b/mods/hades_trees/paletree.lua index d995698..b05e5ac 100644 --- a/mods/hades_trees/paletree.lua +++ b/mods/hades_trees/paletree.lua @@ -26,7 +26,7 @@ minetest.register_abm({ interval = 60, chance = 20, action = function(pos, node) - hades_trees.generate_paletree(pos) + hades_trees.grow_sapling(pos) end })