summaryrefslogtreecommitdiff
path: root/ferns/treefern.lua
diff options
context:
space:
mode:
Diffstat (limited to 'ferns/treefern.lua')
-rw-r--r--ferns/treefern.lua228
1 files changed, 228 insertions, 0 deletions
diff --git a/ferns/treefern.lua b/ferns/treefern.lua
new file mode 100644
index 0000000..4ba502b
--- /dev/null
+++ b/ferns/treefern.lua
@@ -0,0 +1,228 @@
+-----------------------------------------------------------------------------------------------
+-- Ferns - Tree Fern 0.1.1
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: default , trees
+-----------------------------------------------------------------------------------------------
+
+assert(abstract_ferns.config.enable_treefern == true)
+
+abstract_ferns.grow_tree_fern = function(pos)
+
+ local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z}
+ if minetest.get_node(pos_01).name ~= "air"
+ and minetest.get_node(pos_01).name ~= "ferns:sapling_tree_fern"
+ and minetest.get_node(pos_01).name ~= "default:junglegrass" then
+ return
+ end
+
+ local size = math.random(1, 4) + math.random(1, 4)
+ if (size > 5) then
+ size = 10 - size
+ end
+ size = size + 1
+ local crown = ({ "ferns:tree_fern_leaves", "ferns:tree_fern_leaves_02" })[math.random(1, 2)]
+
+ local i = 1
+ while (i < size-1) do
+ if minetest.get_node({x = pos.x, y = pos.y + i + 1, z = pos.z}).name ~= "air" then
+ break
+ end
+ minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, { name = "ferns:fern_trunk" })
+ i = i + 1
+ end
+
+ minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, { name = crown })
+end
+
+-----------------------------------------------------------------------------------------------
+-- TREE FERN LEAVES
+-----------------------------------------------------------------------------------------------
+
+-- TODO: Both of these nodes look the same?
+
+minetest.register_node("ferns:tree_fern_leaves", {
+ description = "Tree Fern Crown (Dicksonia)",
+ drawtype = "plantlike",
+ visual_scale = 2,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ --tiles = {"[combine:32x32:0,0=top_left.png:0,16=bottom_left.png:16,0=top_right.png:16,16=bottom_right.png"},
+ tiles = {"ferns_fern_tree.png"},
+ inventory_image = "ferns_fern_tree_inv.png",
+ walkable = false,
+ groups = {snappy=3,flammable=2,attached_node=1},
+ drop = {
+ max_items = 2,
+ items = {
+ {
+ -- occasionally, drop a second sapling instead of leaves
+ -- (extra saplings can also be obtained by replanting and
+ -- reharvesting leaves)
+ items = {"ferns:sapling_tree_fern"},
+ rarity = 10,
+ },
+ {
+ items = {"ferns:sapling_tree_fern"},
+ },
+ {
+ items = {"ferns:tree_fern_leaves"},
+ }
+ }
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+minetest.register_node("ferns:tree_fern_leaves_02", {
+ drawtype = "plantlike",
+ visual_scale = 2,
+ paramtype = "light",
+ tiles = {"ferns_fern_big.png"},
+ walkable = false,
+ groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1},
+ drop = {
+ max_items = 2,
+ items = {
+ {
+ -- occasionally, drop a second sapling instead of leaves
+ -- (extra saplings can also be obtained by replanting and
+ -- reharvesting leaves)
+ items = {"ferns:sapling_tree_fern"},
+ rarity = 10,
+ },
+ {
+ items = {"ferns:sapling_tree_fern"},
+ },
+ {
+ items = {"ferns:tree_fern_leaves"},
+ }
+ }
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- FERN TRUNK
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:fern_trunk", {
+ description = "Fern Trunk (Dicksonia)",
+ drawtype = "nodebox",
+ paramtype = "light",
+ tiles = {
+ "ferns_fern_trunk_top.png",
+ "ferns_fern_trunk_top.png",
+ "ferns_fern_trunk.png"
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+ },
+ groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+ after_destruct = function(pos,oldnode)
+ local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
+ if node.name == "ferns:fern_trunk" then
+ minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
+ minetest.add_item(pos,"ferns:fern_trunk")
+ end
+ end,
+})
+
+-----------------------------------------------------------------------------------------------
+-- TREE FERN SAPLING
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:sapling_tree_fern", {
+ description = "Tree Fern Sapling (Dicksonia)",
+ drawtype = "plantlike",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"ferns_sapling_tree_fern.png"},
+ inventory_image = "ferns_sapling_tree_fern.png",
+ walkable = false,
+ groups = {snappy=3,flammable=2,flora=1,attached_node=1},
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+-- abm
+minetest.register_abm({
+ nodenames = "ferns:sapling_tree_fern",
+ interval = 1000,
+ chance = 4,
+ action = function(pos, node, _, _)
+ abstract_ferns.grow_tree_fern({x = pos.x, y = pos.y-1, z = pos.z})
+ end
+})
+
+-----------------------------------------------------------------------------------------------
+-- GENERATE TREE FERN
+-----------------------------------------------------------------------------------------------
+
+-- in jungles
+if abstract_ferns.config.enable_treeferns_in_jungle == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "default:sand",
+ "default:desert_sand",
+ },
+ max_count = 35,--27,
+ avoid_nodes = {"default:tree"},
+ avoid_radius = 4,
+ rarity = 50,
+ seed_diff = 329,
+ min_elevation = -10,
+ near_nodes = {"default:jungletree"},
+ near_nodes_size = 6,
+ near_nodes_vertical = 2,--4,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 0.4,
+ temp_max = -0.5,
+ temp_min = 0.13,
+ },
+ abstract_ferns.grow_tree_fern
+ )
+end
+
+-- for oases & tropical beaches
+if abstract_ferns.config.enable_treeferns_in_oases == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:sand"--,
+ --"default:desert_sand"
+ },
+ max_count = 35,
+ rarity = 50,
+ seed_diff = 329,
+ neighbors = {"default:desert_sand"},
+ ncount = 1,
+ min_elevation = 1,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 1.0,
+ temp_max = -1.0,
+ temp_min = 1.0,
+ },
+ abstract_ferns.grow_tree_fern
+)
+end