first commit
32
crafts.lua
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
--
|
||||||
|
-- Conifers crafting definitions
|
||||||
|
--
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'node "conifers:trunk_reversed" 2',
|
||||||
|
recipe = {
|
||||||
|
{'node "conifers:trunk"', 'node "conifers:trunk"'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'node "conifers:trunk" 2',
|
||||||
|
recipe = {
|
||||||
|
{'node "conifers:trunk_reversed"'},
|
||||||
|
{'node "conifers:trunk_reversed"'}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'default:wood 4',
|
||||||
|
recipe = {
|
||||||
|
{'conifers:trunk'}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'default:wood 4',
|
||||||
|
recipe = {
|
||||||
|
{'conifers:trunk_reversed'}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
34
crafts.lua~
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Conifers crafting definitions
|
||||||
|
--
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'node "conifers:trunk_reversed" 2',
|
||||||
|
recipe = {
|
||||||
|
{'node "conifers:trunk"', 'node "conifers:trunk"'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'node "conifers:trunk" 2',
|
||||||
|
recipe = {
|
||||||
|
{'node "conifers:trunk_reversed"'},
|
||||||
|
{'node "conifers:trunk_reversed"'}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'default:wood 4',
|
||||||
|
recipe = {
|
||||||
|
{'conifers:trunk'}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'default:wood 4',
|
||||||
|
recipe = {
|
||||||
|
{'conifers:trunk_reversed'}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
2
depends.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
default
|
||||||
|
plants_lib
|
1
depends.txt~
Normal file
@ -0,0 +1 @@
|
|||||||
|
default
|
403
init.lua
Normal file
@ -0,0 +1,403 @@
|
|||||||
|
-- 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(),
|
||||||
|
})
|
||||||
|
|
403
init.lua~
Normal file
@ -0,0 +1,403 @@
|
|||||||
|
-- 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 = true
|
||||||
|
|
||||||
|
-- Jungletree init stuff:
|
||||||
|
|
||||||
|
local JT_SPAWN_INTERVAL = 1 -- 100
|
||||||
|
local JT_SPAWN_CHANCE = 2 -- 10
|
||||||
|
|
||||||
|
local JT_GROW_INTERVAL = 1 -- 1000
|
||||||
|
local JT_GROW_CHANCE = 2 -- 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 = 1 -- 500
|
||||||
|
local CONIFERS_SPAWN_SAPLING_INTERVAL = 2 -- 3600
|
||||||
|
|
||||||
|
local CONIFERS_GROW_SAPLING_CHANCE = 1 -- 100
|
||||||
|
local CONIFERS_GROW_SAPLING_INTERVAL = 2 -- 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(),
|
||||||
|
})
|
||||||
|
|
BIN
textures/Thumbs.db
Normal file
BIN
textures/conifers_leaves.png
Normal file
After Width: | Height: | Size: 333 B |
BIN
textures/conifers_leaves_special.png
Normal file
After Width: | Height: | Size: 367 B |
BIN
textures/conifers_sapling.png
Normal file
After Width: | Height: | Size: 454 B |
BIN
textures/conifers_trunk.png
Normal file
After Width: | Height: | Size: 699 B |
BIN
textures/conifers_trunk_reversed.png
Normal file
After Width: | Height: | Size: 721 B |
BIN
textures/conifers_trunktop.png
Normal file
After Width: | Height: | Size: 768 B |
BIN
textures/jungletree_bark.png
Normal file
After Width: | Height: | Size: 705 B |
BIN
textures/jungletree_leaves_green.png
Normal file
After Width: | Height: | Size: 456 B |
BIN
textures/jungletree_leaves_red.png
Normal file
After Width: | Height: | Size: 469 B |
BIN
textures/jungletree_leaves_yellow.png
Normal file
After Width: | Height: | Size: 467 B |
BIN
textures/jungletree_sapling.png
Normal file
After Width: | Height: | Size: 215 B |