summaryrefslogtreecommitdiff
path: root/ferns/gianttreefern.lua
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2016-04-01 21:00:20 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2016-04-01 21:10:04 -0400
commit888b0ebfec8c2eff9015163549a7e47443cb8665 (patch)
tree915080159bfaa6ba6e226087c7ce0e8d5464b518 /ferns/gianttreefern.lua
parentda66780a569712c23ae4f2996cfb4608a9f9d69d (diff)
downloaddreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.tar
dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.tar.gz
dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.tar.bz2
dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.tar.xz
dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.zip
"explode" all modpacks into their individual components
(you can't have a modpack buried inside a modpack)
Diffstat (limited to 'ferns/gianttreefern.lua')
-rw-r--r--ferns/gianttreefern.lua336
1 files changed, 336 insertions, 0 deletions
diff --git a/ferns/gianttreefern.lua b/ferns/gianttreefern.lua
new file mode 100644
index 0000000..bc6516b
--- /dev/null
+++ b/ferns/gianttreefern.lua
@@ -0,0 +1,336 @@
+-----------------------------------------------------------------------------------------------
+-- Ferns - Giant Tree Fern 0.1.1
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: 4seasons, default
+-- Supports: vines
+-----------------------------------------------------------------------------------------------
+
+assert(abstract_ferns.config.enable_giant_treefern == true)
+
+-- lot of code, lot to load
+
+abstract_ferns.grow_giant_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_giant_tree_fern"
+ and minetest.get_node(pos_01).name ~= "default:junglegrass" then
+ return
+ end
+
+ local size = math.random(12,16) -- min of range must be >= 4
+
+ local leafchecks = {
+ {
+ direction = 3,
+ positions = {
+ {x = pos.x + 1, y = pos.y + size - 1, z = pos.z },
+ {x = pos.x + 2, y = pos.y + size , z = pos.z },
+ {x = pos.x + 3, y = pos.y + size - 1, z = pos.z },
+ {x = pos.x + 4, y = pos.y + size - 2, z = pos.z }
+ }
+ },
+ {
+ direction = 1,
+ positions = {
+ {x = pos.x - 1, y = pos.y + size - 1, z = pos.z },
+ {x = pos.x - 2, y = pos.y + size, z = pos.z },
+ {x = pos.x - 3, y = pos.y + size - 1, z = pos.z },
+ {x = pos.x - 4, y = pos.y + size - 2, z = pos.z }
+ }
+ },
+ {
+ direction = 2,
+ positions = {
+ {x = pos.x , y = pos.y + size - 1, z = pos.z + 1},
+ {x = pos.x , y = pos.y + size , z = pos.z + 2},
+ {x = pos.x , y = pos.y + size - 1, z = pos.z + 3},
+ {x = pos.x , y = pos.y + size - 2, z = pos.z + 4}
+ }
+ },
+ {
+ direction = 0,
+ positions = {
+ {x = pos.x , y = pos.y + size - 1, z = pos.z - 1},
+ {x = pos.x , y = pos.y + size , z = pos.z - 2},
+ {x = pos.x , y = pos.y + size - 1, z = pos.z - 3},
+ {x = pos.x , y = pos.y + size - 2, z = pos.z - 4}
+ }
+ }
+ }
+
+ for i = 1, size-3 do
+ minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, {name="ferns:fern_trunk_big"})
+ end
+ minetest.set_node({x = pos.x, y = pos.y + size-2, z = pos.z}, {name="ferns:fern_trunk_big_top"})
+ minetest.set_node({x = pos.x, y = pos.y + size-1, z = pos.z}, {name="ferns:tree_fern_leaves_giant"})
+
+ -- all the checking for air below is to prevent some ugly bugs (incomplete trunks of neighbouring trees), it's a bit slower, but worth the result
+
+ -- assert(#leafchecks == 4)
+ for i = 1, 4 do
+ local positions = leafchecks[i].positions
+ local rot = leafchecks[i].direction
+ local endpos = 4 -- If the loop below adds all intermediate leaves then the "terminating" leaf will be at positions[4]
+ -- assert(#positions == 4)
+ -- add leaves so long as the destination nodes are air
+ for j = 1, 3 do
+ if minetest.get_node(positions[j]).name == "air" then
+ minetest.set_node(positions[j], {name="ferns:tree_fern_leave_big"})
+ else
+ endpos = j
+ break
+ end
+ end
+ -- add the terminating leaf if required and possible
+ if endpos == 4 and minetest.get_node(positions[endpos]).name == "air" then
+ minetest.set_node(positions[endpos], {name="ferns:tree_fern_leave_big_end", param2=rot})
+ end
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN LEAVES
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:tree_fern_leaves_giant", {
+ description = "Tree Fern Crown (Dicksonia)",
+ drawtype = "plantlike",
+ visual_scale = math.sqrt(8),
+ wield_scale = {x=0.175, y=0.175, z=0.175},
+ paramtype = "light",
+ tiles = {"ferns_fern_tree_giant.png"},
+ inventory_image = "ferns_fern_tree.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_giant_tree_fern"},
+ rarity = 10,
+ },
+ {
+ items = {"ferns:sapling_giant_tree_fern"},
+ },
+ {
+ items = {"ferns:tree_fern_leaves_giant"},
+ }
+ }
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN LEAVE PART
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:tree_fern_leave_big", {
+ description = "Giant Tree Fern Leaves",
+ drawtype = "raillike",
+ paramtype = "light",
+ tiles = {
+ "ferns_tree_fern_leave_big.png",
+ },
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2,
+ attached_node=1,
+ not_in_creative_inventory=1
+ },
+ drop = "",
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN LEAVE END
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:tree_fern_leave_big_end", {
+ description = "Giant Tree Fern Leave End",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = { "ferns_tree_fern_leave_big_end.png" },
+ walkable = false,
+ node_box = {
+ type = "fixed",
+-- {left, bottom, front, right, top, back }
+ fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2},
+ },
+ groups = {
+ snappy=3,
+ flammable=2,
+ attached_node=1,
+ not_in_creative_inventory=1
+ },
+ drop = "",
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN TRUNK TOP
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:fern_trunk_big_top", {
+ description = "Giant Fern Trunk",
+ drawtype = "nodebox",
+ paramtype = "light",
+ tiles = {
+ "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png",
+ "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png",
+ "ferns_fern_trunk_big.png"
+ },
+ node_box = {
+ type = "fixed",
+-- {left, bottom, front, right, top, back }
+ fixed = {
+ {-1/2, 33/64, -1/2, 1/2, 33/64, 1/2},
+ {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ groups = {
+ tree=1,
+ choppy=2,
+ oddly_breakable_by_hand=2,
+ flammable=3,
+ wood=1,
+ not_in_creative_inventory=1,
+ leafdecay=3 -- to support vines
+ },
+ drop = "ferns:fern_trunk_big",
+ sounds = default.node_sound_wood_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN TRUNK
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:fern_trunk_big", {
+ description = "Giant Fern Trunk",
+ drawtype = "nodebox",
+ paramtype = "light",
+ tiles = {
+ "ferns_fern_trunk_big_top.png",
+ "ferns_fern_trunk_big_top.png",
+ "ferns_fern_trunk_big.png"
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ 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_big" or node.name == "ferns:fern_trunk_big_top" then
+ minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
+ minetest.add_item(pos,"ferns:fern_trunk_big")
+ end
+ end,
+})
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN SAPLING
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:sapling_giant_tree_fern", {
+ description = "Giant Tree Fern Sapling",
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {"ferns_sapling_tree_fern_giant.png"},
+ inventory_image = "ferns_sapling_tree_fern_giant.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_giant_tree_fern",
+ interval = 1000,
+ chance = 4,
+ action = function(pos, node, _, _)
+ abstract_ferns.grow_giant_tree_fern({x = pos.x, y = pos.y-1, z = pos.z})
+ end
+})
+
+-----------------------------------------------------------------------------------------------
+-- GENERATE GIANT TREE FERN
+-----------------------------------------------------------------------------------------------
+
+-- in jungles
+if abstract_ferns.config.enable_giant_treeferns_in_jungle == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "default:sand",
+ "default:desert_sand"--,
+ --"dryplants:grass_short"
+ },
+ max_count = 12,--27,
+ avoid_nodes = {"group:tree"},
+ avoid_radius = 3,--4,
+ rarity = 85,
+ seed_diff = 329,
+ min_elevation = 1,
+ near_nodes = {"default:jungletree"},
+ near_nodes_size = 6,
+ near_nodes_vertical = 2,--4,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_ferns.grow_giant_tree_fern
+ )
+end
+
+-- for oases & tropical beaches
+if abstract_ferns.config.enable_giant_treeferns_in_oases == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:sand"--,
+ --"default:desert_sand"
+ },
+ max_count = 10,--27,
+ rarity = 90,
+ 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_giant_tree_fern
+ )
+end