+++ /dev/null
--- More trees!
---
--- This mod adds more types of trees to the game
--- at present, they consist of jungle trees and conifers
---
--- Much of the code here came from cisoun's conifers mod and bas080's
--- jungle trees mod.
---
--- Brought together into one mod and made L-systems compatible by Vanessa
--- Ezekowitz.
---
--- Jungle tree axioms/rules tweaked by RealBadAngel
---
-
-local DEBUG = false
-
--- Jungletree init stuff:
-
-local JT_SPAWN_INTERVAL = 100
-local JT_SPAWN_CHANCE = 10
-
-local JT_GROW_INTERVAL = 1000
-local JT_GROW_CHANCE = 100
-
-local JT_RADIUS = 8
-local JT_WATER_RADIUS = 25
-local JT_WATER_COUNT = 10
-
-local jungletree_seed_diff = plantlife_seed_diff
-
--- Conifers init stuff:
-
-local CONIFERS_SPAWN_SAPLING_CHANCE = 500
-local CONIFERS_SPAWN_SAPLING_INTERVAL = 3600
-
-local CONIFERS_GROW_SAPLING_CHANCE = 100
-local CONIFERS_GROW_SAPLING_INTERVAL = 3600
-
---local CONIFERS_TRUNK_MINHEIGHT = 7
---local CONIFERS_TRUNK_MAXHEIGHT = 25
-
---local CONIFERS_LEAVES_MINHEIGHT = 2
---local CONIFERS_LEAVES_MAXHEIGHT = 6
---local CONIFERS_LEAVES_MAXRADIUS = 5
---local CONIFERS_LEAVES_NARROWRADIUS = 3 -- For narrow typed conifers.
-
-local CONIFERS_DISTANCE = 9 -- how far apart should conifer saplings spawn?
-local CONIFERS_ALTITUDE = 25
-
-local CONIFERS_REMOVE_TREES = false -- Remove trees above CONIFERS_ALTITUDE?
-local CONIFERS_RTREES_INTERVAL = 360
-local CONIFERS_RTREES_CHANCE = 10
-
-local conifers_seed_diff = plantlife_seed_diff+30
-
--- Spawning functions
-
-spawn_on_surfaces(
- JT_SPAWN_INTERVAL, -- ABM interval parameter
- "jungletree:sapling", -- We want to spawn a sapling
- JT_RADIUS, -- Keep this much room around saplings
- JT_SPAWN_CHANCE, -- ABM chance parameter
- "default:dirt_with_grass", -- must grow on grass only
- {"jungletree:sapling","default:jungletree"}, -- avoid spawning near these
- jungletree_seed_diff, -- duh? :-)
- 5, -- minimum light needed
- nil, -- maximim (default, 14)
- nil, -- ABM neighbors parameter...
- nil, -- don't care what else is around
- nil, -- we don't care about facedir
- nil, -- or water depth
- -5, -- must be 5m below sea level or higher
- 15, -- but no higher than 15m
- {"default:water_source"}, -- Jungle trees must be near water
- JT_WATER_RADIUS, -- within this radius of it (default 25)
- JT_WATER_COUNT -- with this many water nodes in the area
-)
-
-spawn_on_surfaces(
- CONIFERS_SPAWN_SAPLING_INTERVAL,
- "conifers:sapling",
- CONIFERS_DISTANCE,
- CONIFERS_SPAWN_SAPLING_CHANCE,
- "default:dirt_with_grass",
- {"conifers:sapling", "conifers:trunk"},
- conifers_seed_diff,
- nil,
- nil,
- {"default:dirt_with_grass"},
- 3,
- nil,
- nil,
- CONIFERS_ALTITUDE,
- nil
-)
-
--- growing functions
-
-grow_plants(
- JT_GROW_INTERVAL,
- JT_GROW_CHANCE,
- "jungletree:sapling",
- nil,
- nil,
- nil,
- nil,
- nil,
- nil,
- nil,
- nil,
- "grow_jungletree",
- jungletree_seed_diff
-)
-
-grow_plants(
- CONIFERS_GROW_SAPLING_INTERVAL,
- CONIFERS_GROW_SAPLING_CHANCE,
- "conifers:sapling",
- nil,
- nil,
- nil,
- nil,
- nil,
- nil,
- nil,
- nil,
- "grow_conifer",
- conifers_seed_diff
-)
-
--- Code that actually spawns the trees!
-
-function grow_jungletree(pos, noise)
- minetest.env:remove_node(pos)
- if math.random(1, 2) > 1.5 then
- minetest.env:spawn_tree(pos,jungle_tree1)
- else
- minetest.env:spawn_tree(pos,jungle_tree2)
- end
-end
-
-function grow_conifer(pos, noise)
- minetest.env:remove_node(pos)
- if math.random(1, 2) > 1.5 then
- minetest.env:spawn_tree(pos,conifer_tree1)
- else
- minetest.env:spawn_tree(pos,conifer_tree2)
- end
-end
-
--- Other stuff
-
--- Should we remove all the trees above the conifers altitude?
-if CONIFERS_REMOVE_TREES == true then
- minetest.register_abm({
- nodenames = {
- "default:tree",
- "default:leaves"
- },
- interval = CONIFERS_RTREES_INTERVAL,
- chance = CONIFERS_RTREES_CHANCE,
-
- action = function(pos, node, _, _)
- if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air"
- and pos.y >= CONIFERS_ALTITUDE
- then
- minetest.env:add_node(pos , {name = "air"})
- end
- end
- })
-end
-
--- L-System Tree definitions
-
-jungle_tree1={
- axiom="FFFFFA",
- rules_a="FFFFF[&&-FFFBF[&&&FFf]^^^FFf][&&+FFFBFF[&&&FFf]^^^FFf][&&---FFFBFF[&&&FFf]^^^FFf][&&+++FFFBFF[&&&FFf]^^^FFf]FF/A",
- rules_b="[-FFf&F][+FFf&F]B",
- trunk="default:jungletree",
- leaves="jungletree:leaves_green",
- leaves2="jungletree:leaves_yellow",
- leaves2_chance=50,
- angle=45,
- iterations=4,
- random_level=2,
- trunk_type="crossed",
- thin_branches=true;
- fruit_chance=15,
- fruit="vines:vine"
-}
-
-jungle_tree2={
- axiom="FFFFFA",
- rules_a="FFFFF[&&-FFFBF[&&&FFf]^^^FFf][&&+FFFBFF[&&&FFf]^^^FFf][&&---FFFBFF[&&&FFf]^^^FFf][&&+++FFFBFF[&&&FFf]^^^FFf]FF/A",
- rules_b="[-FFf&F][+FFf&F]B",
- trunk="default:jungletree",
- leaves="jungletree:leaves_green",
- leaves2="jungletree:leaves_red",
- leaves2_chance=50,
- angle=45,
- iterations=4,
- random_level=2,
- trunk_type="crossed",
- thin_branches=true;
- fruit_chance=15,
- fruit="vines:vine"
-}
-
-
-conifer_tree1={
- axiom="FFFAF[&&-F][&&+F][&&---F][&&+++F]FF",
- rules_a="FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A",
- rules_b="[-FB][+FB]",
- trunk="conifers:trunk",
- leaves="conifers:leaves",
- angle=45,
- iterations=7,
- random_level=4,
- thin_trunks=true
-}
-
-conifer_tree2={
- axiom="FFFAF[&&-F][&&+F][&&---F][&&+++F]FF",
- rules_a="FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A",
- rules_b="[-FB][+FB]",
- trunk="conifers:trunk",
- leaves="conifers:leaves_special",
- angle=45,
- iterations=7,
- random_level=4,
- thin_trunks=true
-}
-
--- Nodes for jungle trees
-
-minetest.register_node(":jungletree:sapling", {
- description = "Jungle Tree Sapling",
- drawtype = "plantlike",
- visual_scale = 1.0,
- tiles = {"jungletree_sapling.png"},
- inventory_image = "jungletree_sapling.png",
- wield_image = "default_sapling.png",
- paramtype = "light",
- walkable = false,
- groups = {snappy=2,dig_immediate=3,flammable=2},
-})
-
-local leaves = {"green","yellow","red"}
-for color = 1, 3 do
- local leave_name = ":jungletree:leaves_"..leaves[color]
- minetest.register_node(leave_name, {
- description = "Jungle Tree Leaves",
- drawtype = "allfaces_optional",
- tiles = {"jungletree_leaves_"..leaves[color]..".png"},
- paramtype = "light",
- groups = {snappy=3, leafdecay=3, flammable=2},
- drop = {
- max_items = 1,
- items = {
- {
- -- player will get sapling with 1/20 chance
- items = {'jungletree:sapling'},
- rarity = 20,
- },
- {
- -- player will get leaves only if he get no saplings,
- -- this is because max_items is 1
- items = {leave_name},
- }
- }
- },
- sounds = default.node_sound_leaves_defaults(),
- })
-end
-
--- Nodes for conifers
-
-minetest.register_node(":conifers:trunk", {
- description = "Conifer trunk",
- tile_images = {
- "conifers_trunktop.png",
- "conifers_trunktop.png",
- "conifers_trunk.png",
- "conifers_trunk.png",
- "conifers_trunk.png",
- "conifers_trunk.png"
- },
- paramtype = "facedir_simple",
- is_ground_content = true,
- groups = {
- tree = 1,
- snappy = 2,
- choppy = 2,
- oddly_breakable_by_hand = 1,
- flammable = 2
- },
- sounds = default.node_sound_wood_defaults()
-})
-
-minetest.register_node(":conifers:trunk_reversed", {
- description = "Conifer reversed trunk",
- tile_images = {
- "conifers_trunk_reversed.png",
- "conifers_trunk_reversed.png",
- "conifers_trunktop.png",
- "conifers_trunktop.png",
- "conifers_trunk_reversed.png",
- "conifers_trunk_reversed.png"
- },
- --inventory_image = minetest.inventorycube(
- --"conifers_trunk.png",
- --"conifers_trunktop.png",
- --"conifers_trunk.png"
- --),
- paramtype = "facedir_simple",
- material = minetest.digprop_woodlike(1.0),
- legacy_facedir_simple = true,
- is_ground_content = true,
- groups = {
- tree = 1,
- snappy = 2,
- choppy = 2,
- oddly_breakable_by_hand = 1,
- flammable = 2
- },
- sounds = default.node_sound_wood_defaults()
-})
-
-minetest.register_node(":conifers:leaves", {
- description = "Conifer leaves",
- drawtype = "allfaces_optional",
- visual_scale = 1.3,
- tile_images = { "conifers_leaves.png" },
- paramtype = "light",
- groups = {
- snappy = 3,
- leafdecay = 3,
- flammable = 2
- },
- drop = {
- max_items = 1,
- items = {
- {
- -- player will get sapling with 1/20 chance
- items = {'conifers:sapling'},
- rarity = 20,
- },
- {
- -- player will get leaves only if he get no saplings,
- -- this is because max_items is 1
- items = {'conifers:leaves'},
- }
- }
- },
- sounds = default.node_sound_leaves_defaults()
-})
-
-minetest.register_node(":conifers:leaves_special", {
- description = "Bright conifer leaves",
- drawtype = "allfaces_optional",
- visual_scale = 1.3,
- tile_images = { "conifers_leaves_special.png" },
- paramtype = "light",
- groups = {
- snappy = 3,
- leafdecay = 3,
- flammable = 2
- },
- drop = {
- max_items = 1,
- items = {
- {
- -- player will get sapling with 1/20 chance
- items = {'conifers:sapling'},
- rarity = 20,
- },
- {
- -- player will get leaves only if he get no saplings,
- -- this is because max_items is 1
- items = {'conifers:leaves'},
- }
- }
- },
- sounds = default.node_sound_leaves_defaults()
-})
-
-minetest.register_node(":conifers:sapling", {
- description = "Conifer sapling",
- drawtype = "plantlike",
- visual_scale = 1.0,
- tile_images = {"conifers_sapling.png"},
- inventory_image = "conifers_sapling.png",
- wield_image = "conifers_sapling.png",
- paramtype = "light",
- walkable = false,
- groups = {
- snappy = 2,
- dig_immediate = 3,
- flammable = 2
- },
- sounds = default.node_sound_defaults(),
-})
-