forked from mtcontrib/moretrees
		
	Compare commits
	
		
			26 Commits
		
	
	
		
			bce9f8d1cb
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 403b16f5d9 | ||
|  | 7c690ed901 | ||
|  | ac3e30ae86 | ||
|  | c15250a03a | ||
|  | 458536dbe6 | ||
|  | 2c891e6c25 | ||
|  | 517c9dc516 | ||
|  | 3e424b2797 | ||
|  | 1b6914bc26 | ||
|  | f49b1c42c9 | ||
|  | 670f7f4e61 | ||
|  | 9a6c64d163 | ||
|  | 5d7c46c4cf | ||
|  | 17f2037218 | ||
|  | b1fe8df038 | ||
|  | b56e22fefd | ||
|  | 288870bc8d | ||
|  | 393840ba49 | ||
|  | 21bdcc360b | ||
|  | 7879bd8192 | ||
|  | 5bc6bdc3d9 | ||
|  | e476b81cf5 | ||
|  | 8103aaae79 | ||
|  | c4d1dde83c | ||
|  | 87a997ba4a | ||
|  | cbe846dfde | 
							
								
								
									
										18
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
|  | ||||
| name: luacheck | ||||
|  | ||||
| on: [push, pull_request] | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|     - uses: actions/checkout@v1 | ||||
|     - name: apt | ||||
|       run: sudo apt-get install -y luarocks | ||||
|     - name: luacheck install | ||||
|       run: luarocks install --local luacheck | ||||
|     - name: luacheck run | ||||
|       run: $HOME/.luarocks/bin/luacheck ./ | ||||
							
								
								
									
										38
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								.luacheckrc
									
									
									
									
									
								
							| @@ -1,30 +1,28 @@ | ||||
| std = "lua51+minetest" | ||||
| unused_args = false | ||||
| allow_defined_top = true | ||||
| max_line_length = 999 | ||||
| max_comment_line_length = 999 | ||||
|  | ||||
| stds.minetest = { | ||||
| 	read_globals = { | ||||
| 		"minetest", | ||||
| 		"vector", | ||||
| 		"VoxelManip", | ||||
| 		"VoxelArea", | ||||
| 		"PseudoRandom", | ||||
| 		"ItemStack", | ||||
| 		"default", | ||||
| 		table = { | ||||
| 			fields = { | ||||
| 				"copy", | ||||
| 			}, | ||||
| 		}, | ||||
| 		"dump", | ||||
| 	} | ||||
| exclude_files = {".luacheckrc"} | ||||
|  | ||||
|  | ||||
| globals = { | ||||
| 	"minetest", | ||||
| 	"vector", | ||||
| 	"VoxelManip", | ||||
| 	"VoxelArea", | ||||
| 	"PseudoRandom", | ||||
| 	"ItemStack", | ||||
| 	"default", | ||||
| 	"dump", | ||||
| 	"moretrees", | ||||
| 	"ethereal", | ||||
| } | ||||
|  | ||||
| read_globals = { | ||||
| 	"biome_lib", | ||||
| 	string = {fields = {"split"}}, | ||||
|     table = {fields = {"copy", "getn"}}, | ||||
|  | ||||
| 	"stairsplus", | ||||
| 	"stairs", | ||||
| 	"doors", | ||||
| 	"xcompat", | ||||
| } | ||||
|   | ||||
| @@ -8,4 +8,5 @@ jungle trees mod, and big contributions by RealBadAngel. | ||||
| Brought together into one mod and made L-systems compatible by Vanessa | ||||
| Ezekowitz. | ||||
|  | ||||
| Dependencies: <a href="https://forum.minetest.net/viewtopic.php?f=11&t=12999">biome_lib</a> and default | ||||
| Dependencies: `xcompat`   | ||||
| see mod.conf for more | ||||
|   | ||||
							
								
								
									
										285
									
								
								biome_defs.lua
									
									
									
									
									
								
							
							
						
						
									
										285
									
								
								biome_defs.lua
									
									
									
									
									
								
							| @@ -1,302 +1,173 @@ | ||||
|  | ||||
| -- TODO | ||||
| -- Use biomes in the decoration definition depending on their heat_point humidity_point | ||||
| -- instead of spawning it with a rather low fill_ratio everywhere | ||||
| local ratio_abundant =  0.001 | ||||
| local ratio_common =    0.0005 | ||||
| local ratio_normal =    0.0003 | ||||
| local ratio_uncommon =  0.0002 | ||||
| local ratio_rare =      0.0001 | ||||
| local ratio_very_rare = 0.00003 | ||||
|  | ||||
| local coniferous_place_on = { | ||||
| 	xcompat.materials.dirt_with_grass, | ||||
| 	"default:dirt_with_coniferous_litter" | ||||
| } | ||||
|  | ||||
| moretrees.beech_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 8, | ||||
| 	seed_diff = 2, | ||||
| 	rarity = 50, | ||||
| 	max_count = 20, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	fill_ratio = ratio_normal, | ||||
| } | ||||
|  | ||||
| moretrees.palm_biome = { | ||||
| 	surface = "default:sand", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 5, | ||||
| 	seed_diff = 330, | ||||
| 	place_on = xcompat.materials.sand, | ||||
| 	min_elevation = -1, | ||||
| 	max_elevation = 1, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 15, | ||||
| 	near_nodes_count = 10, | ||||
| 	temp_min = 0.25, | ||||
| 	temp_max = -0.15, | ||||
| 	rarity = 50, | ||||
| 	max_count = 10, | ||||
| 	fill_ratio = ratio_abundant, | ||||
| } | ||||
|  | ||||
| moretrees.date_palm_biome = { | ||||
| 	surface = "default:desert_sand", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 339, | ||||
| 	place_on = xcompat.materials.desert_sand, | ||||
| 	min_elevation = -1, | ||||
| 	max_elevation = 10, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 20, | ||||
| 	near_nodes_count = 100, | ||||
| 	near_nodes_vertical = 20, | ||||
| 	temp_min = -0.20, | ||||
| 	humidity_max = 0.20, | ||||
| 	rarity = 10, | ||||
| 	max_count = 30, | ||||
| 	max_elevation = 8, | ||||
| 	fill_ratio = ratio_common, | ||||
| } | ||||
|  | ||||
| moretrees.date_palm_biome_2 = { | ||||
| 	surface = "default:desert_sand", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 340, | ||||
| 	min_elevation = 11, | ||||
| 	place_on = xcompat.materials.desert_sand, | ||||
| 	min_elevation = 9, | ||||
| 	max_elevation = 30, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 1, | ||||
| 	near_nodes_count = 1, | ||||
| 	near_nodes_vertical = 30, | ||||
| 	temp_min = -0.20, | ||||
| 	humidity_max = 0.20, | ||||
| 	rarity = 10, | ||||
| 	max_count = 30, | ||||
| 	spawn_by = {xcompat.materials.water_source}, | ||||
| 	num_spawn_by = 1, | ||||
| 	fill_ratio = ratio_abundant, | ||||
| } | ||||
|  | ||||
| moretrees.apple_tree_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 331, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = 1, | ||||
| 	max_elevation = 10, | ||||
| 	temp_min = 0.1, | ||||
| 	temp_max = -0.15, | ||||
| 	rarity = 75, | ||||
| 	max_count = 5, | ||||
| 	biomes = {"deciduous_forest"}, | ||||
| 	fill_ratio = ratio_rare, | ||||
| } | ||||
|  | ||||
| moretrees.oak_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 15, | ||||
| 	seed_diff = 332, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = 0, | ||||
| 	max_elevation = 10, | ||||
| 	temp_min = 0.4, | ||||
| 	temp_max = 0.2, | ||||
| 	rarity = 50, | ||||
| 	max_count = 5, | ||||
| 	fill_ratio = ratio_normal, | ||||
| } | ||||
|  | ||||
| moretrees.sequoia_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 333, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = 0, | ||||
| 	max_elevation = 10, | ||||
| 	temp_min = 1, | ||||
| 	temp_max = -0.4, | ||||
| 	rarity = 90, | ||||
| 	max_count = 5, | ||||
| 	fill_ratio = ratio_rare, | ||||
| } | ||||
|  | ||||
| moretrees.birch_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 5, | ||||
| 	seed_diff = 334, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = 10, | ||||
| 	max_elevation = 15, | ||||
| 	temp_min = 0.9, | ||||
| 	temp_max = 0.3, | ||||
| 	rarity = 50, | ||||
| 	max_count = 10, | ||||
| 	fill_ratio = ratio_common, | ||||
| } | ||||
|  | ||||
| moretrees.willow_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 337, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = -5, | ||||
| 	max_elevation = 5, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 15, | ||||
| 	near_nodes_count = 5, | ||||
| 	rarity = 75, | ||||
| 	max_count = 5, | ||||
| 	fill_ratio = ratio_uncommon, | ||||
| } | ||||
|  | ||||
| moretrees.rubber_tree_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 338, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = -5, | ||||
| 	max_elevation = 5, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 15, | ||||
| 	near_nodes_count = 10, | ||||
| 	temp_min = -0.15, | ||||
| 	rarity = 75, | ||||
| 	max_count = 10, | ||||
| 	max_elevation = 8, | ||||
| 	fill_ratio = ratio_normal, | ||||
| } | ||||
|  | ||||
| moretrees.jungletree_biome = { | ||||
| 	surface = { | ||||
| 		"default:dirt", | ||||
| 		"default:dirt_with_grass", | ||||
| 	place_on = { | ||||
| 		xcompat.materials.dirt, | ||||
| 		xcompat.materials.dirt_with_grass, | ||||
| 		"woodsoils:dirt_with_leaves_1", | ||||
| 		"woodsoils:grass_with_leaves_1", | ||||
| 		"woodsoils:grass_with_leaves_2" | ||||
| 		"woodsoils:grass_with_leaves_2", | ||||
| 		"default:dirt_with_rainforest_litter", | ||||
| 	}, | ||||
| 	avoid_nodes = {"moretrees:jungletree_trunk"}, | ||||
| 	max_count = 12, | ||||
| 	avoid_radius = 3, | ||||
| 	rarity = 85, | ||||
| 	seed_diff = 329, | ||||
| 	min_elevation = 1, | ||||
| 	near_nodes = {"default:jungletree"}, | ||||
| 	near_nodes_size = 6, | ||||
| 	near_nodes_vertical = 2, | ||||
| 	near_nodes_count = 1, | ||||
| 	plantlife_limit = -0.9, | ||||
| 	spawn_by = minetest.get_modpath("default") and {"default:jungletree"} or nil, | ||||
| 	num_spawn_by = minetest.get_modpath("default") and 1 or nil, | ||||
| 	biomes = {"rainforest", "rainforest_swamp"}, | ||||
| } | ||||
|  | ||||
| moretrees.spruce_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 335, | ||||
| 	place_on = coniferous_place_on, | ||||
| 	min_elevation = 20, | ||||
| 	temp_min = 0.9, | ||||
| 	temp_max = 0.7, | ||||
| 	rarity = 50, | ||||
| 	max_count = 5, | ||||
| 	fill_ratio = ratio_uncommon, | ||||
| } | ||||
|  | ||||
| moretrees.cedar_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 336, | ||||
| 	place_on = coniferous_place_on, | ||||
| 	min_elevation = 0,  --Added to solve an issue where cedar trees would sometimes spawn deep underground | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 15, | ||||
| 	near_nodes_count = 5, | ||||
| 	rarity = 50, | ||||
| 	max_count = 10, | ||||
| 	fill_ratio = ratio_rare, | ||||
| } | ||||
|  | ||||
|  | ||||
| -- Poplar requires a lot of water. | ||||
| moretrees.poplar_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 6, | ||||
| 	seed_diff = 341, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = 0, | ||||
| 	max_elevation = 50, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 15, | ||||
| 	near_nodes_vertical = 5, | ||||
| 	near_nodes_count = 1, | ||||
| 	humidity_min = -0.7, | ||||
| 	humidity_max = -1, | ||||
| 	rarity = 50, | ||||
| 	max_count = 15, | ||||
| 	spawn_by = {xcompat.materials.water_source}, | ||||
| 	num_spawn_by = 3, | ||||
| 	fill_ratio = ratio_abundant, | ||||
| } | ||||
|  | ||||
| -- The humidity requirement it quite restrictive (apparently). | ||||
| -- Spawn an occasional poplar elsewhere. | ||||
| moretrees.poplar_biome_2 = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 6, | ||||
| 	seed_diff = 341, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = 0, | ||||
| 	max_elevation = 50, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 15, | ||||
| 	near_nodes_vertical = 4, | ||||
| 	near_nodes_count = 10, | ||||
| 	humidity_min = 0.1, | ||||
| 	humidity_max = -0.6, | ||||
| 	rarity = 50, | ||||
| 	max_count = 1, | ||||
| 	fill_ratio = ratio_very_rare, | ||||
| } | ||||
|  | ||||
| -- Subterranean lakes provide enough water for poplars to grow | ||||
| moretrees.poplar_biome_3 = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 6, | ||||
| 	seed_diff = 342, | ||||
| 	min_elevation = 0, | ||||
| 	max_elevation = 50, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 1, | ||||
| 	near_nodes_vertical = 25, | ||||
| 	near_nodes_count = 1, | ||||
| 	humidity_min = -0.5, | ||||
| 	humidity_max = -1, | ||||
| 	rarity = 0, | ||||
| 	max_count = 30, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = -50, | ||||
| 	max_elevation = 0, | ||||
| 	spawn_by = {xcompat.materials.water_source}, | ||||
| 	num_spawn_by = 3, | ||||
| 	fill_ratio = ratio_abundant, | ||||
| } | ||||
|  | ||||
| moretrees.poplar_small_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 4, | ||||
| 	seed_diff = 343, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = 0, | ||||
| 	max_elevation = 50, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 10, | ||||
| 	near_nodes_vertical = 5, | ||||
| 	near_nodes_count = 1, | ||||
| 	humidity_min = -0.7, | ||||
| 	humidity_max = -1, | ||||
| 	rarity = 50, | ||||
| 	max_count = 10, | ||||
| 	spawn_by = {xcompat.materials.water_source}, | ||||
| 	num_spawn_by = 1, | ||||
| 	fill_ratio = ratio_normal, | ||||
| } | ||||
|  | ||||
| moretrees.poplar_small_biome_2 = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 4, | ||||
| 	seed_diff = 343, | ||||
| 	place_on = xcompat.materials.dirt_with_grass, | ||||
| 	min_elevation = 0, | ||||
| 	max_elevation = 50, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 10, | ||||
| 	near_nodes_vertical = 4, | ||||
| 	near_nodes_count = 5, | ||||
| 	humidity_min = 0.1, | ||||
| 	humidity_max = -0.6, | ||||
| 	rarity = 50, | ||||
| 	max_count = 3, | ||||
| 	spawn_by = {xcompat.materials.water_source}, | ||||
| 	num_spawn_by = 5, | ||||
| 	fill_ratio = ratio_abundant, | ||||
| } | ||||
|  | ||||
|  | ||||
| moretrees.fir_biome = { | ||||
| 	surface = "default:dirt_with_grass", | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 359, | ||||
| 	place_on = coniferous_place_on, | ||||
| 	min_elevation = 25, | ||||
| 	temp_min = 0.9, | ||||
| 	temp_max = 0.3, | ||||
| 	rarity = 50, | ||||
| 	max_count = 10, | ||||
| 	fill_ratio = ratio_normal, | ||||
| } | ||||
|  | ||||
| moretrees.fir_biome_snow = { | ||||
| 	surface = {"snow:dirt_with_snow", "snow:snow"}, | ||||
| 	below_nodes = {"default:dirt", "default:dirt_with_grass", "snow:dirt_with_snow"}, | ||||
| 	avoid_nodes = moretrees.avoidnodes, | ||||
| 	avoid_radius = 10, | ||||
| 	seed_diff = 359, | ||||
| 	rarity = 50, | ||||
| 	max_count = 10, | ||||
| 	check_air = false, | ||||
| 	delete_above = true, | ||||
| 	spawn_replace_node = true | ||||
| 	place_on = {"snow:dirt_with_snow", "snow:snow"}, | ||||
| 	below_nodes = {xcompat.materials.dirt, xcompat.materials.dirt_with_grass, "snow:dirt_with_snow"}, | ||||
| 	fill_ratio = ratio_normal, | ||||
| } | ||||
|   | ||||
| @@ -32,7 +32,7 @@ ftrunk.after_destruct = function(pos, oldnode) | ||||
| 		-- minetest.dig_node(coconutpos) does not cause nearby coconuts to be dropped :-( ... | ||||
| 		--minetest.dig_node(coconutpos) | ||||
| 		local items = minetest.get_node_drops(minetest.get_node(coconutpos).name) | ||||
| 		minetest.swap_node(coconutpos, biome_lib.air) | ||||
| 		minetest.swap_node(coconutpos, {name = "air"}) | ||||
| 		for _, itemname in pairs(items) do | ||||
| 			minetest.add_item(coconutpos, itemname) | ||||
| 		end | ||||
| @@ -80,8 +80,11 @@ end | ||||
| --  ABM converts the trunk to a regular fruit trunk, and spawns some coconuts) | ||||
| minetest.register_abm({ | ||||
| 	nodenames = { "moretrees:palm_fruit_trunk_gen" }, | ||||
| 	interval = 1, | ||||
| 	interval = 6, | ||||
| 	chance = 1, | ||||
| 	min_y = -16, | ||||
| 	max_y = 48, | ||||
| 	label = "converts palm trunk to a regular fruit trunk, and spawns some coconuts", | ||||
| 	action = function(pos, node, active_object_count, active_object_count_wider) | ||||
| 		minetest.swap_node(pos, {name="moretrees:palm_fruit_trunk"}) | ||||
| 		local poslist = minetest.find_nodes_in_area( | ||||
| @@ -127,7 +130,7 @@ local coconut_growfn = function(pos, elapsed) | ||||
| 					minetest.add_item(pos, itemname) | ||||
| 				end | ||||
| 			end | ||||
| 			minetest.swap_node(pos, biome_lib.air) | ||||
| 			minetest.swap_node(pos, {name = "air"}) | ||||
| 		end | ||||
| 	else | ||||
| 		-- Grow coconuts to the next stage | ||||
| @@ -174,10 +177,11 @@ for _,suffix in ipairs({"_0", "_1", "_2", "_3", ""}) do | ||||
| 		paramtype = "light", | ||||
| 		sunlight_propagates = true, | ||||
| 		walkable = false, | ||||
| 		is_ground_content = false, | ||||
| 		groups = { fleshy=3, dig_immediate=3, flammable=2, moretrees_coconut=coco_group }, | ||||
| 		inventory_image = tile.."^[transformR180", | ||||
| 		wield_image = tile.."^[transformR180", | ||||
| 		sounds = default.node_sound_defaults(), | ||||
| 		sounds = xcompat.sounds.node_sound_default(), | ||||
| 		drop = drop, | ||||
| 		selection_box = { | ||||
| 			type = "fixed", | ||||
|   | ||||
							
								
								
									
										16
									
								
								crafts.lua
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								crafts.lua
									
									
									
									
									
								
							| @@ -3,13 +3,15 @@ local S = minetest.get_translator("moretrees") | ||||
| for i in ipairs(moretrees.treelist) do | ||||
| 	local treename = moretrees.treelist[i][1] | ||||
|  | ||||
| 	minetest.register_craft({ | ||||
| 		type = "shapeless", | ||||
| 		output = "moretrees:"..treename.."_planks 4", | ||||
| 		recipe = { | ||||
| 			"moretrees:"..treename.."_trunk" | ||||
| 		} | ||||
| 	}) | ||||
| 	if moretrees.enable_planks then | ||||
| 		minetest.register_craft({ | ||||
| 			type = "shapeless", | ||||
| 			output = "moretrees:"..treename.."_planks 4", | ||||
| 			recipe = { | ||||
| 				"moretrees:"..treename.."_trunk" | ||||
| 			} | ||||
| 		}) | ||||
| 	end | ||||
|  | ||||
| 	minetest.register_craft({ | ||||
| 		type = "fuel", | ||||
|   | ||||
| @@ -52,7 +52,7 @@ ftrunk.after_destruct = function(pos, oldnode) | ||||
| 	for _,datespos in pairs(dates) do | ||||
| 		-- minetest.dig_node(datespos) does not cause nearby dates to be dropped :-( ... | ||||
| 		local items = minetest.get_node_drops(minetest.get_node(datespos).name) | ||||
| 		minetest.swap_node(datespos, biome_lib.air) | ||||
| 		minetest.swap_node(datespos, {name = "air"}) | ||||
| 		for _, itemname in pairs(items) do | ||||
| 			minetest.add_item(datespos, itemname) | ||||
| 		end | ||||
| @@ -83,7 +83,10 @@ local date_regrow_abm_spec = { | ||||
| 	interval = moretrees.dates_flower_interval, | ||||
| 	chance = moretrees.dates_flower_chance, | ||||
| 	action = function(pos, node, active_object_count, active_object_count_wider) | ||||
| 		local dates = minetest.find_nodes_in_area({x=pos.x-2, y=pos.y, z=pos.z-2}, {x=pos.x+2, y=pos.y, z=pos.z+2}, "group:moretrees_dates") | ||||
| 		local dates = minetest.find_nodes_in_area( | ||||
| 			{x=pos.x-2, y=pos.y, z=pos.z-2}, {x=pos.x+2, y=pos.y, z=pos.z+2}, | ||||
| 			"group:moretrees_dates" | ||||
| 		) | ||||
|  | ||||
| 		-- New blossom interval increases exponentially with number of dates already hanging | ||||
| 		-- In addition: if more dates are hanging, the chance of picking an empty spot decreases as well... | ||||
| @@ -228,7 +231,8 @@ local function find_fruit_trunks_near(ftpos, sect) | ||||
| 	-- Skip the search if it is consuming too much CPU time | ||||
| 	if sect_search_stats.count > 0 and moretrees.dates_blossom_search_iload > 0 | ||||
| 			and sect_search_stats.sum / sect_search_stats.count > moretrees.dates_blossom_search_time_treshold | ||||
| 			and t0us - sect_search_stats.last_us < moretrees.dates_blossom_search_iload * (sect_search_stats.sum / sect_search_stats.count) then | ||||
| 			and t0us - sect_search_stats.last_us < moretrees.dates_blossom_search_iload | ||||
| 			* (sect_search_stats.sum / sect_search_stats.count) then | ||||
| 		sect_search_stats.skip = sect_search_stats.skip + 1 | ||||
| 		return nil | ||||
| 	end | ||||
| @@ -481,7 +485,10 @@ local function find_male_blossom_with_ftrunk(fbpos,ftpos) | ||||
| 		end | ||||
| 		-- Else do a new search | ||||
| 		if not mpalms.sect[sect_old] then | ||||
| 			mpalms.sect[sect_old], fpalms_list, all_mpalms_list = find_fruit_trunks_near(ftpos, {x = (sect_old + 4) % 3 - 1, z = (sect_old + 4) / 3 - 1}) | ||||
| 			mpalms.sect[sect_old], fpalms_list, all_mpalms_list = find_fruit_trunks_near( | ||||
| 				ftpos, | ||||
| 				{x = (sect_old + 4) % 3 - 1, z = (sect_old + 4) / 3 - 1} | ||||
| 			) | ||||
| 			cache_changed = true | ||||
| 			if sect_old == 0 then | ||||
| 				-- Save the results if it is sector 0 | ||||
| @@ -547,7 +554,7 @@ local dates_growfn = function(pos, elapsed) | ||||
| 		elseif string.find(node.name, "moretrees:dates_m") then | ||||
| 			minetest.swap_node(pos, {name="moretrees:dates_n"}) | ||||
| 		else | ||||
| 			minetest.swap_node(pos, biome_lib.air) | ||||
| 			minetest.swap_node(pos, {name = "air"}) | ||||
| 		end | ||||
| 		return | ||||
| 	elseif node.name == "moretrees:dates_f0" and math.random(100) <= 100 * dates_regrow_prob then | ||||
| @@ -587,7 +594,7 @@ local dates_growfn = function(pos, elapsed) | ||||
| 	elseif string.match(node.name, "n$") then | ||||
| 		-- Remove stems. | ||||
| 		if math.random(stems_drop_ichance) == 1 then | ||||
| 			minetest.swap_node(pos, biome_lib.air) | ||||
| 			minetest.swap_node(pos, {name = "air"}) | ||||
| 			return "stemdrop" | ||||
| 		end | ||||
| 		action = "nostemdrop" | ||||
| @@ -716,10 +723,11 @@ for _,suffix in ipairs({"f0", "f1", "f2", "f3", "f4", "m0", "fn", "n"}) do | ||||
| 		paramtype = "light", | ||||
| 		sunlight_propagates = true, | ||||
| 		walkable = false, | ||||
| 		is_ground_content = false, | ||||
| 		groups = { fleshy=3, dig_immediate=3, flammable=2, moretrees_dates=1 }, | ||||
| 		inventory_image = "moretrees_dates_"..suffix..".png^[transformR0", | ||||
| 		wield_image = "moretrees_dates_"..suffix..".png^[transformR90", | ||||
| 		sounds = default.node_sound_defaults(), | ||||
| 		sounds = xcompat.sounds.node_sound_default(), | ||||
| 		drop = dropfn, | ||||
| 		selection_box = { | ||||
| 			type = "fixed", | ||||
|   | ||||
| @@ -1,135 +0,0 @@ | ||||
| -- Global configuration variables | ||||
|  | ||||
| -- Enable the various kinds of trees. | ||||
|  | ||||
| moretrees.enable_apple_tree		= true | ||||
| moretrees.enable_oak			= true | ||||
| moretrees.enable_sequoia		= true | ||||
| moretrees.enable_palm			= true | ||||
| moretrees.enable_date_palm		= true | ||||
| moretrees.enable_cedar			= true | ||||
| moretrees.enable_rubber_tree	= true | ||||
| moretrees.enable_willow			= true | ||||
| moretrees.enable_birch			= true | ||||
| moretrees.enable_spruce			= true | ||||
| moretrees.enable_jungle_tree	= true | ||||
| moretrees.enable_fir			= true | ||||
| moretrees.enable_poplar			= true | ||||
| moretrees.enable_beech			= false | ||||
|  | ||||
| -- set this to true to make moretrees spawn saplings at mapgen time instead | ||||
| -- of fully-grown trees, which will grow into full trees after a very short | ||||
| -- delay.  This reduces mapgen lag in some situations, and fixes situations | ||||
| -- where the mapgen conflicts with the tree generator. | ||||
|  | ||||
| moretrees.spawn_saplings		= true | ||||
|  | ||||
| -- Set this to true to allow defining stairs/slabs/etc.  If Moreblocks is | ||||
| -- installed, this will use that mod's Stairs Plus component.  Otherwise, it | ||||
| -- will use the default stairs mod in minetest_game, if present | ||||
|  | ||||
| moretrees.enable_stairs			= true | ||||
|  | ||||
| -- If this variable is set to true, register fences for moretrees wood | ||||
|  | ||||
| moretrees.enable_fences         = false | ||||
|  | ||||
| -- Set this to true if you want the plantlike drawtype for leaves, which | ||||
| -- improves some peoples' framerates without resorting to making leaf nodes opaque. | ||||
| -- Affects default leaves and default jungle leaves also. | ||||
|  | ||||
| moretrees.plantlike_leaves		= false | ||||
|  | ||||
| -- Enable this if you want moretrees to redefine default apples so that they | ||||
| -- fall when leaves decay/are dug. | ||||
|  | ||||
| moretrees.enable_redefine_apple		= true | ||||
|  | ||||
| -- Set this to true to enable leaf decay of all trees except the default ones. | ||||
|  | ||||
| moretrees.enable_leafdecay		= true | ||||
|  | ||||
| -- various related settings to configure leaf decay. | ||||
|  | ||||
| moretrees.leafdecay_delay		= 2 | ||||
| moretrees.leafdecay_chance		= 5 | ||||
| moretrees.leafdecay_radius		= 5 | ||||
| moretrees.palm_leafdecay_radius		= 10 | ||||
|  | ||||
| -- Change these settings if you want default trees to be gradually cut down | ||||
| -- above the elevation where firs normally generate. | ||||
|  | ||||
| moretrees.firs_remove_default_trees	= false | ||||
| moretrees.firs_remove_interval		= 2 | ||||
| moretrees.firs_remove_chance		= 150 | ||||
|  | ||||
| -- Cocos palm settings | ||||
|  | ||||
| moretrees.coconuts_regrow		= true | ||||
| moretrees.coconuts_convert_existing_palms = true	-- Converting existing palm trees will make coconuts regrow on them as well | ||||
| 							-- Else, they will only regrow on newly-spawned palms | ||||
| 							-- However, conversion is not an exact science, and although an attempt is | ||||
| 							-- made to detect whether a trunk belongs to an actual palm, some coconut trunks | ||||
| 							-- and some coconuts may be incorrectly converted. | ||||
| moretrees.coconut_flower_interval	= 59 | ||||
| moretrees.coconut_flower_chance		= 67 | ||||
| moretrees.coconut_grow_interval		= 2 * moretrees.coconut_flower_interval * moretrees.coconut_flower_chance | ||||
| 							-- Actual interval will randomly vary between 67% and 133% of this value | ||||
| 							-- 2 * 59 * 67 ~ 2 hours. So flowers become coconuts in about 6 hours | ||||
| moretrees.coconut_item_drop_ichance	= 10 		-- inverse probability of ripe coconuts dropping as items (instead of disappearing) | ||||
|  | ||||
| -- Date palm settings | ||||
|  | ||||
| -- Suggested configuration alternatives: | ||||
| -- - Dates grow only when pollinated: | ||||
| --   - Set dates_regrow_pollinated to true | ||||
| --   - Set dates_regrow_unpollinated_percent to 0 | ||||
| -- - Dates grow without pollination. Pollination disabled: | ||||
| --   - Set dates_regrow_pollinated to false | ||||
| --   - Set dates_regrow_unpollinated_percent to some larger positive value, e.g. 95 | ||||
| -- - Dates grow, but more and faster if male flowers are nearby | ||||
| --   - Set dates_regrow_pollinated to true | ||||
| --   - Set dates_regrow_unpollinated_percent to some small positive value, e.g. 33 | ||||
| --   - Optional but recommended: Reduce the pollination distance, e.g. to 30 | ||||
|  | ||||
| -- Note that it should not be necessary to disable pollination for performance | ||||
| -- reasons. A lot of effort has gone into ensuring that date growing will not cause lag. | ||||
| -- | ||||
| -- If lag is suspected, use the chat command '/dates_stats' to obtain the male dates | ||||
| -- search time, as well as the counts of total number of searches requested and the | ||||
| -- number of searches actually performed. | ||||
|  | ||||
| moretrees.dates_regrow_pollinated	= true		-- Enable pollination. If enabled, male trees are required for dates to grow. | ||||
| 							-- If disabled, dates_regrow_unpollinated_percent must be non-zero for dates to regrow. | ||||
| moretrees.dates_regrow_unpollinated_percent	= 0	-- Percentage of female dates becoming dates without being pollinated. | ||||
| 							-- If 0, dates_regrow_pollinated must be enabled for dates to grow. | ||||
| moretrees.dates_female_percent		= 57		-- Ratio of female to male trees - tune this to improve # of generated trees that actually bear fruit | ||||
| 							-- ~57% gives near optimal results for groups of 3 random trees, while it is only slightly suboptimal | ||||
| 							-- for groups of 2 and 4 random trees (~2% less fruit than optimal). | ||||
| 							-- Optimal values per group size: 2: 50%, 3: 57.78%, 4: 63%, 5: 66.9%, 6: 69.9%, [...], 12: 79.8% | ||||
| 							-- So 57% is optimal for small groups of trees. As larger groups have more female palms anyway, a | ||||
| 							-- less than optimal proportion of female to male trees is not a problem. | ||||
| moretrees.dates_pollination_distance	= 120 | ||||
| moretrees.dates_blossom_search_time_treshold = 1000	-- If average male blossom search time (in microseconds) exceeds this, start limiting the search load. | ||||
| moretrees.dates_blossom_search_iload = 10		-- Inverse fraction of CPU time that male blossom searching search may consume. | ||||
| 							-- As searching a large area (radius: dates_pollination_distance/3 per attempt) can cause lag, | ||||
| 							-- this limits the search frequency server-wide so that the impact on server lag is minimised | ||||
| 							-- For personal servers, this can be set lower, or even to 1 or 0 (0 disables load limiting). | ||||
| 							-- Obtain the current average search time using /dates_stats | ||||
| moretrees.dates_flower_interval		= 59 | ||||
| moretrees.dates_flower_chance		= 181 | ||||
| moretrees.dates_grow_interval		= 2 * moretrees.dates_flower_interval * moretrees.dates_flower_chance | ||||
| 							-- As date palms have a high yield, don't grow dates too fast | ||||
| 							-- The actual interval will vary randomly between 67% and 133% of this value. | ||||
| 							-- 2 * 59 * 181 ~ 6 hours. So by default flowers become dates in about one (human) day. | ||||
| moretrees.dates_item_drop_ichance	= 10 		-- inverse probability of ripe dates dropping as items (instead of disappearing) | ||||
|  | ||||
| -- Sapling settings | ||||
|  | ||||
| moretrees.sapling_interval		= 100 | ||||
| moretrees.sapling_chance		= 5 | ||||
|  | ||||
| -- If this variable is set to true, drop leaves out as entities during leaf | ||||
| -- decay, rather than just disappearing them. | ||||
|  | ||||
| moretrees.decay_leaves_as_items = false | ||||
							
								
								
									
										291
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										291
									
								
								init.lua
									
									
									
									
									
								
							| @@ -15,37 +15,41 @@ | ||||
|  | ||||
| moretrees = {} | ||||
|  | ||||
| minetest.override_item("default:sapling", { | ||||
| 	description = "Sapling" | ||||
| }) | ||||
| local S = minetest.get_translator("moretrees") | ||||
|  | ||||
| minetest.override_item("default:tree", { | ||||
| 	description = "Tree" | ||||
| }) | ||||
| if minetest.get_modpath("default") then | ||||
| 	minetest.override_item("default:sapling", { | ||||
| 		description = S("Sapling") | ||||
| 	}) | ||||
|  | ||||
| minetest.override_item("default:wood", { | ||||
| 	description = "Wooden Planks" | ||||
| }) | ||||
| 	minetest.override_item("default:tree", { | ||||
| 		description = S("Tree") | ||||
| 	}) | ||||
|  | ||||
| minetest.override_item("default:leaves", { | ||||
| 	description = "Leaves" | ||||
| }) | ||||
| 	minetest.override_item("default:wood", { | ||||
| 		description = S("Wooden Planks") | ||||
| 	}) | ||||
|  | ||||
| minetest.override_item("default:fence_wood", { | ||||
| 	description = "Wooden Fence" | ||||
| }) | ||||
| 	minetest.override_item("default:leaves", { | ||||
| 		description = S("Leaves") | ||||
| 	}) | ||||
|  | ||||
| minetest.override_item("default:fence_rail_wood", { | ||||
| 	description = "Wooden Fence Rail" | ||||
| }) | ||||
| 	minetest.override_item("default:fence_wood", { | ||||
| 		description = S("Wooden Fence") | ||||
| 	}) | ||||
|  | ||||
| 	minetest.override_item("default:fence_rail_wood", { | ||||
| 		description = S("Wooden Fence Rail") | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| if minetest.get_modpath("doors") then | ||||
| 	minetest.override_item("doors:gate_wood_closed", { | ||||
| 		description = "Wooden Fence Gate" | ||||
| 		description = S("Wooden Fence Gate") | ||||
| 	}) | ||||
|  | ||||
| 	minetest.override_item("doors:gate_wood_open", { | ||||
| 		description = "Wooden Fence Gate" | ||||
| 		description = S("Wooden Fence Gate") | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| @@ -55,13 +59,27 @@ end | ||||
| local worldpath=minetest.get_worldpath() | ||||
| local modpath=minetest.get_modpath("moretrees") | ||||
|  | ||||
| dofile(modpath.."/default_settings.txt") | ||||
| dofile(modpath.."/settings.lua") | ||||
|  | ||||
| if io.open(worldpath.."/moretrees_settings.txt","r") then | ||||
| 	io.close() | ||||
| 	dofile(worldpath.."/moretrees_settings.txt") | ||||
| end | ||||
|  | ||||
| -- Validate that if ethereal exists, that it's version is greater than 20220424. | ||||
| -- Lower versions of ethereal clear registered biomes and decorations during | ||||
| -- initialization which results in lost content from this mod (and others) | ||||
| -- depending on where they are in the mod load order. | ||||
| minetest.register_on_mods_loaded(function() | ||||
| 	if minetest.global_exists("ethereal") then | ||||
| 		local ethereal_ver = tonumber(ethereal.version) | ||||
| 		if (ethereal_ver and ethereal_ver < 20220424) then | ||||
| 			error("[moretrees] The version of ethereal detected can result " .. | ||||
| 				  "in parts of this mod and others disappearing due to mod " .. | ||||
| 				  "load order. Please update ethereal."); | ||||
| 		end | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| -- infinite stacks checking | ||||
|  | ||||
| @@ -75,10 +93,10 @@ end | ||||
| -- tables, load other files | ||||
|  | ||||
| moretrees.cutting_tools = { | ||||
| 	"default:axe_bronze", | ||||
| 	"default:axe_diamond", | ||||
| 	"default:axe_mese", | ||||
| 	"default:axe_steel", | ||||
| 	xcompat.materials.axe_steel, | ||||
| 	xcompat.materials.axe_diamond, | ||||
| 	xcompat.materials.axe_bronze, | ||||
| 	"glooptest:axe_alatro", | ||||
| 	"glooptest:axe_arol", | ||||
| 	"moreores:axe_mithril", | ||||
| @@ -95,111 +113,103 @@ dofile(modpath.."/saplings.lua") | ||||
| dofile(modpath.."/crafts.lua") | ||||
|  | ||||
| -- tree spawning setup | ||||
| moretrees.spawn_beech_object = moretrees.beech_model | ||||
| moretrees.spawn_apple_tree_object = moretrees.apple_tree_model | ||||
| moretrees.spawn_oak_object = moretrees.oak_model | ||||
| moretrees.spawn_sequoia_object = moretrees.sequoia_model | ||||
| moretrees.spawn_palm_object = moretrees.palm_model | ||||
| moretrees.spawn_date_palm_object = moretrees.date_palm_model | ||||
| moretrees.spawn_cedar_object = moretrees.cedar_model | ||||
| moretrees.spawn_rubber_tree_object = moretrees.rubber_tree_model | ||||
| moretrees.spawn_willow_object = moretrees.willow_model | ||||
| moretrees.spawn_birch_object = "moretrees.grow_birch" | ||||
| moretrees.spawn_spruce_object = "moretrees.grow_spruce" | ||||
| moretrees.spawn_jungletree_object = "moretrees.grow_jungletree" | ||||
| moretrees.spawn_fir_object = "moretrees.grow_fir" | ||||
| moretrees.spawn_fir_snow_object = "moretrees.grow_fir_snow" | ||||
| moretrees.spawn_poplar_object = moretrees.poplar_model | ||||
| moretrees.spawn_poplar_small_object = moretrees.poplar_small_model | ||||
|  | ||||
| if moretrees.spawn_saplings then | ||||
| 	moretrees.spawn_beech_object = "moretrees:beech_sapling_ongen" | ||||
| 	moretrees.spawn_apple_tree_object = "moretrees:apple_tree_sapling_ongen" | ||||
| 	moretrees.spawn_oak_object = "moretrees:oak_sapling_ongen" | ||||
| 	moretrees.spawn_sequoia_object = "moretrees:sequoia_sapling_ongen" | ||||
| 	moretrees.spawn_palm_object = "moretrees:palm_sapling_ongen" | ||||
| 	moretrees.spawn_date_palm_object = "moretrees:date_palm_sapling_ongen" | ||||
| 	moretrees.spawn_cedar_object = "moretrees:cedar_sapling_ongen" | ||||
| 	moretrees.spawn_rubber_tree_object = "moretrees:rubber_tree_sapling_ongen" | ||||
| 	moretrees.spawn_willow_object = "moretrees:willow_sapling_ongen" | ||||
| 	moretrees.spawn_birch_object = "moretrees:birch_sapling_ongen" | ||||
| 	moretrees.spawn_spruce_object = "moretrees:spruce_sapling_ongen" | ||||
| 	moretrees.spawn_jungletree_object = "moretrees:jungletree_sapling_ongen" | ||||
| 	moretrees.spawn_fir_object = "moretrees:fir_sapling_ongen" | ||||
| 	moretrees.spawn_fir_snow_object = "snow:sapling_pine" | ||||
| 	moretrees.spawn_poplar_object = "moretrees:poplar_sapling_ongen" | ||||
| 	moretrees.spawn_poplar_small_object = "moretrees:poplar_small_sapling_ongen" | ||||
| else | ||||
| 	moretrees.spawn_beech_object = moretrees.beech_model | ||||
| 	moretrees.spawn_apple_tree_object = moretrees.apple_tree_model | ||||
| 	moretrees.spawn_oak_object = moretrees.oak_model | ||||
| 	moretrees.spawn_sequoia_object = moretrees.sequoia_model | ||||
| 	moretrees.spawn_palm_object = moretrees.palm_model | ||||
| 	moretrees.spawn_date_palm_object = moretrees.date_palm_model | ||||
| 	moretrees.spawn_cedar_object = moretrees.cedar_model | ||||
| 	moretrees.spawn_rubber_tree_object = moretrees.rubber_tree_model | ||||
| 	moretrees.spawn_willow_object = moretrees.willow_model | ||||
| 	moretrees.spawn_birch_object = "moretrees.grow_birch" | ||||
| 	moretrees.spawn_spruce_object = "moretrees.grow_spruce" | ||||
| 	moretrees.spawn_jungletree_object = "moretrees.grow_jungletree" | ||||
| 	moretrees.spawn_fir_object = "moretrees.grow_fir" | ||||
| 	moretrees.spawn_fir_snow_object = "moretrees.grow_fir_snow" | ||||
| 	moretrees.spawn_poplar_object = moretrees.poplar_model | ||||
| 	moretrees.spawn_poplar_small_object = moretrees.poplar_small_model | ||||
| local deco_ids = {} | ||||
|  | ||||
| function translate_biome_defs(def, treename, index) | ||||
| 	if not index then index = 1 end | ||||
| 	local deco_def = { | ||||
| 		name = treename .. "_" .. index, | ||||
| 		deco_type = "simple", | ||||
| 		place_on = def.place_on, | ||||
| 		sidelen = 16, | ||||
| 		fill_ratio = def.fill_ratio or 0.001, | ||||
| 		--biomes eventually? | ||||
| 		y_min = def.min_elevation, | ||||
| 		y_max = def.max_elevation, | ||||
| 		spawn_by = def.spawn_by, | ||||
| 		num_spawn_by = def.num_spawn_by, | ||||
| 		decoration = "moretrees:"..treename.."_sapling_ongen" | ||||
| 	} | ||||
|  | ||||
| 	deco_ids[#deco_ids+1] = treename .. ("_" .. index or "_1") | ||||
|  | ||||
| 	return deco_def | ||||
| end | ||||
|  | ||||
| if moretrees.enable_beech then | ||||
| 	biome_lib:register_generate_plant(moretrees.beech_biome, moretrees.spawn_beech_object) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.beech_biome, "beech")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.apple_tree_biome, "apple_tree")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.oak_biome, "oak")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.sequoia_biome, "sequoia")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.palm_biome, "palm")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.date_palm_biome, "date_palm", 1)) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.date_palm_biome_2, "date_palm", 2)) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.cedar_biome, "cedar")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.rubber_tree_biome, "rubber_tree")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.willow_biome, "willow")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.birch_biome, "birch")) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.spruce_biome, "spruce")) | ||||
| if minetest.get_modpath("default") then | ||||
| 	minetest.register_decoration(translate_biome_defs(moretrees.jungletree_biome, "jungletree")) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_apple_tree then | ||||
| 	biome_lib:register_generate_plant(moretrees.apple_tree_biome, moretrees.spawn_apple_tree_object) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.fir_biome, "fir", 1)) | ||||
| if minetest.get_modpath("snow") then | ||||
| 	minetest.register_decoration(translate_biome_defs(moretrees.fir_biome_snow, "fir", 2)) | ||||
| end | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.poplar_biome, "poplar", 1)) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.poplar_biome_2, "poplar", 2)) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.poplar_biome_3, "poplar", 3)) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.poplar_small_biome, "poplar_small", 4)) | ||||
| minetest.register_decoration(translate_biome_defs(moretrees.poplar_small_biome_2, "poplar_small", 5)) | ||||
|  | ||||
| if moretrees.enable_oak then | ||||
| 	biome_lib:register_generate_plant(moretrees.oak_biome, moretrees.spawn_oak_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_sequoia then | ||||
| 	biome_lib:register_generate_plant(moretrees.sequoia_biome, moretrees.spawn_sequoia_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_palm then | ||||
| 	biome_lib:register_generate_plant(moretrees.palm_biome, moretrees.spawn_palm_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_date_palm then | ||||
| 	biome_lib:register_generate_plant(moretrees.date_palm_biome, moretrees.spawn_date_palm_object) | ||||
| 	biome_lib:register_generate_plant(moretrees.date_palm_biome_2, moretrees.spawn_date_palm_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_cedar then | ||||
| 	biome_lib:register_generate_plant(moretrees.cedar_biome, moretrees.spawn_cedar_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_rubber_tree then | ||||
| 	biome_lib:register_generate_plant(moretrees.rubber_tree_biome, moretrees.spawn_rubber_tree_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_willow then | ||||
| 	biome_lib:register_generate_plant(moretrees.willow_biome, moretrees.spawn_willow_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_birch then | ||||
| 	biome_lib:register_generate_plant(moretrees.birch_biome, moretrees.spawn_birch_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_spruce then | ||||
| 	biome_lib:register_generate_plant(moretrees.spruce_biome, moretrees.spawn_spruce_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_jungle_tree then | ||||
| 	biome_lib:register_generate_plant(moretrees.jungletree_biome, moretrees.spawn_jungletree_object) | ||||
| end | ||||
|  | ||||
| if moretrees.enable_fir then | ||||
| 	biome_lib:register_generate_plant(moretrees.fir_biome, moretrees.spawn_fir_object) | ||||
| 	if minetest.get_modpath("snow") then | ||||
| 		biome_lib:register_generate_plant(moretrees.fir_biome_snow, moretrees.spawn_fir_snow_object) | ||||
| --[[ | ||||
| 	this is purposefully wrapped in a on mods loaded callback to that it gets the proper ids | ||||
| 	if other mods clear the registered decorations | ||||
| ]] | ||||
| minetest.register_on_mods_loaded(function() | ||||
| 	for k, v in pairs(deco_ids) do | ||||
| 		deco_ids[k] = minetest.get_decoration_id(v) | ||||
| 	end | ||||
| end | ||||
| 	minetest.set_gen_notify("decoration", deco_ids) | ||||
| end) | ||||
|  | ||||
| if moretrees.enable_poplar then | ||||
| 	biome_lib:register_generate_plant(moretrees.poplar_biome, moretrees.spawn_poplar_object) | ||||
| 	biome_lib:register_generate_plant(moretrees.poplar_biome_2, moretrees.spawn_poplar_object) | ||||
| 	biome_lib:register_generate_plant(moretrees.poplar_biome_3, moretrees.spawn_poplar_object) | ||||
| 	biome_lib:register_generate_plant(moretrees.poplar_small_biome, moretrees.spawn_poplar_small_object) | ||||
| 	biome_lib:register_generate_plant(moretrees.poplar_small_biome_2, moretrees.spawn_poplar_small_object) | ||||
| end | ||||
| minetest.register_on_generated(function(minp, maxp, blockseed) | ||||
|     local g = minetest.get_mapgen_object("gennotify") | ||||
|     local locations = {} | ||||
| 	for _, id in pairs(deco_ids) do | ||||
| 		local deco_locations = g["decoration#" .. id] or {} | ||||
| 		for _, pos in pairs(deco_locations) do | ||||
| 			locations[#locations+1] = pos | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
|     if #locations == 0 then return end | ||||
|     for _, pos in ipairs(locations) do | ||||
|         local timer = minetest.get_node_timer({x=pos.x, y=pos.y+1, z=pos.z}) | ||||
|         timer:start(math.random(2,10)) | ||||
|     end | ||||
| end) | ||||
|  | ||||
| -- Code to spawn a birch tree | ||||
|  | ||||
| function moretrees.grow_birch(pos) | ||||
| 	minetest.swap_node(pos, biome_lib.air) | ||||
| 	minetest.swap_node(pos, {name = "air"}) | ||||
| 	if math.random(1,2) == 1 then | ||||
| 		minetest.spawn_tree(pos, moretrees.birch_model1) | ||||
| 	else | ||||
| @@ -210,7 +220,7 @@ end | ||||
| -- Code to spawn a spruce tree | ||||
|  | ||||
| function moretrees.grow_spruce(pos) | ||||
| 	minetest.swap_node(pos, biome_lib.air) | ||||
| 	minetest.swap_node(pos, {name = "air"}) | ||||
| 	if math.random(1,2) == 1 then | ||||
| 		minetest.spawn_tree(pos, moretrees.spruce_model1) | ||||
| 	else | ||||
| @@ -225,6 +235,7 @@ moretrees.jt_rules_a1 = "FFF[&&-FBf[&&&Ff]^^^Ff][&&+FBFf[&&&FFf]^^^Ff][&&---FBFf | ||||
| moretrees.jt_rules_b1 = "[-Ff&f][+Ff&f]B" | ||||
|  | ||||
| moretrees.jt_axiom2 = "FFFFFA" | ||||
| -- luacheck: no max line length | ||||
| moretrees.jt_rules_a2 = "FFFFF[&&-FFFBF[&&&FFff]^^^FFf][&&+FFFBFF[&&&FFff]^^^FFf][&&---FFFBFF[&&&FFff]^^^FFf][&&+++FFFBFF[&&&FFff]^^^FFf]FF/A" | ||||
| moretrees.jt_rules_b2 = "[-FFf&ff][+FFf&ff]B" | ||||
|  | ||||
| @@ -264,10 +275,13 @@ function moretrees.grow_jungletree(pos) | ||||
| 		moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2 | ||||
| 	end | ||||
|  | ||||
| 	minetest.swap_node(pos, biome_lib.air) | ||||
| 	local leaves = minetest.find_nodes_in_area({x = pos.x-1, y = pos.y, z = pos.z-1}, {x = pos.x+1, y = pos.y+10, z = pos.z+1}, "default:leaves") | ||||
| 	minetest.swap_node(pos, {name = "air"}) | ||||
| 	local leaves = minetest.find_nodes_in_area( | ||||
| 		{x = pos.x-1, y = pos.y, z = pos.z-1}, {x = pos.x+1, y = pos.y+10, z = pos.z+1}, | ||||
| 		xcompat.materials.apple_leaves | ||||
| 	) | ||||
| 	for leaf in ipairs(leaves) do | ||||
| 			minetest.swap_node(leaves[leaf], biome_lib.air) | ||||
| 			minetest.swap_node(leaves[leaf], {name = "air"}) | ||||
| 	end | ||||
| 	minetest.spawn_tree(pos, moretrees.jungletree_model) | ||||
| end | ||||
| @@ -291,10 +305,14 @@ function moretrees.grow_fir(pos) | ||||
| 	moretrees.fir_model.iterations = 7 | ||||
| 	moretrees.fir_model.random_level = 5 | ||||
|  | ||||
| 	minetest.swap_node(pos, biome_lib.air) | ||||
| 	local leaves = minetest.find_nodes_in_area({x = pos.x, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y+5, z = pos.z}, "default:leaves") | ||||
| 	minetest.swap_node(pos, {name = "air"}) | ||||
| 	local leaves = minetest.find_nodes_in_area( | ||||
| 		{x = pos.x, y = pos.y, z = pos.z}, | ||||
| 		{x = pos.x, y = pos.y+5, z = pos.z}, | ||||
| 		xcompat.materials.apple_leaves | ||||
| 	) | ||||
| 	for leaf in ipairs(leaves) do | ||||
| 		minetest.swap_node(leaves[leaf], biome_lib.air) | ||||
| 		minetest.swap_node(leaves[leaf], {name = "air"}) | ||||
| 	end | ||||
| 	minetest.spawn_tree(pos,moretrees.fir_model) | ||||
| end | ||||
| @@ -318,12 +336,29 @@ function moretrees.grow_fir_snow(pos) | ||||
| 	moretrees.fir_model.iterations = 2 | ||||
| 	moretrees.fir_model.random_level = 2 | ||||
|  | ||||
| 	minetest.swap_node(pos, biome_lib.air) | ||||
| 	local leaves = minetest.find_nodes_in_area({x = pos.x, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y+5, z = pos.z}, "default:leaves") | ||||
| 	minetest.swap_node(pos, {name = "air"}) | ||||
| 	local leaves = minetest.find_nodes_in_area( | ||||
| 		{x = pos.x, y = pos.y, z = pos.z}, | ||||
| 		{x = pos.x, y = pos.y+5, z = pos.z}, | ||||
| 		xcompat.materials.apple_leaves | ||||
| 	) | ||||
| 	for leaf in ipairs(leaves) do | ||||
| 			minetest.swap_node(leaves[leaf], biome_lib.air) | ||||
| 			minetest.swap_node(leaves[leaf], {name = "air"}) | ||||
| 	end | ||||
| 	minetest.spawn_tree(pos,moretrees.fir_model) | ||||
| end | ||||
|  | ||||
| print("[Moretrees] Loaded (2013-02-11)") | ||||
| if moretrees.grow_legacy_saplings then | ||||
| 	minetest.register_lbm({ | ||||
| 		name = "moretrees:grow_ongen_saplings", | ||||
| 		label = "Grow legacy ongen saplings", | ||||
| 		nodenames = {"group:moretrees_ongen"}, | ||||
| 		run_at_every_load = true, | ||||
| 		action = function(pos) | ||||
| 			minetest.log("info", "[moretrees] Starting growth timer for legacy ongen sapling at "..minetest.pos_to_string(pos, 0)) | ||||
| 			minetest.get_node_timer(pos):start(math.random(2, 10)) | ||||
| 		end | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| minetest.log("info", "[moretrees] Loading done") | ||||
|   | ||||
| @@ -61,7 +61,7 @@ Birch Tree Fence=Birkenholz-Zaun | ||||
| Birch Tree Fence Gate=Birkenholz-Tor | ||||
| Birch Tree Fence Rail=Birkenholz-Schiene | ||||
| Birch Tree Leaves=Birkenlaub | ||||
| Birch Tree Planks=Birkebretter | ||||
| Birch Tree Planks=Birkenbretter | ||||
| Birch Tree Planks Slab=Birkenholzplatte | ||||
| Birch Tree Planks Stair=Birkeholzstufe | ||||
| Birch Tree Sapling=Birkensetzling | ||||
| @@ -209,3 +209,12 @@ Willow Tree Trunk=Weidenstamm | ||||
| Willow Tree Trunk Slab=Weidenstammplatte | ||||
| Willow Tree Trunk Stair=Weidenstammstufe | ||||
| Yellow=gelb | ||||
|  | ||||
| # init.lua | ||||
| Sapling=Setzling | ||||
| Tree=Baum | ||||
| Wooden Planks=Holzbretter | ||||
| Leaves=Blätter | ||||
| Wooden Fence=Holzzaun | ||||
| Wooden Fence Rail=Holzschiene | ||||
| Wooden Fence Gate=Holztor | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| # textdomain: moretrees | ||||
| # Translation by Carlos Barraza | ||||
| # Translation by Carlos Barraza, improvements by David Leal. | ||||
|  | ||||
|  | ||||
| ### cocos_palm.lua ### | ||||
|  | ||||
| Coconut=Coco | ||||
| Coconut Flower= | ||||
| Coconut Flower=Flor de Coco | ||||
|  | ||||
| ### crafts.lua ### | ||||
|  | ||||
| @@ -17,8 +17,8 @@ Date & nut snack=Datilera y Nueces | ||||
| Date-nut cake=Pastel de Datilera | ||||
| Date-nut cake batter=Pasta de torta de Datilera | ||||
| Date-nut energy bar=Barra energetica de Datilera | ||||
| Raw Coconut=Coco crudo | ||||
| Roasted Cedar Cone Nuts=Coco de Alamo Tostado | ||||
| Raw Coconut=Coco Crudo | ||||
| Roasted Cedar Cone Nuts=Coco de Álamo Tostado | ||||
| Roasted Fir Cone Nuts=Cono de Abeto Tostado | ||||
| Roasted Spruce Cone Nuts=Cono de Picea Tostado | ||||
|  | ||||
| @@ -30,182 +30,191 @@ Dates=Datilera | ||||
|  | ||||
| ### node_defs.lua ### | ||||
|  | ||||
| @1 (fast growth)= | ||||
| @1 (fast growth)=@1 (crecimiento rápido) | ||||
| Acorn=Bellota | ||||
| Apple Tree= | ||||
| Apple Tree Fence= | ||||
| Apple Tree Fence Gate= | ||||
| Apple Tree Fence Rail= | ||||
| Apple Tree Leaves=Hojas de Arbol de Manzana | ||||
| Apple Tree Planks=Madera de Arbol de Manzana | ||||
| Apple Tree Planks Slab= | ||||
| Apple Tree Planks Stair= | ||||
| Apple Tree Sapling=Retoño de Arbol de Manzana | ||||
| Apple Tree Trunk=Tronco de Arbol de Manzana | ||||
| Apple Tree Trunk Slab= | ||||
| Apple Tree Trunk Stair= | ||||
| Beech Tree= | ||||
| Beech Tree Fence= | ||||
| Beech Tree Fence Gate= | ||||
| Beech Tree Fence Rail= | ||||
| Apple Tree=Árbol de manzana | ||||
| Apple Tree Fence=Valla de manzano | ||||
| Apple Tree Fence Gate=Puerta de Valla de Manzano | ||||
| Apple Tree Fence Rail=Riel de Valla de Manzano | ||||
| Apple Tree Leaves=Hojas de Árbol de Manzana | ||||
| Apple Tree Planks=Madera de Árbol de Manzana | ||||
| Apple Tree Planks Slab=Losa de Tablones de Manzano | ||||
| Apple Tree Planks Stair=Escalera de Tablones de Manzano | ||||
| Apple Tree Sapling=Retoño de Árbol de Manzana | ||||
| Apple Tree Trunk=Tronco de Árbol de Manzana | ||||
| Apple Tree Trunk Slab=Losa de Tronco de Manzano | ||||
| Apple Tree Trunk Stair=Escalera de Tronco de Manzano | ||||
| Beech Tree=Haya | ||||
| Beech Tree Fence=Valla de Haya | ||||
| Beech Tree Fence Gate=Puerta de Valla de Haya | ||||
| Beech Tree Fence Rail=Riel de Valla de Haya | ||||
| Beech Tree Leaves=Hojas de Arbol de Haya | ||||
| Beech Tree Planks=Madera de Arbol de Haya | ||||
| Beech Tree Planks Slab= | ||||
| Beech Tree Planks Stair= | ||||
| Beech Tree Sapling=Retoño de Arbol de Haya | ||||
| Beech Tree Trunk=Tronco de Arbol de Haya | ||||
| Beech Tree Trunk Slab= | ||||
| Beech Tree Trunk Stair= | ||||
| Birch Tree= | ||||
| Birch Tree Fence= | ||||
| Birch Tree Fence Gate= | ||||
| Birch Tree Fence Rail= | ||||
| Beech Tree Planks Slab=Losa de Tablones de Haya | ||||
| Beech Tree Planks Stair=Escalera de Tablones de Haya | ||||
| Beech Tree Sapling=Retoño de Árbol de Haya | ||||
| Beech Tree Trunk=Tronco de Árbol de Haya | ||||
| Beech Tree Trunk Slab=Losa de Tronco de Haya | ||||
| Beech Tree Trunk Stair=Escalera de Tronco de Haya | ||||
| Birch Tree=Abedul | ||||
| Birch Tree Fence=Valla de Abedul | ||||
| Birch Tree Fence Gate=Puerta de Valla de Abedul | ||||
| Birch Tree Fence Rail=Riel de Valla de Abedul | ||||
| Birch Tree Leaves=Hojas de Arbol de Abedul | ||||
| Birch Tree Planks=Madera de Arbol de Abedul | ||||
| Birch Tree Planks Slab= | ||||
| Birch Tree Planks Stair= | ||||
| Birch Tree Sapling=Retoño de Arbol de Abedul | ||||
| Birch Tree Trunk=Tronco de Arbol de Abedul | ||||
| Birch Tree Trunk Slab= | ||||
| Birch Tree Trunk Stair= | ||||
| Cedar Cone=Coco de Alamo | ||||
| Cedar Tree= | ||||
| Cedar Tree Fence= | ||||
| Cedar Tree Fence Gate= | ||||
| Cedar Tree Fence Rail= | ||||
| Cedar Tree Leaves=Hojas de Arbol de Cedro | ||||
| Cedar Tree Planks=Madera de Arbol de Cedro | ||||
| Cedar Tree Planks Slab= | ||||
| Cedar Tree Planks Stair= | ||||
| Cedar Tree Sapling=Retoño de Arbol de Cedro | ||||
| Cedar Tree Trunk=Tronco de Arbol de Cedro | ||||
| Cedar Tree Trunk Slab= | ||||
| Cedar Tree Trunk Stair= | ||||
| Date Palm Tree= | ||||
| Date Palm Tree Fence= | ||||
| Date Palm Tree Fence Gate= | ||||
| Date Palm Tree Fence Rail= | ||||
| Date Palm Tree Leaves= | ||||
| Birch Tree Planks Slab=Losa de Tablones de Abedul | ||||
| Birch Tree Planks Stair=Escalera de Tablones de Abedul | ||||
| Birch Tree Sapling=Retoño de Árbol de Abedul | ||||
| Birch Tree Trunk=Tronco de Árbol de Abedul | ||||
| Birch Tree Trunk Slab=Losa de Tronco de Abedul | ||||
| Birch Tree Trunk Stair=Escalera de Tronco de Abedul | ||||
| Cedar Cone=Coco de Álamo | ||||
| Cedar Tree=Árbol de Cedro | ||||
| Cedar Tree Fence=Valla de Árbol de Cedro | ||||
| Cedar Tree Fence Gate=Puerta de Valla de Árbol de Cedro | ||||
| Cedar Tree Fence Rail=Riel de Valla de Árbol de Cedro | ||||
| Cedar Tree Leaves=Hojas de Árbol de Cedro | ||||
| Cedar Tree Planks=Madera de Árbol de Cedro | ||||
| Cedar Tree Planks Slab=Losa de Tablones de Árbol de Cedro | ||||
| Cedar Tree Planks Stair=Escalera de Tablones de Árbol de Cedro | ||||
| Cedar Tree Sapling=Retoño de Árbol de Cedro | ||||
| Cedar Tree Trunk=Tronco de Árbol de Cedro | ||||
| Cedar Tree Trunk Slab=Losa de Tronco de Árbol de Cedro | ||||
| Cedar Tree Trunk Stair=Escalera de Tronco de Árbol de Cedro | ||||
| Date Palm Tree=Palmera Datilera | ||||
| Date Palm Tree Fence=Valla de Palmera Datilera | ||||
| Date Palm Tree Fence Gate=Puerta de Valla de Palmera Datilera | ||||
| Date Palm Tree Fence Rail=Riel de Valla de Palmera Datilera | ||||
| Date Palm Tree Leaves=Hojas de Palmera Datilera | ||||
| Date Palm Tree Planks=Madera de Palmera Datilera | ||||
| Date Palm Tree Planks Slab= | ||||
| Date Palm Tree Planks Stair= | ||||
| Date Palm Tree Sapling= | ||||
| Date Palm Tree Planks Slab=Losa de Tablones de Palmera Datilera | ||||
| Date Palm Tree Planks Stair=Escalera de Tablones de Palmera Datilera | ||||
| Date Palm Tree Sapling=Retoño de Palmera Datilera | ||||
| Date Palm Tree Trunk=Tronco de Palmera Datilera | ||||
| Date Palm Tree Trunk Slab= | ||||
| Date Palm Tree Trunk Stair= | ||||
| Douglas Fir= | ||||
| Douglas Fir Fence= | ||||
| Douglas Fir Fence Gate= | ||||
| Douglas Fir Fence Rail= | ||||
| Douglas Fir Leaves=Hojas de Arbol de Abeto de Douglas | ||||
| Douglas Fir Leaves (Bright)=Hojas de Arbol de Abeto de Douglas (Brillante) | ||||
| Douglas Fir Planks=Madera de Arbol de Abeto de Douglas | ||||
| Douglas Fir Planks Slab= | ||||
| Douglas Fir Planks Stair= | ||||
| Douglas Fir Sapling=Retoño de Arbol de Abeto de Douglas | ||||
| Douglas Fir Trunk=Tronco de Arbol de Abeto de Douglas | ||||
| Douglas Fir Trunk Slab= | ||||
| Douglas Fir Trunk Stair= | ||||
| Date Palm Tree Trunk Slab=Losa de Tronco de Palmera Datilera | ||||
| Date Palm Tree Trunk Stair=Escalera de Tronco de Palmera Datilera | ||||
| Douglas Fir=Árbol de Abeto de Douglas | ||||
| Douglas Fir Fence=Valla de Árbol de Abeto de Douglas | ||||
| Douglas Fir Fence Gate=Puerta de Valla de Árbol de Abeto de Douglas | ||||
| Douglas Fir Fence Rail=Riel de Valla de Árbol de Abeto de Douglas | ||||
| Douglas Fir Leaves=Hojas de Árbol de Abeto de Douglas | ||||
| Douglas Fir Leaves (Bright)=Hojas de Árbol de Abeto de Douglas (Brillante) | ||||
| Douglas Fir Planks=Madera de Árbol de Abeto de Douglas | ||||
| Douglas Fir Planks Slab=Losa de Tablones de Árbol de Abeto de Douglas | ||||
| Douglas Fir Planks Stair=Escalera de Tablones de Árbol de Abeto de Douglas | ||||
| Douglas Fir Sapling=Retoño de Árbol de Abeto de Douglas | ||||
| Douglas Fir Trunk=Tronco de Árbol de Abeto de Douglas | ||||
| Douglas Fir Trunk Slab=Losa de Tronco de Árbol de Abeto de Douglas | ||||
| Douglas Fir Trunk Stair=Escalera de Tronco de Árbol de Abeto de Douglas | ||||
| Fir Cone=Coco de Abeto | ||||
| Giant Sequoia= | ||||
| Giant Sequoia Fence= | ||||
| Giant Sequoia Fence Gate= | ||||
| Giant Sequoia Fence Rail= | ||||
| Giant Sequoia Leaves=Hojas de Sequoia Gigante | ||||
| Giant Sequoia Planks=Madera de Sequoia Gigante | ||||
| Giant Sequoia Planks Slab= | ||||
| Giant Sequoia Planks Stair= | ||||
| Giant Sequoia Sapling=Retoño de Arbol de Sequoia Gigante | ||||
| Giant Sequoia Trunk=Tronco de Sequoia Gigante | ||||
| Giant Sequoia Trunk Slab= | ||||
| Giant Sequoia Trunk Stair= | ||||
| Jungle Tree=Tronco de Arbol de Arbol de la Selva | ||||
| Jungle Tree Fence= | ||||
| Jungle Tree Fence Gate= | ||||
| Jungle Tree Fence Rail= | ||||
| Jungle Tree Leaves=Hojas de Arbol de la Selva | ||||
| Jungle Tree Leaves (@1)=Hojas de Arbol de la Selva (@1) | ||||
| Jungle Tree Planks= | ||||
| Jungle Tree Planks Slab= | ||||
| Jungle Tree Planks Stair= | ||||
| Jungle Tree Sapling= | ||||
| Jungle Tree Trunk= | ||||
| Jungle Tree Trunk Slab= | ||||
| Jungle Tree Trunk Stair= | ||||
| Oak Tree= | ||||
| Oak Tree Fence= | ||||
| Oak Tree Fence Gate= | ||||
| Oak Tree Fence Rail= | ||||
| Oak Tree Leaves=Hojas de Arbol de Roble | ||||
| Oak Tree Planks=Madera de Arbol de Roble | ||||
| Oak Tree Planks Slab= | ||||
| Oak Tree Planks Stair= | ||||
| Oak Tree Sapling=Retoño de Arbol de Roble | ||||
| Oak Tree Trunk=Tronco de Arbol de Roble | ||||
| Oak Tree Trunk Slab= | ||||
| Oak Tree Trunk Stair= | ||||
| Palm Tree= | ||||
| Palm Tree Fence= | ||||
| Palm Tree Fence Gate= | ||||
| Palm Tree Fence Rail= | ||||
| Giant Sequoia=Secuoya Gigante | ||||
| Giant Sequoia Fence=Valla de Secuoya Gigante | ||||
| Giant Sequoia Fence Gate=Puerta de Valla de Secuoya Gigante | ||||
| Giant Sequoia Fence Rail=Riel de Valla de Secuoya Gigante | ||||
| Giant Sequoia Leaves=Hojas de Secuoya Gigante | ||||
| Giant Sequoia Planks=Madera de Secuoya Gigante | ||||
| Giant Sequoia Planks Slab=Losa de Tablones de Secuoya Gigante | ||||
| Giant Sequoia Planks Stair=Escalera de Tablones de Secuoya Gigante | ||||
| Giant Sequoia Sapling=Retoño de Árbol de Secuoya Gigante | ||||
| Giant Sequoia Trunk=Tronco de Secuoya Gigante | ||||
| Giant Sequoia Trunk Slab=Losa de Tronco de Secuoya Gigante | ||||
| Giant Sequoia Trunk Stair=Escalera de Tronco de Secuoya Gigante | ||||
| Jungle Tree=Árbol de la Selva | ||||
| Jungle Tree Fence=Valla de Árbol de la Selva | ||||
| Jungle Tree Fence Gate=Puerta de Valla de Árbol de la Selva | ||||
| Jungle Tree Fence Rail=Riel de Valla de Árbol de la Selva | ||||
| Jungle Tree Leaves=Hojas de Árbol de la Selva | ||||
| Jungle Tree Leaves (@1)=Hojas de Árbol de la Selva (@1) | ||||
| Jungle Tree Planks=Madera de Árbol de la Selva | ||||
| Jungle Tree Planks Slab=Losa de Tablones de Árbol de la Selva | ||||
| Jungle Tree Planks Stair=Escalera de Tablones de Árbol de la Selva | ||||
| Jungle Tree Sapling=Retoño de Árbol de la Selva | ||||
| Jungle Tree Trunk=Tronco de Árbol de Árbol de la Selva | ||||
| Jungle Tree Trunk Slab=Losa de Tronco de Árbol de la Selva | ||||
| Jungle Tree Trunk Stair=Escalera de Tronco de Árbol de la Selva | ||||
| Oak Tree=Árbol de Roble | ||||
| Oak Tree Fence=Valla de Árbol de Roble | ||||
| Oak Tree Fence Gate=Puerta de Valla de Árbol de Roble | ||||
| Oak Tree Fence Rail=Riel de Valla de Árbol de Roble | ||||
| Oak Tree Leaves=Hojas de Árbol de Roble | ||||
| Oak Tree Planks=Madera de Árbol de Roble | ||||
| Oak Tree Planks Slab=Losa de Tablones de Árbol de Roble | ||||
| Oak Tree Planks Stair=Escalera de Tablones de Árbol de Roble | ||||
| Oak Tree Sapling=Retoño de Árbol de Roble | ||||
| Oak Tree Trunk=Tronco de Árbol de Roble | ||||
| Oak Tree Trunk Slab=Losa de Tronco de Árbol de Roble | ||||
| Oak Tree Trunk Stair=Escalera de Tronco de Árbol de Roble | ||||
| Palm Tree=Palmera | ||||
| Palm Tree Fence=Valla de Palmera | ||||
| Palm Tree Fence Gate=Puerta de Valla de Palmera | ||||
| Palm Tree Fence Rail=Riel de Valla de Palmera | ||||
| Palm Tree Leaves=Hojas de Palmera | ||||
| Palm Tree Planks=Madera de Palmera | ||||
| Palm Tree Planks Slab= | ||||
| Palm Tree Planks Stair= | ||||
| Palm Tree Planks Slab=Losa de Tablones de Palmera | ||||
| Palm Tree Planks Stair=Escalera de Tablones de Palmera | ||||
| Palm Tree Sapling=Retoño de Palmera | ||||
| Palm Tree Trunk=Tronco de Palmera | ||||
| Palm Tree Trunk Slab= | ||||
| Palm Tree Trunk Stair= | ||||
| Poplar Tree= | ||||
| Poplar Tree Fence= | ||||
| Poplar Tree Fence Gate= | ||||
| Poplar Tree Fence Rail= | ||||
| Palm Tree Trunk Slab=Losa de Troncos de Palmera | ||||
| Palm Tree Trunk Stair=Escalera de Troncos de Palmera | ||||
| Poplar Tree=Árbol de Alamo | ||||
| Poplar Tree Fence=Valla de Árbol de Alamo | ||||
| Poplar Tree Fence Gate=Puerta de Valla de Árbol de Alamo | ||||
| Poplar Tree Fence Rail=Riel de Valla de Árbol de Alamo | ||||
| Poplar Tree Leaves=Hojas de Arbol de Alamo | ||||
| Poplar Tree Planks=Madera de Arbol de Alamo | ||||
| Poplar Tree Planks Slab= | ||||
| Poplar Tree Planks Stair= | ||||
| Poplar Tree Sapling=Retoño de Arbol de Alamo | ||||
| Poplar Tree Trunk=Tronco de Arbol de Alamo | ||||
| Poplar Tree Trunk Slab= | ||||
| Poplar Tree Trunk Stair= | ||||
| Red=Roja | ||||
| Rubber Tree= | ||||
| Rubber Tree Fence= | ||||
| Rubber Tree Fence Gate= | ||||
| Rubber Tree Fence Rail= | ||||
| Rubber Tree Leaves=Hojas de Arbol de Arbol de Goma | ||||
| Rubber Tree Planks=Madera de Arbol de Arbol de Goma | ||||
| Rubber Tree Planks Slab= | ||||
| Rubber Tree Planks Stair= | ||||
| Rubber Tree Sapling=Retoño de Arbol de Arbol de Goma | ||||
| Rubber Tree Trunk=Tronco de Arbol de Arbol de Goma | ||||
| Rubber Tree Trunk (Empty)=Tronco de Arbol de Goma (Vacio) | ||||
| Rubber Tree Trunk Slab= | ||||
| Rubber Tree Trunk Stair= | ||||
| Small poplar Tree Sapling= | ||||
| Poplar Tree Planks=Madera de Árbol de Alamo | ||||
| Poplar Tree Planks Slab=Losa de Tablones de Árbol de Alamo | ||||
| Poplar Tree Planks Stair=Escalera de Tablones de Árbol de Alamo | ||||
| Poplar Tree Sapling=Retoño de Árbol de Alamo | ||||
| Poplar Tree Trunk=Tronco de Árbol de Alamo | ||||
| Poplar Tree Trunk Slab=Losa de Tronco de Árbol de Alamo | ||||
| Poplar Tree Trunk Stair=Escalera de Tronco de Árbol de Alamo | ||||
| Red=Rojo | ||||
| Rubber Tree=Árbol del Caucho | ||||
| Rubber Tree Fence=Valla de Árbol del Caucho | ||||
| Rubber Tree Fence Gate=Puerta de Valla de Árbol del Caucho | ||||
| Rubber Tree Fence Rail=Riel de Valla de Árbol del Caucho | ||||
| Rubber Tree Leaves=Hojas de Árbol de Árbol del Caucho | ||||
| Rubber Tree Planks=Madera de Árbol de Árbol del Caucho | ||||
| Rubber Tree Planks Slab=Losa de Tablones de Árbol del Caucho | ||||
| Rubber Tree Planks Stair=Escalera de Tablones de Árbol del Caucho | ||||
| Rubber Tree Sapling=Retoño de Árbol de Árbol del Caucho | ||||
| Rubber Tree Trunk=Tronco de Árbol de Árbol del Caucho | ||||
| Rubber Tree Trunk (Empty)=Tronco de Árbol del Caucho (Vacío) | ||||
| Rubber Tree Trunk Slab=Losa de Tronco de Árbol del Caucho | ||||
| Rubber Tree Trunk Stair=Escalera de Tronco de Árbol del Caucho | ||||
| Small poplar Tree Sapling=Pequeño Retoño de Álamo | ||||
| Spruce Cone=Coco de Picea | ||||
| Spruce Tree= | ||||
| Spruce Tree Fence= | ||||
| Spruce Tree Fence Gate= | ||||
| Spruce Tree Fence Rail= | ||||
| Spruce Tree Leaves=Hojas de Arbol de Abeto | ||||
| Spruce Tree Planks=Madera de Arbol de Abeto | ||||
| Spruce Tree Planks Slab= | ||||
| Spruce Tree Planks Stair= | ||||
| Spruce Tree Sapling=Retoño de Arbol de Abeto | ||||
| Spruce Tree Trunk=Tronco de Arbol de Abeto | ||||
| Spruce Tree Trunk Slab= | ||||
| Spruce Tree Trunk Stair= | ||||
| Willow Tree= | ||||
| Willow Tree Fence= | ||||
| Willow Tree Fence Gate= | ||||
| Willow Tree Fence Rail= | ||||
| Willow Tree Leaves=Hojas de Arbol de Sauce | ||||
| Willow Tree Planks=Madera de Arbol de Sauce | ||||
| Willow Tree Planks Slab= | ||||
| Willow Tree Planks Stair= | ||||
| Willow Tree Sapling=Retoño de Arbol de Sauce | ||||
| Willow Tree Trunk=Tronco de Arbol de Sauce | ||||
| Willow Tree Trunk Slab= | ||||
| Willow Tree Trunk Stair= | ||||
| Yellow=Amarilla | ||||
| Spruce Tree=Árbol de Abeto | ||||
| Spruce Tree Fence=Valla de Árbol de Abeto | ||||
| Spruce Tree Fence Gate=Puerta de Valla de Árbol de Abeto | ||||
| Spruce Tree Fence Rail=Riel de Valla de Árbol de Abeto | ||||
| Spruce Tree Leaves=Hojas de Árbol de Abeto | ||||
| Spruce Tree Planks=Madera de Árbol de Abeto | ||||
| Spruce Tree Planks Slab=Losa de Tablones de Árbol de Abeto | ||||
| Spruce Tree Planks Stair=Escalera de Tablones de Árbol de Abeto | ||||
| Spruce Tree Sapling=Retoño de Árbol de Abeto | ||||
| Spruce Tree Trunk=Tronco de Árbol de Abeto | ||||
| Spruce Tree Trunk Slab=Losa de Tronco de Árbol de Abeto | ||||
| Spruce Tree Trunk Stair=Escalera de Tronco de Árbol de Abeto | ||||
| Willow Tree=Árbol de Sauce | ||||
| Willow Tree Fence=Valla de Árbol de Sauce | ||||
| Willow Tree Fence Gate=Puerta de Valla de Árbol de Sauce | ||||
| Willow Tree Fence Rail=Riel de Valla de Árbol de Sauce | ||||
| Willow Tree Leaves=Hojas de Árbol de Sauce | ||||
| Willow Tree Planks=Madera de Árbol de Sauce | ||||
| Willow Tree Planks Slab=Losa de Tablones de Árbol de Sauce | ||||
| Willow Tree Planks Stair=Escalera de Tablones de Árbol de Sauce | ||||
| Willow Tree Sapling=Retoño de Árbol de Sauce | ||||
| Willow Tree Trunk=Tronco de Árbol de Sauce | ||||
| Willow Tree Trunk Slab=Losa de Tronco de Árbol de Sauce | ||||
| Willow Tree Trunk Stair=Escalera de Tronco de Árbol de Sauce | ||||
| Yellow=Amarillo | ||||
|  | ||||
| # init.lua | ||||
| Sapling=Retoño | ||||
| Tree=Árbol | ||||
| Wooden Planks=Tablones | ||||
| Leaves=Hojas | ||||
| Wooden Fence=Valla | ||||
| Wooden Fence Rail=Riel de Valla | ||||
| Wooden Fence Gate=Puerta de Valla | ||||
|   | ||||
| @@ -209,3 +209,12 @@ Willow Tree Trunk=Tronc d'arbre de saule | ||||
| Willow Tree Trunk Slab=Dalle en tronc de saule | ||||
| Willow Tree Trunk Stair=Escalier en tronc de saule | ||||
| Yellow=jaune | ||||
|  | ||||
| # init.lua | ||||
| Sapling=Jeune Arbre | ||||
| Tree=Arbre | ||||
| Wooden Planks=Planches | ||||
| Leaves=Feuilles | ||||
| Wooden Fence=Barrière en bois | ||||
| Wooden Fence Rail=Rail de clôture en bois | ||||
| Wooden Fence Gate=Porte de clôture en bois | ||||
|   | ||||
							
								
								
									
										219
									
								
								locale/moretrees.ru.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								locale/moretrees.ru.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,219 @@ | ||||
| # textdomain: moretrees | ||||
|  | ||||
|  | ||||
| ### cocos_palm.lua ### | ||||
|  | ||||
| Coconut=Кокос | ||||
| Coconut Flower=Цветок кокоса | ||||
|  | ||||
| ### crafts.lua ### | ||||
|  | ||||
| Acorn Muffin=Маффин с желудями | ||||
| Acorn Muffin batter=Тесто для маффина с желудями | ||||
| Coconut Milk=Кокосовое молоко | ||||
| Date=Финик | ||||
| Date & nut snack=Закуска из фиников и орехов | ||||
| Date-nut cake=Финиково-ореховый пирог | ||||
| Date-nut cake batter=Тесто для финиково-орехового пирога | ||||
| Date-nut energy bar=Финиково-ореховый батончик | ||||
| Raw Coconut=Сырой кокос | ||||
| Roasted Cedar Cone Nuts=Жареные кедровые орешки | ||||
| Roasted Fir Cone Nuts=Жареные орешки пихты | ||||
| Roasted Spruce Cone Nuts=Жареные еловые орешки | ||||
|  | ||||
| ### date_palm.lua ### | ||||
|  | ||||
| Date Flowers=Цветки фиников | ||||
| Date Stem=Стебель финика | ||||
| Dates=Финики | ||||
|  | ||||
| ### node_defs.lua ### | ||||
|  | ||||
| @1 (fast growth)=@1 (бестрый рост) | ||||
| Acorn=Желудь | ||||
| Apple Tree=Яблоня | ||||
| Apple Tree Fence=Яблоневый забор | ||||
| Apple Tree Fence Gate=Яблоневые ворота | ||||
| Apple Tree Fence Rail=Яблоневые перила | ||||
| Apple Tree Leaves=Листья яблони | ||||
| Apple Tree Planks=Яблоневые доски | ||||
| Apple Tree Planks Slab=Яблоневые доски (плита) | ||||
| Apple Tree Planks Stair=Яблоневые доски (ступени) | ||||
| Apple Tree Sapling=Саженец яблони | ||||
| Apple Tree Trunk=Ствол яблони | ||||
| Apple Tree Trunk Slab=Ствол яблони (плита) | ||||
| Apple Tree Trunk Stair=Ствол яблони (ступени) | ||||
| Beech Tree=Бук | ||||
| Beech Tree Fence=Забор из бука | ||||
| Beech Tree Fence Gate=Ворота из бука | ||||
| Beech Tree Fence Rail=Перила из бука | ||||
| Beech Tree Leaves=Листья бука | ||||
| Beech Tree Planks=Доски из бука | ||||
| Beech Tree Planks Slab=Доски из бука (плита) | ||||
| Beech Tree Planks Stair=Доски из бука (ступени) | ||||
| Beech Tree Sapling=Саженец бука | ||||
| Beech Tree Trunk=Ствол бука | ||||
| Beech Tree Trunk Slab=Ствол бука (плита) | ||||
| Beech Tree Trunk Stair=Ствол бука (ступени) | ||||
| Birch Tree=Береза | ||||
| Birch Tree Fence=Березовый забор | ||||
| Birch Tree Fence Gate=Березовые ворота | ||||
| Birch Tree Fence Rail=Березовые перила | ||||
| Birch Tree Leaves=Березовые листья | ||||
| Birch Tree Planks=Березовые доски | ||||
| Birch Tree Planks Slab=Березовые доски (плита) | ||||
| Birch Tree Planks Stair=Березовые доски (ступени) | ||||
| Birch Tree Sapling=Саженец березы | ||||
| Birch Tree Trunk=Ствол березы | ||||
| Birch Tree Trunk Slab=Ствол березы (плита) | ||||
| Birch Tree Trunk Stair=Ствол березы (ступени) | ||||
| Cedar Cone=Кедровая шишка | ||||
| Cedar Tree=Кедр | ||||
| Cedar Tree Fence=Забор из кедра | ||||
| Cedar Tree Fence Gate=Ворота из кедра | ||||
| Cedar Tree Fence Rail=Перила из кедра | ||||
| Cedar Tree Leaves=Кедровая хвоя | ||||
| Cedar Tree Planks=Доски из кедра | ||||
| Cedar Tree Planks Slab=Доски из кедра (плита) | ||||
| Cedar Tree Planks Stair=Доски из кедра (ступени) | ||||
| Cedar Tree Sapling=Саженец кедра | ||||
| Cedar Tree Trunk=Ствол кедра | ||||
| Cedar Tree Trunk Slab=Ствол кедра (плита) | ||||
| Cedar Tree Trunk Stair=Ствол кедра (ступени) | ||||
| Date Palm Tree=Финиковая пальма | ||||
| Date Palm Tree Fence=Забор из финиковой пальмы | ||||
| Date Palm Tree Fence Gate=Ворота из финиковой пальмы | ||||
| Date Palm Tree Fence Rail=Перила из финиковой пальмы | ||||
| Date Palm Tree Leaves=Листья финиковой пальмы | ||||
| Date Palm Tree Planks=Доски из финиковой пальмы | ||||
| Date Palm Tree Planks Slab=Доски из финиковой пальмы (плита) | ||||
| Date Palm Tree Planks Stair=Доски из финиковой пальмы (ступени) | ||||
| Date Palm Tree Sapling=Саженец финиковой пальмы | ||||
| Date Palm Tree Trunk=Ствол финиковой пальмы | ||||
| Date Palm Tree Trunk Slab=Ствол финиковой пальмы (плита) | ||||
| Date Palm Tree Trunk Stair=Ствол финиковой пальмы (ступени) | ||||
| Douglas Fir=Дугласова пихта | ||||
| Douglas Fir Fence=Забор из дугласовой пихты | ||||
| Douglas Fir Fence Gate=Ворота из дугласовой пихты | ||||
| Douglas Fir Fence Rail=Перила из дугласовой пихты | ||||
| Douglas Fir Leaves=Хвоя дугласовой пихты | ||||
| Douglas Fir Leaves (Bright)=Листья дугласовой пихты (яркие) | ||||
| Douglas Fir Planks=Доски из дугласовой пихты | ||||
| Douglas Fir Planks Slab=Доски из дугласовой пихты (плита) | ||||
| Douglas Fir Planks Stair=Доски из дугласовой пихты (ступени) | ||||
| Douglas Fir Sapling=Саженец дугласовой пихты | ||||
| Douglas Fir Trunk=Ствол дугласовой пихты | ||||
| Douglas Fir Trunk Slab=Ствол дугласовой пихты (плита) | ||||
| Douglas Fir Trunk Stair=Ствол дугласовой пихты (ступени) | ||||
| Fir Cone=Пихтовая шишка | ||||
| Giant Sequoia=Гигантская секвойя | ||||
| Giant Sequoia Fence=Забор из гигантской секвойи | ||||
| Giant Sequoia Fence Gate=Ворота из гигантской секвойи | ||||
| Giant Sequoia Fence Rail=Перила из гигантской секвойи | ||||
| Giant Sequoia Leaves=Хвоя гигантской секвойи | ||||
| Giant Sequoia Planks=Доски из гигантской секвойи | ||||
| Giant Sequoia Planks Slab=Доски из гигантской секвойи (плита) | ||||
| Giant Sequoia Planks Stair=Доски из гигантской секвойи (ступени) | ||||
| Giant Sequoia Sapling=Саженец гигантской секвойи | ||||
| Giant Sequoia Trunk=Ствол гигантской секвойи | ||||
| Giant Sequoia Trunk Slab=Ствол гигантской секвойи (плита) | ||||
| Giant Sequoia Trunk Stair=Ствол гигантской секвойи (ступени) | ||||
| Jungle Tree=Тропическое дерево | ||||
| Jungle Tree Fence=Забор из тропического дерева | ||||
| Jungle Tree Fence Gate=Ворота из тропического дерева | ||||
| Jungle Tree Fence Rail=Перила из тропического дерева | ||||
| Jungle Tree Leaves=Листья тропического дерева | ||||
| Jungle Tree Leaves (@1)=Листья тропического дерева (@1) | ||||
| Jungle Tree Planks=Доски из тропического дерева | ||||
| Jungle Tree Planks Slab=Доски из тропического дерева (плита) | ||||
| Jungle Tree Planks Stair=Доски из тропического дерева (ступени) | ||||
| Jungle Tree Sapling=Саженец тропического дерева | ||||
| Jungle Tree Trunk=Ствол тропического дерева | ||||
| Jungle Tree Trunk Slab=Ствол тропического дерева (плита) | ||||
| Jungle Tree Trunk Stair=Ствол тропического дерева (ступени) | ||||
| Oak Tree=Дуб | ||||
| Oak Tree Fence=Дубовый забор | ||||
| Oak Tree Fence Gate=Дубовые ворота | ||||
| Oak Tree Fence Rail=Дубовые перила | ||||
| Oak Tree Leaves=Листья дуба | ||||
| Oak Tree Planks=Дубовые доски | ||||
| Oak Tree Planks Slab=Дубовые доски (плита) | ||||
| Oak Tree Planks Stair=Дубовые доски (ступени) | ||||
| Oak Tree Sapling=Саженец дуба | ||||
| Oak Tree Trunk=Ствол дуба | ||||
| Oak Tree Trunk Slab=Ствол дуба (плита) | ||||
| Oak Tree Trunk Stair=Ствол дуба (ступени) | ||||
| Palm Tree=Пальма | ||||
| Palm Tree Fence=Пальмовый забор | ||||
| Palm Tree Fence Gate=Пальмовые ворота | ||||
| Palm Tree Fence Rail=Пальмовые перила | ||||
| Palm Tree Leaves=Листья пальмы | ||||
| Palm Tree Planks=Пальмовые доски | ||||
| Palm Tree Planks Slab=Пальмовые доски (плита) | ||||
| Palm Tree Planks Stair=Пальмовые доски (ступени) | ||||
| Palm Tree Sapling=Саженец пальмы | ||||
| Palm Tree Trunk=Ствол пальмы | ||||
| Palm Tree Trunk Slab=Ствол пальмы (плита) | ||||
| Palm Tree Trunk Stair=Ствол пальмы (ступени) | ||||
| Poplar Tree=Тополь | ||||
| Poplar Tree Fence=Забор из тополя | ||||
| Poplar Tree Fence Gate=Ворота из тополя | ||||
| Poplar Tree Fence Rail=Перила из тополя | ||||
| Poplar Tree Leaves=Листья тополя | ||||
| Poplar Tree Planks=Доски из тополя | ||||
| Poplar Tree Planks Slab=Доски из тополя (плита) | ||||
| Poplar Tree Planks Stair=Доски из тополя (ступени) | ||||
| Poplar Tree Sapling=Саженец тополя | ||||
| Poplar Tree Trunk=Ствол тополя | ||||
| Poplar Tree Trunk Slab=Ствол тополя (плита) | ||||
| Poplar Tree Trunk Stair=Ствол тополя (ступени) | ||||
| Red=красные | ||||
| Rubber Tree=Каучуковое дерево | ||||
| Rubber Tree Fence=Забор из каучукового дерева | ||||
| Rubber Tree Fence Gate=Ворота из каучукового дерева | ||||
| Rubber Tree Fence Rail=Перила из каучукового дерева | ||||
| Rubber Tree Leaves=Листья каучукового дерева | ||||
| Rubber Tree Planks=Доски из каучукового дерева | ||||
| Rubber Tree Planks Slab=Доски из каучукового дерева (плита) | ||||
| Rubber Tree Planks Stair=Доски из каучукового дерева (ступени) | ||||
| Rubber Tree Sapling=Саженец каучукового дерева | ||||
| Rubber Tree Trunk=Ствол каучукового дерева | ||||
| Rubber Tree Trunk (Empty)=Ствол каучукового дерева (пусто) | ||||
| Rubber Tree Trunk Slab=Ствол каучукового дерева (плита) | ||||
| Rubber Tree Trunk Stair=Ствол каучукового дерева (ступени) | ||||
| Small poplar Tree Sapling=Малы саженец тополя | ||||
| Spruce Cone=Еловая шишка | ||||
| Spruce Tree=Ель | ||||
| Spruce Tree Fence=Еловый забор | ||||
| Spruce Tree Fence Gate=Еловые ворота | ||||
| Spruce Tree Fence Rail=Еловые перила | ||||
| Spruce Tree Leaves=Еловая хвоя | ||||
| Spruce Tree Planks=Еловые доски | ||||
| Spruce Tree Planks Slab=Еловые доски (плита) | ||||
| Spruce Tree Planks Stair=Еловые доски (ступени) | ||||
| Spruce Tree Sapling=Саженец ели | ||||
| Spruce Tree Trunk=Ствол ели | ||||
| Spruce Tree Trunk Slab=Ствол ели (плита) | ||||
| Spruce Tree Trunk Stair=Ствол ели (ступени) | ||||
| Willow Tree=Ива | ||||
| Willow Tree Fence=Ивовый забор | ||||
| Willow Tree Fence Gate=Ивовые ворота | ||||
| Willow Tree Fence Rail=Ивовые перила | ||||
| Willow Tree Leaves=Листья ивы | ||||
| Willow Tree Planks=Ивовые доски | ||||
| Willow Tree Planks Slab=Ивовые доски (плита) | ||||
| Willow Tree Planks Stair=Ивовые доски (ступени) | ||||
| Willow Tree Sapling=Саженец ивы | ||||
| Willow Tree Trunk=Ствол ивы | ||||
| Willow Tree Trunk Slab=Ствол ивы (плита) | ||||
| Willow Tree Trunk Stair=Ствол ивы (ступени) | ||||
| Yellow=желтые | ||||
|  | ||||
| # init.lua | ||||
| Sapling=Саженец | ||||
| Tree=Дерево | ||||
| Wooden Planks=Деревянные доски | ||||
| Leaves=Листья | ||||
| Wooden Fence=Деревянный забор | ||||
| Wooden Fence Rail=Деревянные перила | ||||
| Wooden Fence Gate=Деревянные ворота | ||||
| @@ -208,3 +208,12 @@ Willow Tree Trunk= | ||||
| Willow Tree Trunk Slab= | ||||
| Willow Tree Trunk Stair= | ||||
| Yellow= | ||||
|  | ||||
| # init.lua | ||||
| Sapling= | ||||
| Tree= | ||||
| Wooden Planks= | ||||
| Leaves= | ||||
| Wooden Fence= | ||||
| Wooden Fence Rail= | ||||
| Wooden Fence Gate= | ||||
|   | ||||
							
								
								
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| name = moretrees | ||||
| depends = default, biome_lib, vessels | ||||
| optional_depends = doors, stairs, moreblocks, farming | ||||
| depends = xcompat | ||||
| optional_depends = doors, stairs, moreblocks, farming, default, vessels | ||||
| min_minetest_version = 5.2.0 | ||||
|   | ||||
							
								
								
									
										359
									
								
								node_defs.lua
									
									
									
									
									
								
							
							
						
						
									
										359
									
								
								node_defs.lua
									
									
									
									
									
								
							| @@ -2,22 +2,25 @@ local S = minetest.get_translator("moretrees") | ||||
|  | ||||
| moretrees.avoidnodes = {} | ||||
|  | ||||
| local jungle_sapling_texture = minetest.get_modpath("default") and "default_junglesapling.png" | ||||
| 	or "moretrees_cedar_sapling.png" | ||||
|  | ||||
| moretrees.treelist = { | ||||
| 	{"beech",        S("Beech Tree")}, | ||||
| 	{"apple_tree",   S("Apple Tree")}, | ||||
| 	{"oak",          S("Oak Tree"),       "acorn",                 S("Acorn"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, | ||||
| 	{"oak",          S("Oak Tree"),       "acorn",                S("Acorn"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, | ||||
| 	{"sequoia",      S("Giant Sequoia")}, | ||||
| 	{"birch",        S("Birch Tree")}, | ||||
| 	{"palm",         S("Palm Tree"),      "palm_fruit_trunk_gen",  S("Palm Tree"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 1.0 }, | ||||
| 	{"date_palm",    S("Date Palm Tree"), "date_palm_fruit_trunk", S("Date Palm Tree"), {0, 0, 0, 0, 0, 0}, 0.0 }, | ||||
| 	{"spruce",       S("Spruce Tree"),    "spruce_cone",           S("Spruce Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, | ||||
| 	{"cedar",        S("Cedar Tree"),     "cedar_cone",            S("Cedar Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, | ||||
| 	{"palm",         S("Palm Tree"),      "palm_fruit_trunk_gen", S("Palm Tree"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 1.0 }, | ||||
| 	{"date_palm",    S("Date Palm Tree"), "date_palm_fruit_trunk",S("Date Palm Tree"), {0, 0, 0, 0, 0, 0}, 0.0 }, | ||||
| 	{"spruce",       S("Spruce Tree"),    "spruce_cone",          S("Spruce Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, | ||||
| 	{"cedar",        S("Cedar Tree"),     "cedar_cone",           S("Cedar Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, | ||||
| 	{"poplar",       S("Poplar Tree")}, | ||||
| 	{"poplar_small", S("Poplar Tree")}, | ||||
| 	{"willow",       S("Willow Tree")}, | ||||
| 	{"rubber_tree",  S("Rubber Tree")}, | ||||
| 	{"fir",          S("Douglas Fir"),    "fir_cone",              S("Fir Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, | ||||
| 	{"jungletree",   S("Jungle Tree"),     nil,                    nil, nil, nil, "default_junglesapling.png"  }, | ||||
| 	{"fir",          S("Douglas Fir"),    "fir_cone",             S("Fir Cone"), {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 }, | ||||
| 	{"jungletree",   S("Jungle Tree"),     nil,                   nil, nil, nil, jungle_sapling_texture  }, | ||||
| } | ||||
|  | ||||
| moretrees.treedesc = { | ||||
| @@ -223,8 +226,8 @@ end | ||||
|  | ||||
| -- redefine default leaves to handle plantlike and/or leaf decay options | ||||
|  | ||||
| if moretrees.plantlike_leaves then | ||||
| 	minetest.override_item("default:leaves", { | ||||
| if minetest.get_modpath("default") and moretrees.plantlike_leaves then | ||||
| 	minetest.override_item(xcompat.materials.apple_leaves, { | ||||
| 		inventory_image = minetest.inventorycube("default_leaves.png"), | ||||
| 		drawtype = "plantlike", | ||||
| 		visual_scale = math.sqrt(2) | ||||
| @@ -233,8 +236,8 @@ end | ||||
|  | ||||
| -- redefine default jungle leaves for same | ||||
|  | ||||
| if moretrees.plantlike_leaves then | ||||
| 	minetest.override_item("default:jungleleaves", { | ||||
| if minetest.get_modpath("default") and moretrees.plantlike_leaves then | ||||
| 	minetest.override_item(xcompat.materials.jungle_leaves, { | ||||
| 		inventory_image = minetest.inventorycube("default_jungleleaves.png"), | ||||
| 		drawtype = "plantlike", | ||||
| 		visual_scale = math.sqrt(2) | ||||
| @@ -261,12 +264,12 @@ for i in ipairs(moretrees.treelist) do | ||||
| 		droprarity = 20 | ||||
| 		decay = moretrees.palm_leafdecay_radius | ||||
| 	elseif treename == "date_palm" then | ||||
| 		decay = moretrees.palm_leafdecay_radius | ||||
| 		decay = moretrees.date_palm_leafdecay_radius | ||||
| 	end | ||||
|  | ||||
| 	if treename ~= "jungletree"  -- the default game provides jungle tree and pine trunk/planks nodes. | ||||
| 		and treename ~= "poplar_small" | ||||
| 		and treename ~= "pine" then | ||||
| 	-- dont register planks/nodes for trees from default and small varients for trees | ||||
| 	local split_tn = treename:split("_") | ||||
| 	if treename ~= "jungletree" and treename ~= "pine" and split_tn[2]~="small" then | ||||
|  | ||||
| 		saptex = "moretrees_"..treename.."_sapling.png" | ||||
|  | ||||
| @@ -280,46 +283,19 @@ for i in ipairs(moretrees.treelist) do | ||||
| 			paramtype2 = "facedir", | ||||
| 			is_ground_content = false, | ||||
| 			groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, | ||||
| 			sounds = default.node_sound_wood_defaults(), | ||||
| 			sounds = xcompat.sounds.node_sound_wood_defaults(), | ||||
| 			on_place = minetest.rotate_node, | ||||
| 		}) | ||||
|  | ||||
| 		minetest.register_node("moretrees:"..treename.."_planks", { | ||||
| 			description = moretrees.treedesc[treename].planks, | ||||
| 			tiles = {"moretrees_"..treename.."_wood.png"}, | ||||
| 			is_ground_content = false, | ||||
| 			groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, | ||||
| 			sounds = default.node_sound_wood_defaults(), | ||||
| 		}) | ||||
|  | ||||
| 		minetest.register_node("moretrees:"..treename.."_sapling", { | ||||
| 			description = moretrees.treedesc[treename].sapling, | ||||
| 			drawtype = "plantlike", | ||||
| 			tiles = {saptex}, | ||||
| 			inventory_image = saptex, | ||||
| 			paramtype = "light", | ||||
| 			paramtype2 = "waving", | ||||
| 			walkable = false, | ||||
| 			is_ground_content = true, | ||||
| 			selection_box = { | ||||
| 				type = "fixed", | ||||
| 				fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} | ||||
| 			}, | ||||
| 			groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1}, | ||||
| 			sounds = default.node_sound_defaults(), | ||||
| 			on_place = function(itemstack, placer, pointed_thing) | ||||
| 				itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, | ||||
| 					"moretrees:" ..treename.. "_sapling", | ||||
| 					-- minp, maxp to be checked, relative to sapling pos | ||||
| 					-- minp_relative.y = 1 because sapling pos has been checked | ||||
| 					{x = -3, y = 1, z = -3}, | ||||
| 					{x = 3, y = 6, z = 3}, | ||||
| 					-- maximum interval of interior volume check | ||||
| 					4) | ||||
|  | ||||
| 				return itemstack | ||||
| 			end, | ||||
| 		}) | ||||
| 		if moretrees.enable_planks then | ||||
| 			minetest.register_node("moretrees:"..treename.."_planks", { | ||||
| 				description = moretrees.treedesc[treename].planks, | ||||
| 				tiles = {"moretrees_"..treename.."_wood.png"}, | ||||
| 				is_ground_content = false, | ||||
| 				groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, | ||||
| 				sounds = xcompat.sounds.node_sound_wood_defaults(), | ||||
| 			}) | ||||
| 		end | ||||
|  | ||||
| 		local moretrees_leaves_inventory_image = nil | ||||
| 		local moretrees_new_leaves_waving = nil | ||||
| @@ -340,7 +316,7 @@ for i in ipairs(moretrees.treelist) do | ||||
| 			paramtype = "light", | ||||
| 			is_ground_content = false, | ||||
| 			groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 1}, | ||||
| 			sounds = default.node_sound_leaves_defaults(), | ||||
| 			sounds = xcompat.sounds.node_sound_leaves_defaults(), | ||||
|  | ||||
| 			drop = { | ||||
| 				max_items = 1, | ||||
| @@ -351,27 +327,25 @@ for i in ipairs(moretrees.treelist) do | ||||
| 			}, | ||||
| 		}) | ||||
|  | ||||
| 		if moretrees.enable_stairs then | ||||
| 			if minetest.get_modpath("moreblocks") then | ||||
| 		if minetest.get_modpath("moreblocks") then | ||||
|  | ||||
| 	--			stairsplus:register_all(modname, subname, recipeitem, {fields}) | ||||
|  | ||||
| 				stairsplus:register_all( | ||||
| 					"moretrees", | ||||
| 					treename.."_trunk", | ||||
| 					"moretrees:"..treename.."_trunk", | ||||
| 					{ | ||||
| 						groups = { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2, not_in_creative_inventory=1 }, | ||||
| 						tiles =	{ | ||||
| 							"moretrees_"..treename.."_trunk_top.png", | ||||
| 							"moretrees_"..treename.."_trunk_top.png", | ||||
| 							"moretrees_"..treename.."_trunk.png" | ||||
| 						}, | ||||
| 						description = moretrees.treedesc[treename].trunk, | ||||
| 						drop = treename.."_trunk", | ||||
| 					} | ||||
| 				) | ||||
| 			stairsplus:register_all( | ||||
| 				"moretrees", | ||||
| 				treename.."_trunk", | ||||
| 				"moretrees:"..treename.."_trunk", | ||||
| 				{ | ||||
| 					groups = { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2, not_in_creative_inventory=1 }, | ||||
| 					tiles =	{ | ||||
| 						"moretrees_"..treename.."_trunk_top.png", | ||||
| 						"moretrees_"..treename.."_trunk_top.png", | ||||
| 						"moretrees_"..treename.."_trunk.png" | ||||
| 					}, | ||||
| 					description = moretrees.treedesc[treename].trunk, | ||||
| 					drop = treename.."_trunk", | ||||
| 				} | ||||
| 			) | ||||
|  | ||||
| 			if moretrees.enable_planks then | ||||
| 				stairsplus:register_all( | ||||
| 					"moretrees", | ||||
| 					treename.."_planks", | ||||
| @@ -383,20 +357,22 @@ for i in ipairs(moretrees.treelist) do | ||||
| 						drop = treename.."_planks", | ||||
| 					} | ||||
| 				) | ||||
| 			elseif minetest.get_modpath("stairs") then | ||||
| 				stairs.register_stair_and_slab( | ||||
| 					"moretrees_"..treename.."_trunk", | ||||
| 					"moretrees:"..treename.."_trunk", | ||||
| 					{ snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2 }, | ||||
| 					{	"moretrees_"..treename.."_trunk_top.png", | ||||
| 						"moretrees_"..treename.."_trunk_top.png", | ||||
| 						"moretrees_"..treename.."_trunk.png" | ||||
| 					}, | ||||
| 					moretrees.treedesc[treename].trunk_stair, | ||||
| 					moretrees.treedesc[treename].trunk_slab, | ||||
| 					default.node_sound_wood_defaults() | ||||
| 				) | ||||
| 			end | ||||
| 		elseif minetest.get_modpath("stairs") then | ||||
| 			stairs.register_stair_and_slab( | ||||
| 				"moretrees_"..treename.."_trunk", | ||||
| 				"moretrees:"..treename.."_trunk", | ||||
| 				{ snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2 }, | ||||
| 				{	"moretrees_"..treename.."_trunk_top.png", | ||||
| 					"moretrees_"..treename.."_trunk_top.png", | ||||
| 					"moretrees_"..treename.."_trunk.png" | ||||
| 				}, | ||||
| 				moretrees.treedesc[treename].trunk_stair, | ||||
| 				moretrees.treedesc[treename].trunk_slab, | ||||
| 				xcompat.sounds.node_sound_wood_defaults() | ||||
| 			) | ||||
|  | ||||
| 			if moretrees.enable_planks then | ||||
| 				stairs.register_stair_and_slab( | ||||
| 					"moretrees_"..treename.."_planks", | ||||
| 					"moretrees:"..treename.."_planks", | ||||
| @@ -404,13 +380,13 @@ for i in ipairs(moretrees.treelist) do | ||||
| 					{ "moretrees_"..treename.."_wood.png" }, | ||||
| 					moretrees.treedesc[treename].planks_stair, | ||||
| 					moretrees.treedesc[treename].planks_slab, | ||||
| 					default.node_sound_wood_defaults() | ||||
| 					xcompat.sounds.node_sound_wood_defaults() | ||||
| 				) | ||||
|  | ||||
| 			end | ||||
|  | ||||
| 		end | ||||
|  | ||||
| 		if moretrees.enable_fences then | ||||
| 		if minetest.get_modpath("default") and moretrees.enable_planks then | ||||
| 			local planks_name = "moretrees:" .. treename .. "_planks" | ||||
| 			local planks_tile = "moretrees_" .. treename .. "_wood.png" | ||||
| 			default.register_fence("moretrees:" .. treename .. "_fence", { | ||||
| @@ -422,7 +398,7 @@ for i in ipairs(moretrees.treelist) do | ||||
| 										"^default_fence_overlay.png^[makealpha:255,126,126", | ||||
| 				material = planks_name, | ||||
| 				groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, | ||||
| 				sounds = default.node_sound_wood_defaults() | ||||
| 				sounds = xcompat.sounds.node_sound_wood_defaults() | ||||
| 			}) | ||||
| 			default.register_fence_rail("moretrees:" .. treename .. "_fence_rail", { | ||||
| 				description = moretrees.treedesc[treename].fence_rail, | ||||
| @@ -433,7 +409,7 @@ for i in ipairs(moretrees.treelist) do | ||||
| 										"^default_fence_rail_overlay.png^[makealpha:255,126,126", | ||||
| 				material = planks_name, | ||||
| 				groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, | ||||
| 				sounds = default.node_sound_wood_defaults() | ||||
| 				sounds = xcompat.sounds.node_sound_wood_defaults() | ||||
| 			}) | ||||
| 			if minetest.global_exists("doors") then | ||||
| 				doors.register_fencegate("moretrees:" .. treename .. "_gate", { | ||||
| @@ -446,25 +422,30 @@ for i in ipairs(moretrees.treelist) do | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	minetest.register_node("moretrees:"..treename.."_sapling_ongen", { | ||||
| 		description = S("@1 (fast growth)", moretrees.treedesc[treename].sapling), | ||||
| 		drawtype = "plantlike", | ||||
| 		tiles = {saptex}, | ||||
| 		inventory_image = saptex, | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "waving", | ||||
| 		walkable = false, | ||||
| 		is_ground_content = true, | ||||
| 		selection_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} | ||||
| 		}, | ||||
| 		groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1}, | ||||
| 		sounds = default.node_sound_defaults(), | ||||
| 		drop = "moretrees:"..treename.."_sapling", | ||||
| 		on_place = function(itemstack, placer, pointed_thing) | ||||
| 				itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, | ||||
| 					"moretrees:" ..treename.. "_sapling_ongen", | ||||
| 	-- the default game provides jungle tree and pine saplings. | ||||
| 	if treename~="jungletree" and treename ~= "pine" then | ||||
| 		local regular_groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1} | ||||
| 		if minetest.settings:get_bool("creative_mode", false) then | ||||
| 			regular_groups["not_in_creative_inventory"]=1 | ||||
| 		end | ||||
|  | ||||
| 		minetest.register_node("moretrees:"..treename.."_sapling", { | ||||
| 			description = moretrees.treedesc[treename].sapling, | ||||
| 			drawtype = "plantlike", | ||||
| 			tiles = {split_tn[2] and split_tn[2]=="small" and "moretrees_" .. treename .. "_sapling.png" or saptex}, | ||||
| 			inventory_image = split_tn[2] and split_tn[2]=="small" and "moretrees_" .. treename .. "_sapling.png" or saptex, | ||||
| 			paramtype = "light", | ||||
| 			walkable = false, | ||||
| 			is_ground_content = true, | ||||
| 			selection_box = { | ||||
| 				type = "fixed", | ||||
| 				fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} | ||||
| 			}, | ||||
| 			groups = regular_groups, | ||||
| 			sounds = xcompat.sounds.node_sound_default(), | ||||
| 			on_place = function(itemstack, placer, pointed_thing) | ||||
| 				itemstack = xcompat.functions.sapling_on_place(itemstack, placer, pointed_thing, | ||||
| 					"moretrees:" ..treename.. "_sapling", | ||||
| 					-- minp, maxp to be checked, relative to sapling pos | ||||
| 					-- minp_relative.y = 1 because sapling pos has been checked | ||||
| 					{x = -3, y = 1, z = -3}, | ||||
| @@ -474,6 +455,82 @@ for i in ipairs(moretrees.treelist) do | ||||
|  | ||||
| 				return itemstack | ||||
| 			end, | ||||
| 			on_construct = function(pos) | ||||
| 				minetest.get_node_timer(pos):start(300) | ||||
| 			end, | ||||
| 			on_timer = function(pos, elapsed) | ||||
| 				if moretrees.can_grow(pos, treename) then | ||||
| 					--moretrees["grow_" .. treename](pos) | ||||
| 					minetest.set_node(pos, {name="air"}) | ||||
| 					if type(moretrees["spawn_" .. treename .. "_object"])=="string" then | ||||
| 						local split = moretrees["spawn_" .. treename .. "_object"]:split(".") | ||||
| 						moretrees[split[2]](pos) | ||||
| 					else | ||||
| 						minetest.spawn_tree(pos, moretrees["spawn_" .. treename .. "_object"]) | ||||
| 					end | ||||
| 				else | ||||
| 					minetest.get_node_timer(pos):start(300) | ||||
| 				end | ||||
| 			end, | ||||
| 		}) | ||||
| 	end | ||||
|  | ||||
| 	local ongen_groups = { | ||||
| 		snappy = 2, | ||||
| 		dig_immediate = 3, | ||||
| 		flammable = 2, | ||||
| 		attached_node = 1, | ||||
| 		sapling = 1, | ||||
| 		moretrees_ongen = 1, | ||||
| 		not_in_creative_inventory = 1 | ||||
| 	} | ||||
| 	if minetest.settings:get_bool("creative_mode", false) then | ||||
| 		ongen_groups["not_in_creative_inventory"]=nil | ||||
| 	end | ||||
| 	minetest.register_node("moretrees:"..treename.."_sapling_ongen", { | ||||
| 		description = S("@1 (fast growth)", moretrees.treedesc[treename].sapling), | ||||
| 		drawtype = "plantlike", | ||||
| 		tiles = {split_tn[2] and split_tn[2]=="small" and "moretrees_" .. treename .. "_sapling.png" or saptex,}, | ||||
| 		inventory_image = split_tn[2] and split_tn[2]=="small" and "moretrees_" .. treename .. "_sapling.png" or saptex, | ||||
| 		paramtype = "light", | ||||
| 		walkable = false, | ||||
| 		is_ground_content = true, | ||||
| 		selection_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} | ||||
| 		}, | ||||
| 		groups = ongen_groups, | ||||
| 		sounds = xcompat.sounds.node_sound_default(), | ||||
| 		drop = "moretrees:"..treename.."_sapling", | ||||
| 		on_place = function(itemstack, placer, pointed_thing) | ||||
| 			itemstack = xcompat.functions.sapling_on_place(itemstack, placer, pointed_thing, | ||||
| 				"moretrees:" ..treename.. "_sapling_ongen", | ||||
| 				-- minp, maxp to be checked, relative to sapling pos | ||||
| 				-- minp_relative.y = 1 because sapling pos has been checked | ||||
| 				{x = -3, y = 1, z = -3}, | ||||
| 				{x = 3, y = 6, z = 3}, | ||||
| 				-- maximum interval of interior volume check | ||||
| 				4) | ||||
|  | ||||
| 			return itemstack | ||||
| 		end, | ||||
| 		on_construct = function(pos) | ||||
| 			minetest.get_node_timer(pos):start(2) | ||||
| 		end, | ||||
| 		on_timer = function(pos, elapsed) | ||||
| 			if moretrees.can_grow(pos, treename) then | ||||
| 				--moretrees["grow_" .. treename](pos) | ||||
| 				minetest.set_node(pos, {name="air"}) | ||||
| 				if type(moretrees["spawn_" .. treename .. "_object"])=="string" then | ||||
| 					local split = moretrees["spawn_" .. treename .. "_object"]:split(".") | ||||
| 					moretrees[split[2]](pos) | ||||
| 				else | ||||
| 					minetest.spawn_tree(pos, moretrees["spawn_" .. treename .. "_object"]) | ||||
| 				end | ||||
| 			else | ||||
| 				minetest.get_node_timer(pos):start(300) | ||||
| 			end | ||||
| 		end, | ||||
| 	}) | ||||
|  | ||||
| 	local fruitname = nil | ||||
| @@ -495,13 +552,19 @@ for i in ipairs(moretrees.treelist) do | ||||
| 					fixed = selbox | ||||
| 				}, | ||||
| 			groups = {fleshy=3,dig_immediate=3,flammable=2, attached_node=1, leafdecay = 1, leafdecay_drop = 1}, | ||||
| 			sounds = default.node_sound_defaults(), | ||||
| 			sounds = xcompat.sounds.node_sound_default(), | ||||
| 			after_place_node = function(pos, placer) | ||||
| 				if placer:is_player() then | ||||
| 					minetest.set_node(pos, {name = "moretrees:"..fruit, param2 = 1}) | ||||
| 				end | ||||
| 			end | ||||
| 		}) | ||||
| 	end | ||||
|  | ||||
| 	if treename ~= "jungletree" | ||||
| 		and treename ~= "poplar_small" | ||||
| 		and treename ~= "pine" then | ||||
| 		and treename ~= "pine" | ||||
| 		and minetest.get_modpath("default") then | ||||
| 			default.register_leafdecay({ | ||||
| 				trunks = { "moretrees:"..treename.."_trunk" }, | ||||
| 				leaves = { "moretrees:"..treename.."_leaves", fruitname }, | ||||
| @@ -528,37 +591,11 @@ for i in ipairs(moretrees.treelist) do | ||||
| 	end | ||||
| end | ||||
|  | ||||
| -- Add small poplar saplings | ||||
|  | ||||
| local poplar_sapling = minetest.registered_nodes["moretrees:poplar_sapling"] | ||||
| local poplar_sapling_ongen = minetest.registered_nodes["moretrees:poplar_sapling_ongen"] | ||||
| local poplar_small_sapling = {} | ||||
| local poplar_small_sapling_ongen = {} | ||||
| for k,v in pairs(poplar_sapling) do | ||||
| 	poplar_small_sapling[k] = v | ||||
| end | ||||
| for k,v in pairs(poplar_sapling_ongen) do | ||||
| 	poplar_small_sapling_ongen[k] = v | ||||
| end | ||||
| poplar_small_sapling.tiles = {"moretrees_poplar_small_sapling.png"} | ||||
| poplar_small_sapling.inventory_image = "moretrees_poplar_small_sapling.png" | ||||
| poplar_small_sapling.is_ground_content = true | ||||
| poplar_small_sapling_ongen.tiles_ongen = {"moretrees_poplar_small_sapling.png"} | ||||
| poplar_small_sapling_ongen.inventory_image_ongen = "moretrees_poplar_small_sapling.png" | ||||
| poplar_small_sapling_ongen.drop = "moretrees:poplar_small_sapling" | ||||
| poplar_small_sapling_ongen.is_ground_content = true | ||||
|  | ||||
| minetest.register_node("moretrees:poplar_small_sapling", poplar_small_sapling) | ||||
| minetest.register_node("moretrees:poplar_small_sapling_ongen", poplar_small_sapling_ongen) | ||||
| if moretrees.spawn_saplings then | ||||
| 	table.insert(moretrees.avoidnodes, "moretrees:poplar_sapling") | ||||
| 	table.insert(moretrees.avoidnodes, "moretrees:poplar_small_sapling_ongen") | ||||
| end | ||||
|  | ||||
| -- poplar saplings leaves | ||||
| local poplar_leaves_drop = minetest.registered_nodes["moretrees:poplar_leaves"].drop | ||||
| minetest.override_item("moretrees:poplar_leaves", { | ||||
| 	drop = { | ||||
| 		max_items = poplar_leaves_drop.maxitems, | ||||
| 		max_items = poplar_leaves_drop.max_items, | ||||
| 		items = { | ||||
| 			{items = {"moretrees:poplar_sapling"}, rarity = 1.33 * poplar_leaves_drop.items[1].rarity }, | ||||
| 			{items = {"moretrees:poplar_small_sapling"}, rarity = 1.33 * poplar_leaves_drop.items[1].rarity }, | ||||
| @@ -592,29 +629,31 @@ for color = 1, #jungleleaves do | ||||
| 		paramtype = "light", | ||||
| 		is_ground_content = false, | ||||
| 		groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 }, | ||||
| 		drop = { | ||||
| 		drop = minetest.get_modpath("default") and { | ||||
| 			max_items = 1, | ||||
| 			items = { | ||||
| 				{items = {"default:junglesapling"}, rarity = 100 }, | ||||
| 				{items = {"moretrees:jungletree_leaves_"..jungleleaves[color]} } | ||||
| 			} | ||||
| 		}, | ||||
| 		sounds = default.node_sound_leaves_defaults(), | ||||
| 		} or nil, | ||||
| 		sounds = xcompat.sounds.node_sound_leaves_defaults(), | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| -- To get Moretrees to generate its own jungle trees among the default mapgen | ||||
| -- we need our own copy of that node, which moretrees will match against. | ||||
|  | ||||
| local jungle_tree = table.copy(minetest.registered_nodes["default:jungletree"]) | ||||
| jungle_tree.drop = "default:jungletree" | ||||
| minetest.register_node("moretrees:jungletree_trunk", jungle_tree) | ||||
| if minetest.get_modpath("default") then | ||||
| 	local jungle_tree = table.copy(minetest.registered_nodes["default:jungletree"]) | ||||
| 	jungle_tree.drop = "default:jungletree" | ||||
| 	minetest.register_node("moretrees:jungletree_trunk", jungle_tree) | ||||
|  | ||||
| default.register_leafdecay({ | ||||
| 	trunks = { "default:jungletree", "moretrees:jungletree_trunk" }, | ||||
| 	leaves = { "default:jungleleaves", "moretrees:jungletree_leaves_yellow", "moretrees:jungletree_leaves_red" }, | ||||
| 	radius = moretrees.leafdecay_radius, | ||||
| }) | ||||
| 	default.register_leafdecay({ | ||||
| 		trunks = { "default:jungletree", "moretrees:jungletree_trunk" }, | ||||
| 		leaves = { xcompat.materials.jungle_leaves, "moretrees:jungletree_leaves_yellow", "moretrees:jungletree_leaves_red" }, | ||||
| 		radius = moretrees.leafdecay_radius, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| -- Extra needles for firs | ||||
|  | ||||
| @@ -641,17 +680,19 @@ minetest.register_node("moretrees:fir_leaves_bright", { | ||||
| 			{items = {'moretrees:fir_leaves_bright'} } | ||||
| 		} | ||||
| 	}, | ||||
| 	sounds = default.node_sound_leaves_defaults() | ||||
| 	sounds = xcompat.sounds.node_sound_leaves_defaults() | ||||
| }) | ||||
|  | ||||
| default.register_leafdecay({ | ||||
| 	trunks = { "moretrees:fir_trunk" }, | ||||
| 	leaves = { "moretrees:fir_leaves", "moretrees:fir_leaves_bright" }, | ||||
| 	radius = moretrees.leafdecay_radius, | ||||
| }) | ||||
| if minetest.get_modpath("default") then | ||||
| 	default.register_leafdecay({ | ||||
| 		trunks = { "moretrees:fir_trunk" }, | ||||
| 		leaves = { "moretrees:fir_leaves", "moretrees:fir_leaves_bright" }, | ||||
| 		radius = moretrees.leafdecay_radius, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
|  | ||||
| if moretrees.enable_redefine_apple then | ||||
| if minetest.get_modpath("default") and moretrees.enable_redefine_apple then | ||||
| 	local appledef = table.copy(minetest.registered_nodes["default:apple"]) | ||||
| 	appledef.groups.attached_node = 1 | ||||
| 	minetest.register_node(":default:apple", appledef) | ||||
| @@ -679,7 +720,7 @@ minetest.register_node("moretrees:rubber_tree_trunk_empty", { | ||||
| 		"moretrees_rubber_tree_trunk_empty.png" | ||||
| 	}, | ||||
| 	groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| 	sounds = xcompat.sounds.node_sound_wood_defaults(), | ||||
| 	paramtype2 = "facedir", | ||||
| 	is_ground_content = false, | ||||
| 	on_place = minetest.rotate_node, | ||||
| @@ -725,7 +766,7 @@ minetest.register_alias("conifers:sapling",						"moretrees:fir_sapling") | ||||
| minetest.register_alias("moretrees:jungletree_sapling",			"default:junglesapling") | ||||
| minetest.register_alias("moretrees:jungletree_trunk_sideways",	"moreblocks:horizontal_jungle_tree") | ||||
| minetest.register_alias("moretrees:jungletree_planks",			"default:junglewood") | ||||
| minetest.register_alias("moretrees:jungletree_leaves_green",	"default:jungleleaves") | ||||
| minetest.register_alias("moretrees:jungletree_leaves_green",	xcompat.materials.jungle_leaves) | ||||
|  | ||||
| minetest.register_alias("moretrees:acacia_trunk",				"default:acacia_tree") | ||||
| minetest.register_alias("moretrees:acacia_planks",				"default:acacia_wood") | ||||
|   | ||||
							
								
								
									
										37
									
								
								saplings.lua
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								saplings.lua
									
									
									
									
									
								
							| @@ -5,8 +5,8 @@ | ||||
|  | ||||
| local dirt_surfaces = { | ||||
| 	set = true, | ||||
| 	["default:dirt"] = true, | ||||
| 	["default:dirt_with_grass"] = true, | ||||
| 	[xcompat.materials.dirt] = true, | ||||
| 	[xcompat.materials.dirt_with_grass] = true, | ||||
| 	["default:dirt_with_dry_grass"] = true, | ||||
| 	["default:dirt_with_coniferous_litter"] = true, | ||||
| 	["default:dirt_with_rainforest_litter"] = true, | ||||
| @@ -18,8 +18,8 @@ local dirt_surfaces = { | ||||
|  | ||||
| local conifer_surfaces =  { | ||||
| 	set = true, | ||||
| 	["default:dirt"] = true, | ||||
| 	["default:dirt_with_grass"] = true, | ||||
| 	[xcompat.materials.dirt] = true, | ||||
| 	[xcompat.materials.dirt_with_grass] = true, | ||||
| 	["default:dirt_with_dry_grass"] = true, | ||||
| 	["default:dirt_with_coniferous_litter"] = true, | ||||
| 	["default:dirt_with_rainforest_litter"] = true, | ||||
| @@ -32,14 +32,35 @@ local conifer_surfaces =  { | ||||
|  | ||||
| local sand_surfaces = { | ||||
| 	set = true, | ||||
| 	["default:sand"] = true, | ||||
| 	["default:desert_sand"] = true, | ||||
| 	[xcompat.materials.sand] = true, | ||||
| 	[xcompat.materials.desert_sand] = true, | ||||
| 	["cottages:loam"] = true, | ||||
| 	-- note, no silver sand here. | ||||
| 	-- too cold for a palm, too... well... sandy for anything else. | ||||
| } | ||||
|  | ||||
| for i in ipairs(moretrees.treelist) do | ||||
| function moretrees.can_grow(pos, treename) | ||||
| 	local surfaces | ||||
|  | ||||
| 	if treename == "spruce" | ||||
| 	  or treename == "fir" | ||||
| 	  or treename == "cedar" | ||||
| 	  or treename == "pine" then | ||||
| 		surfaces = conifer_surfaces | ||||
| 	elseif string.find(treename, "palm") then | ||||
| 		surfaces = sand_surfaces | ||||
| 	else | ||||
| 		surfaces = dirt_surfaces | ||||
| 	end | ||||
|  | ||||
| 	if surfaces[minetest.get_node(vector.new(pos.x, pos.y-1, pos.z)).name] then | ||||
| 		return true | ||||
| 	else | ||||
| 		return false | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --[[ for i in ipairs(moretrees.treelist) do | ||||
| 	local treename = moretrees.treelist[i][1] | ||||
| 	local tree_model = treename.."_model" | ||||
| 	local tree_biome = treename.."_biome" | ||||
| @@ -81,4 +102,4 @@ for i in ipairs(moretrees.treelist) do | ||||
| 		grow_nodes = surfaces, | ||||
| 		grow_function = grow_function, | ||||
| 	}) | ||||
| end | ||||
| end ]] | ||||
|   | ||||
| @@ -145,7 +145,8 @@ minetest.register_chatcommand("make-scene", { | ||||
| The following is a search/replace command suitable for vi (/vim) or sed, to convert minetest log | ||||
| messages to equivalent lua commands: | ||||
|  | ||||
| s/.*\(\(moretrees\|default\)[^ ]*\) at (\([-0-9]\+\),\([-0-9]\+\),\([-0-9]\+\)).*/\t\tminetest.place_node({x=\3, y=\4, z=\5}, {name="\1"})/ | ||||
| s/.*\(\(moretrees\|default\)[^ ]*\) at | ||||
| 	(\([-0-9]\+\),\([-0-9]\+\),\([-0-9]\+\)).*/\t\tminetest.place_node({x=\3, y=\4, z=\5}, {name="\1"})/ | ||||
|  | ||||
| E.g. a minetest log line of the following kind: | ||||
| 		2016-07-03 11:30:50: ACTION[Server]: singleplayer places node moretrees:rubber_tree_sapling at  (760,5,-223) | ||||
|   | ||||
							
								
								
									
										57
									
								
								settings.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								settings.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| local stg = minetest.settings | ||||
|  | ||||
| --spawns tree on mapgen as saplings, legacy setting | ||||
| moretrees.spawn_saplings		= stg:get_bool("moretrees.spawn_saplings", true) | ||||
|  | ||||
| --enable plantlike drawtype for leaves | ||||
| moretrees.plantlike_leaves		= stg:get_bool("moretrees.plantlike_leaves", false) | ||||
|  | ||||
| -- Enable this if you want moretrees to redefine default apples so that they | ||||
| -- fall when leaves decay/are dug. | ||||
| moretrees.enable_redefine_apple		= stg:get_bool("moretrees.enable_redefine_apple", true) | ||||
|  | ||||
| -- various related settings to configure leaf decay. | ||||
| moretrees.leafdecay_radius		= tonumber(stg:get("moretrees.leafdecay_radius")) or 5 | ||||
| moretrees.palm_leafdecay_radius		= tonumber(stg:get("moretrees.palm_leafdecay_radius")) or 10 | ||||
| moretrees.date_palm_leafdecay_radius	= tonumber(stg:get("moretrees.date_palm_leafdecay_radius")) or 14 | ||||
|  | ||||
| -- Cocos palm settings | ||||
| moretrees.coconuts_regrow		= stg:get_bool("moretrees.coconuts_regrow", true) | ||||
| moretrees.coconuts_convert_existing_palms = stg:get_bool("moretrees.coconuts_convert_existing_palms", true) | ||||
| moretrees.coconut_flower_interval	= tonumber(stg:get("moretrees.coconut_flower_interval")) or 59 | ||||
| moretrees.coconut_flower_chance		= tonumber(stg:get("moretrees.coconut_flower_chance")) or 67 | ||||
| moretrees.coconut_grow_interval		= tonumber(stg:get("moretrees.coconut_grow_interval")) or | ||||
|     2 * moretrees.coconut_flower_interval * moretrees.coconut_flower_chance | ||||
| moretrees.coconut_item_drop_ichance	= tonumber(stg:get("moretrees.coconut_item_drop_ichance")) or 10 | ||||
|  | ||||
| -- Date palm settings | ||||
| moretrees.dates_regrow_pollinated	= stg:get_bool("moretrees.dates_regrow_pollinated", true) | ||||
| moretrees.dates_regrow_unpollinated_percent	= tonumber(stg:get("moretrees.dates_regrow_unpollinated_percent")) or 0 | ||||
| moretrees.dates_female_percent		= tonumber(stg:get("moretrees.dates_female_percent")) or 57 | ||||
| moretrees.dates_pollination_distance	= tonumber(stg:get("moretrees.dates_pollination_distance")) or 120 | ||||
| moretrees.dates_blossom_search_time_treshold = tonumber(stg:get("moretrees.dates_blossom_search_time_treshold")) or 1000 | ||||
| moretrees.dates_blossom_search_iload = tonumber(stg:get("moretrees.dates_blossom_search_iload")) or 10 | ||||
| moretrees.dates_flower_interval		= tonumber(stg:get("moretrees.dates_flower_interval")) or 59 | ||||
| moretrees.dates_flower_chance		= tonumber(stg:get("moretrees.dates_flower_chance")) or 181 | ||||
| moretrees.dates_grow_interval		= tonumber(stg:get("moretrees.dates_grow_interval")) or | ||||
|     2 * moretrees.dates_flower_interval * moretrees.dates_flower_chance | ||||
| moretrees.dates_item_drop_ichance	= tonumber(stg:get("moretrees.dates_item_drop_ichance")) or 10 | ||||
|  | ||||
| -- Sapling settings | ||||
| moretrees.sapling_interval		= 100 | ||||
| moretrees.sapling_chance		= 5 | ||||
|  | ||||
| -- Enable this only if you have used an old moretrees version which was using biome_lib | ||||
| -- and when you notice large areas with ongen saplings that don't grow | ||||
| moretrees.grow_legacy_saplings	= stg:get_bool("moretrees.grow_legacy_saplings", false) | ||||
|  | ||||
| -- If this variable is set to true, drop leaves out as entities during leaf | ||||
| -- decay, rather than just disappearing them. | ||||
| moretrees.decay_leaves_as_items = stg:get_bool("moretrees.decay_leaves_as_items", false) | ||||
|  | ||||
| -- this is an internal setting for games that only have one type of planks | ||||
| if type(minetest.get_game_info) == "function" then | ||||
|     moretrees.enable_planks = minetest.get_game_info().id~="voxelgarden" | ||||
| else | ||||
|     moretrees.enable_planks = true | ||||
| end | ||||
| @@ -1,5 +1,6 @@ | ||||
| moretrees.beech_model={ | ||||
| 	axiom="FFFFFBFB", | ||||
| 	-- luacheck: no max line length | ||||
| 	rules_a="[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fd]]////[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fd]]////[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fdd]]", | ||||
| 	rules_b="[&&&F[++^Fd][--&d]//d[+^d][--&d]]////[&&&F[++^Fd][--&d]//d[+^d][--&d]]////[&&&F[++^Fd][--&Fd]//d[+^d][--&d]]", | ||||
| 	rules_c="/", | ||||
| @@ -24,8 +25,8 @@ moretrees.apple_tree_model={ | ||||
| 	random_level=0, | ||||
| 	trunk_type="single", | ||||
| 	thin_branches=true, | ||||
| 	fruit="default:apple", | ||||
| 	fruit_chance=15, | ||||
| 	fruit=minetest.get_modpath("default") and "default:apple" or nil, | ||||
| 	fruit_chance=minetest.get_modpath("default") and 15 or nil, | ||||
| } | ||||
|  | ||||
| moretrees.oak_model={ | ||||
| @@ -75,6 +76,7 @@ moretrees.poplar_small_model={ | ||||
|  | ||||
| moretrees.sequoia_model={ | ||||
| 	axiom="FFFFFFFFFFddccA///cccFddcFA///ddFcFA/cFFddFcdBddd/A/ccdcddd/ccAddddcFBcccAccFdFcFBcccc/BFdFFcFFdcccc/B", | ||||
| 	-- luacheck: no max line length | ||||
| 	rules_a="[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]////[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]////[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]", | ||||
| 	rules_b="[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]////[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]////[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]", | ||||
| 	rules_c="/", | ||||
| @@ -146,7 +148,7 @@ moretrees.palm_model={ | ||||
| -- So, a generic fruit trunk is spawned. An ABM will convert it to a male | ||||
| -- or female fruit trunk, and generate the actual dates. | ||||
| moretrees.date_palm_model={ | ||||
| 	axiom="TTTTddddddddddccccccccccRT[TGGGGT]".. | ||||
| 	axiom="TTTTddddddddddccccccccccRT[TTT]".. | ||||
| 		"ccccc[&&a]ccccc[&&a]ccccc[&&a]ccccc[&&a]ccccc[&&a]ccccc[&&a]".. | ||||
| 		"GGccccc[&a]ccccc[&a]ccccc[&a]ccccc[&a]ccccc[&a]ccccc[&a]".. | ||||
| 		"GGccccc[a]ccccc[a]ccccc[a]ccccc[a]ccccc[a]ccccc[a]", | ||||
| @@ -166,6 +168,7 @@ moretrees.date_palm_model={ | ||||
| } | ||||
|  | ||||
| moretrees.spruce_model1={ | ||||
| 	-- luacheck: no max line length | ||||
| 	axiom="FFFFFAFFFFFFBFFFFFFCFFFFFFDFFFFFF[&&&F^^FF][&&&++F^^FF][&&&++++F^^FF][&&&++++++F^^FF][&&&--F^^FF][&&&----F^^FF][FFFFf]", | ||||
| 	rules_a="[&&&FFFFFF^^FFF][&&&++FFFFFF^^FFF][&&&++++FFFFFF^^FFF][&&&++++++FFFFFF^^FFF][&&&--FFFFFF^^FFF][&&&----FFFFFF^^FFF]", | ||||
| 	rules_b="[&&&FFFFF^^FFF][&&&++FFFFF^^FFF][&&&++++FFFFF^^FFF][&&&++++++FFFFF^^FFF][&&&--FFFFF^^FFF][&&&----FFFFF^^FFF]", | ||||
| @@ -183,6 +186,7 @@ moretrees.spruce_model1={ | ||||
| } | ||||
|  | ||||
| moretrees.spruce_model2={ | ||||
| 	-- luacheck: no max line length | ||||
| 	axiom="FFFFFFBFFFFFFCFFFFFFDFFFFFF[&&&F^^FF][&&&++F^^FF][&&&++++F^^FF][&&&++++++F^^FF][&&&--F^^FF][&&&----F^^FF][FFFFf]", | ||||
| 	rules_b="[&&&FFFFF^^FFF][&&&++FFFFF^^FFF][&&&++++FFFFF^^FFF][&&&++++++FFFFF^^FFF][&&&--FFFFF^^FFF][&&&----FFFFF^^FFF]", | ||||
| 	rules_c="[&&&FFFF^^FFF][&&&++FFFF^^FFF][&&&++++FFFF^^FFF][&&&++++++FFFF^^FFF][&&&--FFFF^^FFF][&&&----FFFF^^FFF]", | ||||
| @@ -217,6 +221,7 @@ moretrees.cedar_model={ | ||||
|  | ||||
| moretrees.willow_model={ | ||||
| 	axiom="FFFFFFFFccA", | ||||
| 	-- luacheck: no max line length | ||||
| 	rules_a="[&FF&FFFF&&F&FFFFFFFdddd][**&FF&FFFF&&F&FFFFFFFdddd][//&FF&FFFF&&F&FFFFFFFdddd][////&FF&FFFF&&F&FFFFFFFdddd][//////&FF&FFFF&&F&FFFFFFFdddd][////////&FF&FFFF&&F&FFFFFFFdddd]", | ||||
| 	rules_c="/", | ||||
| 	rules_d="F", | ||||
| @@ -247,7 +252,7 @@ moretrees.jungletree_model={ | ||||
| 	rules_a=nil, | ||||
| 	rules_b=nil, | ||||
| 	trunk="moretrees:jungletree_trunk", | ||||
| 	leaves="default:jungleleaves", | ||||
| 	leaves=xcompat.materials.jungle_leaves, | ||||
| 	leaves2=nil, | ||||
| 	leaves2_chance=nil, | ||||
| 	angle=45, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user