diff options
Diffstat (limited to 'plantlife_modpack/ferns/treefern.lua')
| -rw-r--r-- | plantlife_modpack/ferns/treefern.lua | 228 | 
1 files changed, 228 insertions, 0 deletions
diff --git a/plantlife_modpack/ferns/treefern.lua b/plantlife_modpack/ferns/treefern.lua new file mode 100644 index 0000000..4ba502b --- /dev/null +++ b/plantlife_modpack/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  | 
