forked from mtcontrib/plantlife_modpack
		
	Merge remote-tracking branch 'upstream/master'
This commit is contained in:
		
							
								
								
									
										13
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| name: luacheck | ||||
| on: [push, pull_request] | ||||
| jobs: | ||||
|   luacheck: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - uses: actions/checkout@master | ||||
|     - 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 ./ | ||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | ||||
| *~ | ||||
							
								
								
									
										23
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								.luacheckrc
									
									
									
									
									
								
							| @@ -1,14 +1,21 @@ | ||||
| unused_args = false | ||||
| allow_defined_top = true | ||||
| max_line_length = 185 | ||||
|  | ||||
| read_globals = { | ||||
| exclude_files = {".luacheckrc"} | ||||
|  | ||||
| globals = { | ||||
| 	"biome_lib", | ||||
| 	"DIR_DELIM", | ||||
| 	"minetest", "core", | ||||
| 	"dump", | ||||
| 	"vector", "nodeupdate", | ||||
| 	"VoxelManip", "VoxelArea", | ||||
| 	"PseudoRandom", "ItemStack", | ||||
| 	"default", | ||||
| 	"bushes_classic", | ||||
| } | ||||
|  | ||||
| read_globals = { | ||||
| 	table = {fields = {"copy"}}, | ||||
|  | ||||
| 	"minetest", "ItemStack", | ||||
| 	"vector", | ||||
|  | ||||
| 	"default", | ||||
| 	"moretrees", | ||||
| 	"dump", | ||||
| } | ||||
|   | ||||
| @@ -1,10 +1,5 @@ | ||||
| -- 3D Mushroom mod by VanessaE | ||||
|  | ||||
| mushroom = {} | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("3dmushrooms") | ||||
|  | ||||
| minetest.override_item("flowers:mushroom_fertile_brown", { | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "3dmushrooms.obj", | ||||
| @@ -68,5 +63,3 @@ minetest.register_alias("mushroom:spore1", "flowers:mushroom_spores_red") | ||||
| minetest.register_alias("mushroom:poison", "flowers:mushroom_red") | ||||
|  | ||||
| minetest.register_alias("mushroom:identifier", "default:mese_crystal_fragment") | ||||
|  | ||||
| minetest.log("info", S("[3D Mushrooms] loaded.")) | ||||
|   | ||||
| @@ -1,8 +0,0 @@ | ||||
| # textdomain: 3dmushrooms | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # reusityback, 2022. | ||||
|  | ||||
| [3D Mushrooms] loaded.=[3D Mushrooms] geladen. | ||||
| @@ -1,8 +0,0 @@ | ||||
| # textdomain: 3dmushrooms | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
|  | ||||
| [3D Mushrooms] loaded.=[3D Mushrooms] ŝargis. | ||||
| @@ -1,8 +0,0 @@ | ||||
| # textdomain: 3dmushrooms | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
|  | ||||
| [3D Mushrooms] loaded.= | ||||
| @@ -1,2 +1,2 @@ | ||||
| name = 3dmushrooms | ||||
| depends = default, flowers | ||||
| depends = flowers | ||||
|   | ||||
							
								
								
									
										217
									
								
								bushes/init.lua
									
									
									
									
									
								
							
							
						
						
									
										217
									
								
								bushes/init.lua
									
									
									
									
									
								
							| @@ -6,20 +6,11 @@ | ||||
| -- (Leaf texture created by RealBadAngel or VanessaE) | ||||
| -- Branch textures created by Neuromancer. | ||||
|  | ||||
| local random = math.random | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("bushes") | ||||
| abstract_bushes = {} | ||||
|  | ||||
| local bushes_bush_rarity = tonumber(minetest.settings:get("bushes_bush_rarity")) or 99.9 | ||||
| local bushes_bush_rarity_fertility = tonumber(minetest.settings:get("bushes_bush_rarity_fertility")) or 1.5 | ||||
| local bushes_bush_fertility = tonumber(minetest.settings:get("bushes_bush_fertility")) or -1 | ||||
|  | ||||
| local bushes_youngtrees_rarity = tonumber(minetest.settings:get("bushes_youngtrees_rarity")) or 100 | ||||
| local bushes_youngtrees_rarity_fertility = tonumber(minetest.settings:get("bushes_youngtrees_rarity_fertility")) or 0.6 | ||||
| local bushes_youngtrees_fertility = tonumber(minetest.settings:get("bushes_youngtrees_fertility")) or -0.5 | ||||
|  | ||||
| local bush_rarity = minetest.settings:get("bushes.bush_rarity") or 0.008 | ||||
| local youngtree_rarity = minetest.settings:get("youngtree.bush_rarity") or 0.006 | ||||
|  | ||||
| minetest.register_node("bushes:youngtree2_bottom", { | ||||
| 	description = S("Young Tree 2 (bottom)"), | ||||
| @@ -33,7 +24,6 @@ minetest.register_node("bushes:youngtree2_bottom", { | ||||
| 	node_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			--{0.375000,-0.500000,-0.500000,0.500000,0.500000,-0.375000}, --NodeBox 1 | ||||
| 			{-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1 | ||||
| 		} | ||||
| 	}, | ||||
| @@ -42,10 +32,10 @@ minetest.register_node("bushes:youngtree2_bottom", { | ||||
| 	drop = 'default:stick' | ||||
| }) | ||||
|  | ||||
| local BushBranchCenter			= { {1,1}, {3,2} } | ||||
| local BushBranchCenter = { {1,1}, {3,2} } | ||||
| for i in pairs(BushBranchCenter) do | ||||
| 	local Num		= BushBranchCenter[i][1] | ||||
| 	local TexNum	= BushBranchCenter[i][2] | ||||
| 	local Num = BushBranchCenter[i][1] | ||||
| 	local TexNum = BushBranchCenter[i][2] | ||||
| 	minetest.register_node("bushes:bushbranches"..Num, { | ||||
| 		description = S("Bush Branches @1", Num), | ||||
| 		drawtype = "nodebox", | ||||
| @@ -81,10 +71,10 @@ for i in pairs(BushBranchCenter) do | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| local BushBranchSide			= { {2,1}, {4,2} } | ||||
| local BushBranchSide = { {2,1}, {4,2} } | ||||
| for i in pairs(BushBranchSide) do | ||||
| 	local Num		= BushBranchSide[i][1] | ||||
| 	local TexNum	= BushBranchSide[i][2] | ||||
| 	local Num = BushBranchSide[i][1] | ||||
| 	local TexNum = BushBranchSide[i][2] | ||||
| 	minetest.register_node("bushes:bushbranches"..Num, { | ||||
| 		description = S("Bush Branches @1", Num), | ||||
| 		drawtype = "nodebox", | ||||
| @@ -126,7 +116,7 @@ for i in pairs(BushBranchSide) do | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| local BushLeafNode			= { {1}, {2}} | ||||
| local BushLeafNode = { {1}, {2}} | ||||
| for i in pairs(BushLeafNode) do | ||||
| 	local Num = BushLeafNode[i][1] | ||||
| 	minetest.register_node("bushes:BushLeaves"..Num, { | ||||
| @@ -145,33 +135,12 @@ for i in pairs(BushLeafNode) do | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| abstract_bushes.grow_bush = function(pos) | ||||
| 	local leaf_type = random(1,2) | ||||
| 	for _, pos_dir in ipairs({ | ||||
| 		{ pos = {x=pos.x+1, y=pos.y+random(0,1), z=pos.z}, | ||||
| 		  dir = 3}, | ||||
| 		{ pos = {x=pos.x-1, y=pos.y+random(0,1), z=pos.z}, | ||||
| 		  dir = 1}, | ||||
| 		{ pos = {x=pos.x, y=pos.y+random(0,1), z=pos.z+1}, | ||||
| 		  dir = 2}, | ||||
| 		{ pos = {x=pos.x, y=pos.y+random(0,1), z=pos.z-1}, | ||||
| 		  dir = 0} | ||||
| 	}) do | ||||
| 		if random(1,10) > 5 then | ||||
| 			abstract_bushes.grow_bush_node(pos_dir.pos, pos_dir.dir, leaf_type) | ||||
| 		end | ||||
| 	end | ||||
| 	abstract_bushes.grow_bush_node(pos,5,leaf_type) | ||||
| end | ||||
|  | ||||
|  | ||||
| abstract_bushes.grow_bush_node = function(pos,dir, leaf_type) | ||||
| local function grow_bush_node(pos, dir, leaf_type) | ||||
| 	local right_here = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 	local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z} | ||||
|  | ||||
| 	local bush_branch_type = 2 | ||||
|  | ||||
| 	-- MM: I'm not sure if it's slower now than before... | ||||
| 	if dir ~= 5 and leaf_type == 1 then | ||||
| 		bush_branch_type = 2 | ||||
| 	end | ||||
| @@ -187,50 +156,108 @@ abstract_bushes.grow_bush_node = function(pos,dir, leaf_type) | ||||
| 		dir = 1 | ||||
| 	end | ||||
|  | ||||
| 	if minetest.get_node(right_here).name == "air"	-- instead of check_air = true, | ||||
| 	or minetest.get_node(right_here).name == "default:junglegrass" then | ||||
| 	local nodename = minetest.get_node(right_here).name | ||||
| 	if nodename == "air" or nodename == "default:junglegrass" then -- instead of check_air = true, | ||||
| 		minetest.swap_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir}) | ||||
| 						--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")") | ||||
| 		minetest.swap_node(above_right_here, {name="bushes:BushLeaves"..leaf_type}) | ||||
| 		if random(1,10) > 5 then | ||||
| 							--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")") | ||||
| 			minetest.swap_node({x=pos.x, y=pos.y+3, z=pos.z}, {name="bushes:BushLeaves"..leaf_type}) | ||||
|  | ||||
| 		local chance_of_high_leaves = math.random(1,10) | ||||
| 		if chance_of_high_leaves > 5 then | ||||
| 			local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z} | ||||
| 			minetest.swap_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type}) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function grow_bush(pos) | ||||
| 	-- replace possible grass nodes | ||||
| 	minetest.swap_node({x=pos.x, y=pos.y+1, z=pos.z}, {name="air"}) | ||||
|  | ||||
| biome_lib.register_on_generate({ | ||||
| 		surface = { | ||||
| 			"default:dirt_with_grass", | ||||
| 			"stoneage:grass_with_silex", | ||||
| 			"sumpf:peat", | ||||
| 			"sumpf:sumpf" | ||||
| 		}, | ||||
| 		rarity = bushes_bush_rarity, | ||||
| 		rarity_fertility = bushes_bush_rarity_fertility, | ||||
| 		plantlife_limit = bushes_bush_fertility, | ||||
| 		min_elevation = 1, -- above sea level | ||||
| 	}, | ||||
| 	abstract_bushes.grow_bush | ||||
| ) | ||||
| 	local leaf_type = math.random(1,2) | ||||
| 	local bush_side_height = math.random(0,1) | ||||
|  | ||||
| abstract_bushes.grow_youngtree2 = function(pos) | ||||
| 	abstract_bushes.grow_youngtree_node2(pos, random(4,5)) | ||||
| 	local chance_of_bush_node_right = math.random(1,10) | ||||
| 	if chance_of_bush_node_right > 5 then | ||||
| 		local right_pos = {x=pos.x+1, y=pos.y+bush_side_height, z=pos.z} | ||||
| 		grow_bush_node(right_pos,3,leaf_type) | ||||
| 	end | ||||
|  | ||||
| 	local chance_of_bush_node_left = math.random(1,10) | ||||
| 	if chance_of_bush_node_left > 5 then | ||||
| 		local left_pos = {x=pos.x-1, y=pos.y+bush_side_height, z=pos.z} | ||||
| 		grow_bush_node(left_pos,1,leaf_type) | ||||
| 	end | ||||
|  | ||||
| 	local chance_of_bush_node_front = math.random(1,10) | ||||
| 	if chance_of_bush_node_front > 5 then | ||||
| 		local front_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z+1} | ||||
| 		grow_bush_node(front_pos,2,leaf_type) | ||||
| 	end | ||||
|  | ||||
| 	local chance_of_bush_node_back = math.random(1,10) | ||||
| 	if chance_of_bush_node_back > 5 then | ||||
| 		local back_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z-1} | ||||
| 		grow_bush_node(back_pos,0,leaf_type) | ||||
| 	end | ||||
|  | ||||
| 	grow_bush_node(pos,5,leaf_type) | ||||
| end | ||||
|  | ||||
| minetest.register_decoration({ | ||||
| 	name = "bushes:bush", | ||||
| 	decoration = { | ||||
| 		"air" | ||||
| 	}, | ||||
| 	fill_ratio = bush_rarity, | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"stoneage:grass_with_silex", | ||||
| 		"sumpf:peat", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| }) | ||||
|  | ||||
| abstract_bushes.grow_youngtree_node2 = function(pos, height) | ||||
| --[[ | ||||
| 	this is purposefully wrapped in a on mods loaded callback to that it gets the proper ids | ||||
| 	if other mods clear the registered decorations | ||||
| ]] | ||||
| local did | ||||
| minetest.register_on_mods_loaded(function() | ||||
| 	did = minetest.get_decoration_id("bushes:bush") | ||||
| 	minetest.set_gen_notify("decoration", {did}) | ||||
| end) | ||||
|  | ||||
| minetest.register_on_generated(function(minp, maxp, blockseed) | ||||
| 	local g = minetest.get_mapgen_object("gennotify") | ||||
| 	local locations = {} | ||||
|  | ||||
| 	local deco_locations = g["decoration#" .. did] or {} | ||||
| 	for _, pos in pairs(deco_locations) do | ||||
| 		locations[#locations+1] = pos | ||||
| 	end | ||||
|  | ||||
| 	if #locations == 0 then return end | ||||
| 	for _, pos in ipairs(locations) do | ||||
| 		grow_bush(pos) | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| local function grow_youngtree_node2(pos, height) | ||||
| 	local right_here = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 	local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z} | ||||
| 	local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z} | ||||
| 	local three_above_right_here = {x=pos.x, y=pos.y+4, z=pos.z} | ||||
|  | ||||
| 	if minetest.get_node(right_here).name == "air"	-- instead of check_air = true, | ||||
| 	or minetest.get_node(right_here).name == "default:junglegrass" then | ||||
| 	local nodename = minetest.get_node(right_here).name | ||||
| 	if nodename == "air" or nodename == "default:junglegrass" then -- instead of check_air = true, | ||||
| 		if height == 4 then | ||||
| 			local two_above_right_here_south = {x=pos.x, y=pos.y+3, z=pos.z-1} | ||||
| 			local three_above_right_here_south = {x=pos.x, y=pos.y+4, z=pos.z-1} | ||||
|  | ||||
| 			minetest.swap_node(right_here, {name="bushes:youngtree2_bottom"}) | ||||
| 			minetest.swap_node(above_right_here, {name="bushes:youngtree2_bottom"}) | ||||
| 			minetest.swap_node(two_above_right_here, {name="bushes:bushbranches2"	, param2=2}) | ||||
| @@ -241,20 +268,52 @@ abstract_bushes.grow_youngtree_node2 = function(pos, height) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function grow_youngtree2(pos) | ||||
| 	local height = math.random(4,5) | ||||
| 	grow_youngtree_node2(pos,height) | ||||
| end | ||||
|  | ||||
| biome_lib.register_on_generate({ | ||||
| 		surface = { | ||||
| 			"default:dirt_with_grass", | ||||
| 			"stoneage:grass_with_silex", | ||||
| 			"sumpf:peat", | ||||
| 			"sumpf:sumpf" | ||||
| 		}, | ||||
| 		rarity = bushes_youngtrees_rarity, | ||||
| 		rarity_fertility = bushes_youngtrees_rarity_fertility, | ||||
| 		plantlife_limit = bushes_youngtrees_fertility, | ||||
| 		min_elevation = 1, -- above sea level | ||||
| minetest.register_decoration({ | ||||
| 	name = "bushes:youngtree", | ||||
| 	decoration = { | ||||
| 		"air" | ||||
| 	}, | ||||
| 	abstract_bushes.grow_youngtree2 | ||||
| ) | ||||
| 	fill_ratio = youngtree_rarity, | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"stoneage:grass_with_silex", | ||||
| 		"sumpf:peat", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| }) | ||||
|  | ||||
| --[[ | ||||
| 	this is purposefully wrapped in a on mods loaded callback to that it gets the proper ids | ||||
| 	if other mods clear the registered decorations | ||||
| ]] | ||||
| local did2 | ||||
| minetest.register_on_mods_loaded(function() | ||||
| 	did2 = minetest.get_decoration_id("bushes:youngtree") | ||||
| 	minetest.set_gen_notify("decoration", {did2}) | ||||
| end) | ||||
|  | ||||
| minetest.register_on_generated(function(minp, maxp, blockseed) | ||||
| 	local g = minetest.get_mapgen_object("gennotify") | ||||
| 	local locations = {} | ||||
|  | ||||
| 	local deco_locations = g["decoration#" .. did2] or {} | ||||
| 	for _, pos in pairs(deco_locations) do | ||||
| 		locations[#locations+1] = pos | ||||
| 	end | ||||
|  | ||||
| 	if #locations == 0 then return end | ||||
| 	for _, pos in ipairs(locations) do | ||||
| 		grow_youngtree2(pos) | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| minetest.log("action", "[bushes] loaded.") | ||||
|   | ||||
| @@ -1,10 +1,4 @@ | ||||
| # textdomain: bushes | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
|  | ||||
| Young Tree 2 (bottom)=Strauch 2 (Ansatz) | ||||
| Bush Branches @1=Buschäste @1 | ||||
| Bush Leaves @1=Buschblätter @1 | ||||
|   | ||||
| @@ -1,10 +1,4 @@ | ||||
| # textdomain: bushes | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
|  | ||||
| Young Tree 2 (bottom)=Juna Arbo 2 (malsupro) | ||||
| Bush Branches @1=Arbustaj Branĉoj @1 | ||||
| Bush Leaves @1=Arbustaj Folioj @1 | ||||
|   | ||||
| @@ -1,11 +1,4 @@ | ||||
| # textdomain: bushes | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Young Tree 2 (bottom)=Arbuste 2 (bas) | ||||
| Bush Branches @1=Branches de buisson @1 | ||||
| Bush Leaves @1=Feuilles de buisson @1 | ||||
|   | ||||
| @@ -1,10 +1,4 @@ | ||||
| # textdomain: bushes | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
|  | ||||
| Young Tree 2 (bottom)= | ||||
| Bush Branches @1= | ||||
| Bush Leaves @1= | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| name = bushes | ||||
| depends = default, biome_lib | ||||
| optional_depends = stoneage, sumpf | ||||
| title = Bushes | ||||
| depends = default | ||||
| optional_depends = stoneage, sumpf, ebiomes | ||||
|   | ||||
| @@ -1,17 +1,5 @@ | ||||
| #Bush rarity % | ||||
| bushes_bush_rarity (Bush rarity %) float 99.9 0 100 | ||||
| # Bush rarity (higher number -> higher probability) | ||||
| bushes.bush_rarity (Bush rarity) float 0.008 0.0001 1 | ||||
|  | ||||
| #How much the rarity is reduced by fertility % | ||||
| bushes_bush_rarity_fertility (Bush rarity fertility reduction %) float 1.5 0 100 | ||||
|  | ||||
| #Bush minimum fertility (-1 to +1) | ||||
| bushes_bush_fertility (Bush minimum fertility) float -0.7 -1 1 | ||||
|  | ||||
| #Youngtree (from bushes mod) rarity % | ||||
| bushes_youngtrees_rarity (Youngtree bush rarity %) float 100 0 100 | ||||
|  | ||||
| #How much the rarity is reduced by fertility % | ||||
| bushes_youngtrees_rarity_fertility (Youngtree bush rarity fertility reduction %) float 0.6 0 100 | ||||
|  | ||||
| #Youngtree (from bushes mod) minimum fertility (-1 to +1) | ||||
| bushes_youngtrees_fertility (Youngtree bush minimum fertility) float -0.5 -1 1 | ||||
| # Youngtree rarity (higher number -> higher probability) | ||||
| bushes.youngtree_rarity (Youngtree rarity) float 0.006 0.0001 1 | ||||
|   | ||||
| @@ -33,9 +33,12 @@ end | ||||
|  | ||||
| -- override farming_plus strawberry and add food_ group | ||||
| if minetest.get_modpath("farming_plus") then | ||||
| 	local groups = table.copy(minetest.registered_items["farming_plus:strawberry_item"].groups) | ||||
| 	groups["food_strawberry"] = 1 | ||||
| 	groups["food_berry"] = 1 | ||||
|  | ||||
| 	minetest.override_item("farming_plus:strawberry_item", { | ||||
| 		groups = {food_strawberry = 1, food_berry = 1, flammable = 2}, | ||||
| 		groups = groups, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ bushes_classic = {} | ||||
| local S = minetest.get_translator("bushes_classic") | ||||
|  | ||||
| bushes_classic.bushes = { | ||||
|   "strawberry", | ||||
| 	"strawberry", | ||||
| 	"blackberry", | ||||
| 	"blueberry", | ||||
| 	"raspberry", | ||||
| @@ -30,12 +30,19 @@ local modpath = minetest.get_modpath('bushes_classic') | ||||
| dofile(modpath..'/cooking.lua') | ||||
| dofile(modpath..'/nodes.lua') | ||||
|  | ||||
| biome_lib.register_active_spawner({ | ||||
| 	spawn_delay = 3600, | ||||
| 	spawn_plants = bushes_classic.spawn_list, | ||||
| 	avoid_radius = 10, | ||||
| 	spawn_chance = 100, | ||||
| 	spawn_surfaces = { | ||||
| local spawn_plants = bushes_classic.spawn_list | ||||
|  | ||||
| local function get_biome_data(pos, perlin_fertile) | ||||
| 	local fertility = perlin_fertile:get_2d({x=pos.x, y=pos.z}) | ||||
|  | ||||
| 	local data = minetest.get_biome_data(pos) | ||||
| 	-- Original values this method returned were +1 (lowest) to -1 (highest) | ||||
| 	-- so we need to convert the 0-100 range from get_biome_data() to that. | ||||
| 	return fertility, 1 - (data.heat / 100 * 2), 1 - (data.humidity / 100 * 2) | ||||
| end | ||||
|  | ||||
| minetest.register_abm({ | ||||
| 	nodenames = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"woodsoils:dirt_with_leaves_1", | ||||
| 		"woodsoils:grass_with_leaves_1", | ||||
| @@ -43,16 +50,31 @@ biome_lib.register_active_spawner({ | ||||
| 		"farming:soil", | ||||
| 		"farming:soil_wet" | ||||
| 	}, | ||||
| 	avoid_nodes = {"group:bush"}, | ||||
| 	seed_diff = 545342534, -- chosen by a fair mashing of the keyboard - guaranteed to be random :P | ||||
| 	plantlife_limit = -0.1, | ||||
| 	light_min = 10, | ||||
| 	temp_min = 0.15, -- approx 20C | ||||
| 	temp_max = -0.15, -- approx 35C | ||||
| 	humidity_min = 0, -- 50% RH | ||||
| 	humidity_max = -1, -- 100% RH | ||||
| 	interval = 3600, | ||||
| 	chance = 100, | ||||
| 	label = "[bushes_classic] spawn bushes", | ||||
| 	min_y = -16, | ||||
| 	max_y = 48, | ||||
| 	action = function(pos, node) | ||||
| 		local p_top = {x = pos.x, y = pos.y + 1, z = pos.z} | ||||
| 		local n_top = minetest.get_node_or_nil(p_top) | ||||
| 		if not n_top or n_top.name ~= "air" then return end | ||||
|  | ||||
| 		local perlin_fertile_area = minetest.get_perlin(545342534, 3, 0.6, 100) | ||||
|  | ||||
| 		local fertility, temperature, humidity = get_biome_data(pos, perlin_fertile_area) | ||||
|  | ||||
| 		local pos_biome_ok = fertility > -0.1 and temperature <= 0.15 and temperature >= -0.15 and humidity <= 0 and humidity >= -1 | ||||
| 		if not pos_biome_ok then return end | ||||
|  | ||||
| 		if minetest.find_node_near(p_top, 10 + math.random(-1.5,2), {"group:bush"}) then | ||||
| 			return -- Nodes to avoid are nearby | ||||
| 		end | ||||
|  | ||||
| 		local plant_to_spawn = spawn_plants[math.random(1, #spawn_plants)] | ||||
|  | ||||
| 		minetest.swap_node(p_top, {name = plant_to_spawn, param2 = 0}) | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| minetest.register_alias("bushes:basket_pies", "bushes:basket_strawberry") | ||||
|  | ||||
| print("[Bushes] Loaded.") | ||||
|   | ||||
| @@ -1,46 +1,39 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Xanthin, 2017. | ||||
| # | ||||
|  | ||||
| Sugar=Zucker | ||||
| Basket with Strawberry pies=Korb mit Erdbeertorten | ||||
| Cooked Strawberry pie=Erdbeertorte | ||||
| Raw Strawberry pie=Rohe Erdbeertorte | ||||
| Slice of Strawberry pie=Erdbeertortenstueck | ||||
| Strawberry=Erdbeere | ||||
| Raw Strawberry pie=Rohe Erdbeertorte | ||||
| Cooked Strawberry pie=Erdbeertorte | ||||
| Slice of Strawberry pie=Erdbeertortenstück | ||||
| Basket with Strawberry pies=Korb mit Erdbeertorten | ||||
| Strawberry Bush=Erdbeerbusch | ||||
| Basket with Blackberry pies=Korb mit Brombeertorten | ||||
| Blackberry=Brombeere | ||||
| Blackberry Bush=Brombeerbusch | ||||
| Cooked Blackberry pie=Brombeertorte | ||||
| Raw Blackberry pie=Rohe Brombeertorte | ||||
| Slice of Blackberry pie=Brombeertortenstueck | ||||
| Basket with Blueberry pies=Korb mit Blaubeertorten | ||||
| Cooked Blackberry pie=Brombeertorte | ||||
| Slice of Blackberry pie=Brombeertortenstück | ||||
| Basket with Blackberry pies=Korb mit Brombeertorten | ||||
| Blackberry Bush=Brombeerbusch | ||||
| Blueberry=Blaubeere | ||||
| Blueberry Bush=Blaubeerbusch | ||||
| Cooked Blueberry pie=Blaubeertorte | ||||
| Raw Blueberry pie=Rohe Blaubeertorte | ||||
| Slice of Blueberry pie=Blaubeertortenstueck | ||||
| Basket with Raspberry pies=Korb mit Himbeertorten | ||||
| Cooked Raspberry pie=Himbeertorte | ||||
| Cooked Blueberry pie=Blaubeertorte | ||||
| Slice of Blueberry pie=Blaubeertortenstück | ||||
| Basket with Blueberry pies=Korb mit Blaubeertorten | ||||
| Blueberry Bush=Blaubeerbusch | ||||
| Raspberry=Himbeere | ||||
| Raspberry Bush=Himbeerbusch | ||||
| Raw Raspberry pie=Rohe Himbeertorte | ||||
| Slice of Raspberry pie=Himbeertortenstueck | ||||
| Basket with Gooseberry pies=Korb mit Stachelbeertorten | ||||
| Cooked Gooseberry pie=Stachelbeertorte | ||||
| Cooked Raspberry pie=Himbeertorte | ||||
| Slice of Raspberry pie=Himbeertortenstück | ||||
| Basket with Raspberry pies=Korb mit Himbeertorten | ||||
| Raspberry Bush=Himbeerbusch | ||||
| Gooseberry=Stachelbeere | ||||
| Gooseberry Bush=Stachelbeerbusch | ||||
| Raw Gooseberry pie=Rohe Stachelbeertorte | ||||
| Slice of Gooseberry pie=Stachelbeertortenstueck | ||||
| Basket with Mixed Berry pies=Korb mit Beerenmixtorten | ||||
| Cooked Mixed Berry pie=Beerenmixtorte | ||||
| Currently fruitless Bush=zur Zeit fruechteloser | ||||
| Cooked Gooseberry pie=Stachelbeertorte | ||||
| Slice of Gooseberry pie=Stachelbeertortenstück | ||||
| Basket with Gooseberry pies=Korb mit Stachelbeertorten | ||||
| Gooseberry Bush=Stachelbeerbusch | ||||
| Mixed Berry=Beerenmix | ||||
| Raw Mixed Berry pie=Rohe Beerenmixtorte | ||||
| Slice of Mixed Berry pie=Beerenmixtortenstueck | ||||
| Cooked Mixed Berry pie=Beerenmixtorte | ||||
| Slice of Mixed Berry pie=Beerenmixtortenstück | ||||
| Basket with Mixed Berry pies=Korb mit Beerenmixtorten | ||||
| Currently fruitless Bush=Zur Zeit früchteloser Busch | ||||
| Basket=Korb | ||||
|   | ||||
| @@ -1,46 +1,39 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
| Sugar=Sukero | ||||
| Basket with Strawberry pies=Korbo kun Fragokukoj | ||||
| Cooked Strawberry pie=Kuirita Fragokuko | ||||
| Raw Strawberry pie=Kruda Fragokuko | ||||
| Slice of Strawberry pie=Tranĉaĵo de Fragokuko | ||||
| Strawberry=Frago | ||||
| Raw Strawberry pie=Kruda Fragokuko | ||||
| Cooked Strawberry pie=Kuirita Fragokuko | ||||
| Slice of Strawberry pie=Tranĉaĵo de Fragokuko | ||||
| Basket with Strawberry pies=Korbo kun Fragokukoj | ||||
| Strawberry Bush=Fraga Arbusto | ||||
| Basket with Blackberry pies=Korbo kun Rubusokukoj | ||||
| Cooked Blackberry pie=Kuirita Rubusokuko | ||||
| Raw Blackberry pie=Kruda Rubusokuko | ||||
| Slice of Blackberry pie=Tranĉaĵo de Rubusokuko | ||||
| Blackberry=Rubuso | ||||
| Raw Blackberry pie=Kruda Rubusokuko | ||||
| Cooked Blackberry pie=Kuirita Rubusokuko | ||||
| Slice of Blackberry pie=Tranĉaĵo de Rubusokuko | ||||
| Basket with Blackberry pies=Korbo kun Rubusokukoj | ||||
| Blackberry Bush=Rubusa Arbusto | ||||
| Basket with Blueberry pies=Korbo kun Mirtelokukoj | ||||
| Blueberry=Mirtelo | ||||
| Blueberry Bush=Mirtela Arbusto | ||||
| Cooked Blueberry pie=Kuirita Mirtelokuko | ||||
| Raw Blueberry pie=Kruda Mirtelokuko | ||||
| Cooked Blueberry pie=Kuirita Mirtelokuko | ||||
| Slice of Blueberry pie=Tranĉaĵo de Mirtelokuko | ||||
| Basket with Raspberry pies=Korbo kun Frambokukoj | ||||
| Cooked Raspberry pie=Kuirita Frambokuko | ||||
| Basket with Blueberry pies=Korbo kun Mirtelokukoj | ||||
| Blueberry Bush=Mirtela Arbusto | ||||
| Raspberry=Frambo | ||||
| Raspberry Bush=Framba Arbusto | ||||
| Raw Raspberry pie=Kruda Frambokuko | ||||
| Cooked Raspberry pie=Kuirita Frambokuko | ||||
| Slice of Raspberry pie=Tranĉaĵo de Frambokuko | ||||
| Basket with Gooseberry pies=Korbo kun Grosberkuko | ||||
| Cooked Gooseberry pie=Kuirita Grosberkuko | ||||
| Basket with Raspberry pies=Korbo kun Frambokukoj | ||||
| Raspberry Bush=Framba Arbusto | ||||
| Gooseberry=Grosbero | ||||
| Gooseberry Bush=Grosberarbusto | ||||
| Raw Gooseberry pie=Kruda Grosberkuko | ||||
| Cooked Gooseberry pie=Kuirita Grosberkuko | ||||
| Slice of Gooseberry pie=Tranĉaĵo de Grosberkuko | ||||
| Basket with Mixed Berry pies=Korbo kun Miksitaj Beraj Kukoj | ||||
| Cooked Mixed Berry pie=Kuirita Miksa Beraj Kukoj | ||||
| Currently fruitless Bush=Nuntempe senfrukta Arbusto | ||||
| Basket with Gooseberry pies=Korbo kun Grosberkuko | ||||
| Gooseberry Bush=Grosberarbusto | ||||
| Mixed Berry=Miksita Bero | ||||
| Raw Mixed Berry pie=Kruda Miksita Bera Kuko | ||||
| Cooked Mixed Berry pie=Kuirita Miksa Beraj Kukoj | ||||
| Slice of Mixed Berry pie=Tranĉaĵo de Miksita Bera Kuko | ||||
| Basket with Mixed Berry pies=Korbo kun Miksitaj Beraj Kukoj | ||||
| Currently fruitless Bush=Nuntempe senfrukta Arbusto | ||||
| Basket=Korbo | ||||
|   | ||||
| @@ -1,46 +1,39 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Carlos Barraza <carlosbarrazaes@gmail.com>, 2017. | ||||
| # | ||||
|  | ||||
| Sugar=Azúcar | ||||
| Basket with Strawberry pies=Cesta con Pasteles de Frutilla | ||||
| Cooked Strawberry pie=Pastel de Frutilla Cocido | ||||
| Raw Strawberry pie=Pastel de Frutilla Crudo | ||||
| Slice of Strawberry pie=Rebanada de Pastel de Frutilla | ||||
| Strawberry=Frutilla | ||||
| Raw Strawberry pie=Pastel de Frutilla Crudo | ||||
| Cooked Strawberry pie=Pastel de Frutilla Cocido | ||||
| Slice of Strawberry pie=Rebanada de Pastel de Frutilla | ||||
| Basket with Strawberry pies=Cesta con Pasteles de Frutilla | ||||
| Strawberry Bush=Arbusto de Frutilla | ||||
| Basket with Blackberry pies=Cesta con Pasteles de Mora | ||||
| Blackberry=Mora | ||||
| Blackberry Bush=Arbusto de Mora | ||||
| Cooked Blackberry pie=Pastel de Mora Cocido | ||||
| Raw Blackberry pie=Pastel de Mora Crudo | ||||
| Cooked Blackberry pie=Pastel de Mora Cocido | ||||
| Slice of Blackberry pie=Rebanada de Pastel de Mora | ||||
| Basket with Blueberry pies=Cesta con Pasteles de Arándano | ||||
| Basket with Blackberry pies=Cesta con Pasteles de Mora | ||||
| Blackberry Bush=Arbusto de Mora | ||||
| Blueberry=Arándano | ||||
| Blueberry Bush=Arbusto de Arándano | ||||
| Cooked Blueberry pie=Pastel de Arándano Cocido | ||||
| Raw Blueberry pie=Pastel de Arándano Crudo | ||||
| Cooked Blueberry pie=Pastel de Arándano Cocido | ||||
| Slice of Blueberry pie=Rebanada de Pastel de Arándano | ||||
| Basket with Raspberry pies=Cesta con Pasteles de Frambuesa | ||||
| Cooked Raspberry pie=Pastel de Frambuesa Cocido | ||||
| Basket with Blueberry pies=Cesta con Pasteles de Arándano | ||||
| Blueberry Bush=Arbusto de Arándano | ||||
| Raspberry=Frambuesa | ||||
| Raspberry Bush=Arbusto de Frambuesa | ||||
| Raw Raspberry pie=Pastel de Frambuesa Crudo | ||||
| Cooked Raspberry pie=Pastel de Frambuesa Cocido | ||||
| Slice of Raspberry pie=Rebanada de Pastel de Frambuesa | ||||
| Basket with Gooseberry pies=Cesta con Pasteles de Grosella | ||||
| Cooked Gooseberry pie=Pastel de Grosella Cocido | ||||
| Basket with Raspberry pies=Cesta con Pasteles de Frambuesa | ||||
| Raspberry Bush=Arbusto de Frambuesa | ||||
| Gooseberry=Grosella | ||||
| Gooseberry Bush=Arbusto de Grosella | ||||
| Raw Gooseberry pie=Pastel de Grosella Crudo | ||||
| Cooked Gooseberry pie=Pastel de Grosella Cocido | ||||
| Slice of Gooseberry pie=Rebanada de Pastel de Grosella | ||||
| Basket with Mixed Berry pies=Cesta con Pasteles de Mezcla de Baya | ||||
| Cooked Mixed Berry pie=Pastel de Mezcla de Bayas Cocido | ||||
| Currently fruitless Bush=Arbusto actualmente infructuoso | ||||
| Basket with Gooseberry pies=Cesta con Pasteles de Grosella | ||||
| Gooseberry Bush=Arbusto de Grosella | ||||
| Mixed Berry=Mezcla de Baya | ||||
| Raw Mixed Berry pie=Pastel de Mezcla de Bayas Cruda | ||||
| Cooked Mixed Berry pie=Pastel de Mezcla de Bayas Cocido | ||||
| Slice of Mixed Berry pie=Rebanada de Pastel de Mezcla de Bayas | ||||
| Basket with Mixed Berry pies=Cesta con Pasteles de Mezcla de Baya | ||||
| Currently fruitless Bush=Arbusto actualmente infructuoso | ||||
| Basket=Cesta | ||||
|   | ||||
| @@ -1,46 +1,39 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Sugar=Sucre | ||||
| Basket with Strawberry pies=Panier de tartes aux fraises | ||||
| Cooked Strawberry pie=Tarte aux fraises (cuite) | ||||
| Raw Strawberry pie=Tarte aux fraises (crue) | ||||
| Slice of Strawberry pie=Part de tarte aux fraises | ||||
| Strawberry=Fraises | ||||
| Raw Strawberry pie=Tarte aux fraises (crue) | ||||
| Cooked Strawberry pie=Tarte aux fraises (cuite) | ||||
| Slice of Strawberry pie=Part de tarte aux fraises | ||||
| Basket with Strawberry pies=Panier de tartes aux fraises | ||||
| Strawberry Bush=Buisson de fraises | ||||
| Basket with Blackberry pies=Panier de tartes aux fraises | ||||
| Blackberry=Mûres | ||||
| Blackberry Bush=Buisson de mûres | ||||
| Cooked Blackberry pie=Tarte aux mûres (cuite) | ||||
| Raw Blackberry pie=Tarte aux mûres (crue) | ||||
| Cooked Blackberry pie=Tarte aux mûres (cuite) | ||||
| Slice of Blackberry pie=Part de tarte aux mûres | ||||
| Basket with Blueberry pies=Panier de tartes aux mûres | ||||
| Basket with Blackberry pies=Panier de tartes aux fraises | ||||
| Blackberry Bush=Buisson de mûres | ||||
| Blueberry=Myrtilles | ||||
| Blueberry Bush=Buisson de myrtilles | ||||
| Cooked Blueberry pie=Tarte aux myrtilles (cuite) | ||||
| Raw Blueberry pie=Tarte aux myrtilles (crue) | ||||
| Cooked Blueberry pie=Tarte aux myrtilles (cuite) | ||||
| Slice of Blueberry pie=Part de tarte aux myrtilles | ||||
| Basket with Raspberry pies=Panier de tartes aux framboises | ||||
| Cooked Raspberry pie=Tarte aux framboises (cuite) | ||||
| Basket with Blueberry pies=Panier de tartes aux mûres | ||||
| Blueberry Bush=Buisson de myrtilles | ||||
| Raspberry=Framboises | ||||
| Raspberry Bush=Buisson de framboises | ||||
| Raw Raspberry pie=Tarte aux framboises (crue) | ||||
| Cooked Raspberry pie=Tarte aux framboises (cuite) | ||||
| Slice of Raspberry pie=Part de tarts aux framboises | ||||
| Basket with Gooseberry pies=Panier de tartes aux groseilles | ||||
| Cooked Gooseberry pie=Tarte aux groseilles (cuite) | ||||
| Basket with Raspberry pies=Panier de tartes aux framboises | ||||
| Raspberry Bush=Buisson de framboises | ||||
| Gooseberry=Groseilles | ||||
| Gooseberry Bush=Buisson de groseilles | ||||
| Raw Gooseberry pie=Tarte aux groseilles (crue) | ||||
| Cooked Gooseberry pie=Tarte aux groseilles (cuite) | ||||
| Slice of Gooseberry pie=Part de tarte aux groseilles | ||||
| Basket with Mixed Berry pies=Panier de tartes aux fruits rouges | ||||
| Cooked Mixed Berry pie=Tarte aux fruits rouges (cuite) | ||||
| Currently fruitless Bush=Buisson sans fruits pour l'instant | ||||
| Basket with Gooseberry pies=Panier de tartes aux groseilles | ||||
| Gooseberry Bush=Buisson de groseilles | ||||
| Mixed Berry=Fruits rouges | ||||
| Raw Mixed Berry pie=Tarte aux fruits rouges (crue) | ||||
| Cooked Mixed Berry pie=Tarte aux fruits rouges (cuite) | ||||
| Slice of Mixed Berry pie=Part de tarte aux fruits rouges | ||||
| Basket with Mixed Berry pies=Panier de tartes aux fruits rouges | ||||
| Currently fruitless Bush=Buisson sans fruits pour l'instant | ||||
| Basket=Panier | ||||
|   | ||||
| @@ -1,46 +1,39 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # mahmutelmas06@hotmail.com, 2017. | ||||
| # | ||||
|  | ||||
| Sugar=Şeker | ||||
| Basket with Strawberry pies=Çilekli pasta sepeti | ||||
| Cooked Strawberry pie=Pişmiş çilekli pasta  | ||||
| Raw Strawberry pie=Çilekli çiğ pasta | ||||
| Slice of Strawberry pie=Çilekli pasta dilimi | ||||
| Strawberry=Çilek | ||||
| Raw Strawberry pie=Çilekli çiğ pasta | ||||
| Cooked Strawberry pie=Pişmiş çilekli pasta  | ||||
| Slice of Strawberry pie=Çilekli pasta dilimi | ||||
| Basket with Strawberry pies=Çilekli pasta sepeti | ||||
| Strawberry Bush=Çilek fidanı | ||||
| Basket with Blackberry pies=Böğürtlenli pasta sepeti | ||||
| Blackberry=Böğürtlen | ||||
| Blackberry Bush=Böğürtlen fidanı | ||||
| Cooked Blackberry pie=Pişmiş böğürtlenli pasta | ||||
| Raw Blackberry pie=Böğürtlenli çiğ pasta | ||||
| Cooked Blackberry pie=Pişmiş böğürtlenli pasta | ||||
| Slice of Blackberry pie=Böğürtlenli pasta dilimi | ||||
| Basket with Blueberry pies=Yaban mersini pastalı sepet | ||||
| Basket with Blackberry pies=Böğürtlenli pasta sepeti | ||||
| Blackberry Bush=Böğürtlen fidanı | ||||
| Blueberry=Yaban mersini | ||||
| Blueberry Bush=Yaban mersini fidanı | ||||
| Cooked Blueberry pie=Pişmiş yaban mersinli pasta | ||||
| Raw Blueberry pie=Yaban mersinli çiğ pasta | ||||
| Cooked Blueberry pie=Pişmiş yaban mersinli pasta | ||||
| Slice of Blueberry pie=Yaban mersinli pasta dilimi | ||||
| Basket with Raspberry pies=Ahududulu pasta sepeti | ||||
| Cooked Raspberry pie=Pişmiş ahududulu pasta | ||||
| Basket with Blueberry pies=Yaban mersini pastalı sepet | ||||
| Blueberry Bush=Yaban mersini fidanı | ||||
| Raspberry=Ahududu | ||||
| Raspberry Bush=Ahududu fidanı | ||||
| Raw Raspberry pie=Ahududulu çiğ pasta | ||||
| Cooked Raspberry pie=Pişmiş ahududulu pasta | ||||
| Slice of Raspberry pie=Ahududulu pasta dilimi | ||||
| Basket with Gooseberry pies=Bektaşi üzümlü pasta sepeti | ||||
| Cooked Gooseberry pie=Pişmiş bektaşi üzümlü pasta | ||||
| Basket with Raspberry pies=Ahududulu pasta sepeti | ||||
| Raspberry Bush=Ahududu fidanı | ||||
| Gooseberry=Bektaşi üzümü | ||||
| Gooseberry Bush=Bektaşi üzümü fidanı | ||||
| Raw Gooseberry pie=Bektaşi üzümlü çiğ pasta | ||||
| Cooked Gooseberry pie=Pişmiş bektaşi üzümlü pasta | ||||
| Slice of Gooseberry pie=Bektaşi üzümlü pasta dilimi | ||||
| Basket with Mixed Berry pies=Dutlu pasta sepeti | ||||
| Cooked Mixed Berry pie=Pişmiş dutlu pasta | ||||
| Currently fruitless Bush=Fidanı şu anda meyvesiz | ||||
| Basket with Gooseberry pies=Bektaşi üzümlü pasta sepeti | ||||
| Gooseberry Bush=Bektaşi üzümü fidanı | ||||
| Mixed Berry=Dut | ||||
| Raw Mixed Berry pie=Dutlu çiğ pasta | ||||
| Cooked Mixed Berry pie=Pişmiş dutlu pasta | ||||
| Slice of Mixed Berry pie=Dutlu pasta dilimi | ||||
| Basket with Mixed Berry pies=Dutlu pasta sepeti | ||||
| Currently fruitless Bush=Fidanı şu anda meyvesiz | ||||
| Basket=Sepet | ||||
|   | ||||
| @@ -1,46 +1,39 @@ | ||||
| # textdomain: bushes_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
| Sugar= | ||||
| Basket with Strawberry pies= | ||||
| Cooked Strawberry pie= | ||||
| Raw Strawberry pie= | ||||
| Slice of Strawberry pie= | ||||
| Strawberry= | ||||
| Raw Strawberry pie= | ||||
| Cooked Strawberry pie= | ||||
| Slice of Strawberry pie= | ||||
| Basket with Strawberry pies= | ||||
| Strawberry Bush= | ||||
| Basket with Blackberry pies= | ||||
| Blackberry= | ||||
| Blackberry Bush= | ||||
| Cooked Blackberry pie= | ||||
| Raw Blackberry pie= | ||||
| Cooked Blackberry pie= | ||||
| Slice of Blackberry pie= | ||||
| Basket with Blueberry pies= | ||||
| Basket with Blackberry pies= | ||||
| Blackberry Bush= | ||||
| Blueberry= | ||||
| Blueberry Bush= | ||||
| Cooked Blueberry pie= | ||||
| Raw Blueberry pie= | ||||
| Cooked Blueberry pie= | ||||
| Slice of Blueberry pie= | ||||
| Basket with Raspberry pies= | ||||
| Cooked Raspberry pie= | ||||
| Basket with Blueberry pies= | ||||
| Blueberry Bush= | ||||
| Raspberry= | ||||
| Raspberry Bush= | ||||
| Raw Raspberry pie= | ||||
| Cooked Raspberry pie= | ||||
| Slice of Raspberry pie= | ||||
| Basket with Gooseberry pies= | ||||
| Cooked Gooseberry pie= | ||||
| Basket with Raspberry pies= | ||||
| Raspberry Bush= | ||||
| Gooseberry= | ||||
| Gooseberry Bush= | ||||
| Raw Gooseberry pie= | ||||
| Cooked Gooseberry pie= | ||||
| Slice of Gooseberry pie= | ||||
| Basket with Mixed Berry pies= | ||||
| Cooked Mixed Berry pie= | ||||
| Currently fruitless Bush= | ||||
| Basket with Gooseberry pies= | ||||
| Gooseberry Bush= | ||||
| Mixed Berry= | ||||
| Raw Mixed Berry pie= | ||||
| Cooked Mixed Berry pie= | ||||
| Slice of Mixed Berry pie= | ||||
| Basket with Mixed Berry pies= | ||||
| Currently fruitless Bush= | ||||
| Basket= | ||||
|   | ||||
| @@ -1,3 +1,2 @@ | ||||
| name = bushes_classic | ||||
| depends = biome_lib | ||||
| optional_depends = farming, farming_plus | ||||
|   | ||||
| @@ -163,19 +163,13 @@ for i, bush_name in ipairs(bushes_classic.bushes) do | ||||
| 		groups = { dig_immediate = 3 }, | ||||
| 	}) | ||||
|  | ||||
| 	local texture_top, texture_bottom | ||||
|  | ||||
| 	local groups = {snappy = 3, bush = 1, flammable = 2, attached_node=1} | ||||
| 	if bush_name == "mixed_berry" then | ||||
| 		bush_name = "fruitless"; | ||||
| 		texture_top = "bushes_fruitless_bush_top.png" | ||||
| 		texture_bottom = "bushes_fruitless_bush_bottom.png" | ||||
| 		groups.not_in_creative_inventory = 1 | ||||
| 	else | ||||
| 		texture_top = "bushes_bush_top.png" | ||||
| 		texture_bottom = "bushes_bush_bottom.png" | ||||
| 	end | ||||
| 	 | ||||
|  | ||||
| 	local node_dig_prediction | ||||
| 	local node_placement_prediction | ||||
| 	if bush_name ~= "fruitless" then | ||||
|   | ||||
| @@ -1,17 +1,2 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| local title		= "Cave Stuff" | ||||
| local version	= "0.0.3" | ||||
| local mname		= "cavestuff" | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("cavestuff") | ||||
|  | ||||
| cavestuff = {} | ||||
|  | ||||
| dofile(minetest.get_modpath("cavestuff").."/nodes.lua") | ||||
| dofile(minetest.get_modpath("cavestuff").."/mapgen.lua") | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") | ||||
|   | ||||
| @@ -1,11 +1,4 @@ | ||||
| # textdomain: cavestuff | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # reusityback, 2022. | ||||
| # | ||||
|  | ||||
| Pebble=Kieselstein | ||||
| Desert Pebble=Wüstenkiesel | ||||
| Stalactite=Stalaktit | ||||
|   | ||||
| @@ -1,11 +1,4 @@ | ||||
| # textdomain: cavestuff | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
| Pebble=Ŝtoneto | ||||
| Desert Pebble=Dezerta Ŝtoneto | ||||
| Stalactite=Stalaktito | ||||
|   | ||||
| @@ -1,11 +1,4 @@ | ||||
| # textdomain: cavestuff | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Pebble=Caillou | ||||
| Desert Pebble=Caillou du désert | ||||
| Stalactite=Stalactite | ||||
|   | ||||
| @@ -1,11 +1,4 @@ | ||||
| # textdomain: cavestuff | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
| Pebble= | ||||
| Desert Pebble= | ||||
| Stalactite= | ||||
|   | ||||
| @@ -1,39 +1,65 @@ | ||||
| --Map Generation Stuff | ||||
|  | ||||
| biome_lib.register_on_generate( | ||||
| 	{ | ||||
| 		surface = { | ||||
| 			"default:dirt_with_grass", | ||||
| 			"default:gravel", | ||||
| 			"default:stone", | ||||
| 			"default:permafrost_with_stones" | ||||
| 		}, | ||||
| 		max_count = 50, | ||||
| 		rarity = 0, | ||||
| 		plantlife_limit = -1, | ||||
| 		check_air = true, | ||||
| 		random_facedir = {0, 3} | ||||
| 	}, | ||||
| 	{ | ||||
| minetest.register_decoration({ | ||||
| 	decoration = { | ||||
| 		"cavestuff:pebble_1", | ||||
| 		"cavestuff:pebble_2" | ||||
| 	} | ||||
| ) | ||||
|  | ||||
| biome_lib.register_on_generate( | ||||
| 	{ | ||||
| 		surface = { | ||||
| 			"default:desert_sand", | ||||
| 			"default:desert_stone" | ||||
| 		}, | ||||
| 		max_count = 50, | ||||
| 		rarity = 0, | ||||
| 		plantlife_limit = -1, | ||||
| 		check_air = true, | ||||
| 		random_facedir = {0, 3} | ||||
| 	}, | ||||
| 	{ | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"default:gravel", | ||||
| 		"default:stone", | ||||
| 		"default:permafrost_with_stones" | ||||
| 	}, | ||||
| 	noise_params = { | ||||
| 		offset = 0, | ||||
| 		scale = 0.0078125, | ||||
| 		spread = { | ||||
| 			y = 100, | ||||
| 			z = 100, | ||||
| 			x = 100 | ||||
| 		}, | ||||
| 		seed = 0, | ||||
| 		octaves = 3, | ||||
| 		persist = 0.6, | ||||
| 		flags = "absvalue", | ||||
| 		lacunarity = 2 | ||||
| 	}, | ||||
| 	param2 = 0, | ||||
| 	flags = "all_floors", | ||||
| 	deco_type = "simple", | ||||
| 	param2_max = 3, | ||||
| 	y_min = -16, | ||||
| 	y_max = 48 | ||||
| }) | ||||
|  | ||||
| minetest.register_decoration({ | ||||
| 	decoration = { | ||||
| 		"cavestuff:desert_pebble_1", | ||||
| 		"cavestuff:desert_pebble_2" | ||||
| 	} | ||||
| ) | ||||
| 	}, | ||||
| 	place_on = { | ||||
| 		"default:desert_sand", | ||||
| 		"default:desert_stone" | ||||
| 	}, | ||||
| 	noise_params = { | ||||
| 		offset = 0, | ||||
| 		scale = 0.0078125, | ||||
| 		spread = { | ||||
| 				y = 100, | ||||
| 				z = 100, | ||||
| 				x = 100 | ||||
| 		}, | ||||
| 		seed = 0, | ||||
| 		octaves = 3, | ||||
| 		persist = 0.6, | ||||
| 		flags = "absvalue", | ||||
| 		lacunarity = 2 | ||||
| 	}, | ||||
| 	param2 = 0, | ||||
| 	flags = "all_floors", | ||||
| 	deco_type = "simple", | ||||
| 	param2_max = 3, | ||||
| 	y_min = -16, | ||||
| 	y_max = 48 | ||||
| }) | ||||
| @@ -1,2 +1,2 @@ | ||||
| name = cavestuff | ||||
| depends = default,biome_lib | ||||
| depends = default | ||||
|   | ||||
| @@ -14,33 +14,32 @@ minetest.register_node("cavestuff:pebble_1",{ | ||||
| 	description = S("Pebble"), | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "cavestuff_pebble.obj", | ||||
| 	 tiles = {"undergrowth_pebble.png"}, | ||||
| 	 paramtype = "light", | ||||
| 	tiles = {"undergrowth_pebble.png"}, | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	 groups = {cracky=3, stone=1, attached_node=1}, | ||||
| 	 selection_box = cbox, | ||||
| 	 collision_box = cbox, | ||||
| 	 on_place = function(itemstack, placer, pointed_thing) | ||||
| 	groups = {cracky=3, stone=1, attached_node=1}, | ||||
| 	selection_box = cbox, | ||||
| 	collision_box = cbox, | ||||
| 	on_place = function(itemstack, placer, pointed_thing) | ||||
| 		-- place a random pebble node | ||||
| 		local stack = ItemStack("cavestuff:pebble_"..random(1,2)) | ||||
| 		local ret = minetest.item_place(stack, placer, pointed_thing) | ||||
| 		return ItemStack("cavestuff:pebble_1 "..itemstack:get_count()-(1-ret:get_count())) | ||||
| 	end, | ||||
| 	 sounds = default.node_sound_stone_defaults(), | ||||
| 	sounds = default.node_sound_stone_defaults(), | ||||
| }) | ||||
|  | ||||
| minetest.register_node("cavestuff:pebble_2",{ | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "cavestuff_pebble.obj", | ||||
| 	 tiles = {"undergrowth_pebble.png"}, | ||||
| 	tiles = {"undergrowth_pebble.png"}, | ||||
| 	drop = "cavestuff:pebble_1", | ||||
| 	 tiles = {"undergrowth_pebble.png"}, | ||||
| 	 paramtype = "light", | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	 groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1}, | ||||
| 	groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1}, | ||||
| 	selection_box = cbox, | ||||
| 	collision_box = cbox, | ||||
| 	 sounds = default.node_sound_stone_defaults(), | ||||
| 	sounds = default.node_sound_stone_defaults(), | ||||
| }) | ||||
|  | ||||
| minetest.register_node("cavestuff:desert_pebble_1",{ | ||||
| @@ -102,7 +101,7 @@ minetest.register_node("cavestuff:stalactite_1",{ | ||||
| 		if not placer then return end | ||||
| 		local playername = placer:get_player_name() | ||||
| 		if minetest.is_protected(place, playername) | ||||
| 		or minetest.is_protected(above, playername) then  | ||||
| 		or minetest.is_protected(above, playername) then | ||||
| 			minetest.record_protection_violation(place, playername) | ||||
| 			return | ||||
| 		end | ||||
| @@ -115,7 +114,7 @@ minetest.register_node("cavestuff:stalactite_1",{ | ||||
| 				name = "cavestuff:stalactite_"..math.random(1,3), | ||||
| 				param2 = minetest.dir_to_wallmounted(vector.multiply(dir, -1)) | ||||
| 			}) | ||||
| 			if not minetest.setting_getbool("creative_mode") then | ||||
| 			if not minetest.is_creative_enabled(playername) then | ||||
| 				itemstack:take_item() | ||||
| 			end | ||||
| 		end | ||||
| @@ -158,5 +157,3 @@ minetest.register_node("cavestuff:stalactite_3",{ | ||||
| 		} | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| --Stalagmites | ||||
|   | ||||
| @@ -53,7 +53,7 @@ minetest.register_craft({ | ||||
| 		{"default:stick",""} | ||||
| 	} | ||||
| }) | ||||
| if minetest.get_modpath("flint") ~= nil then | ||||
| if minetest.get_modpath("flint") then | ||||
| 	minetest.register_craft({ | ||||
| 		output = "dryplants:sickle", | ||||
| 		recipe = { | ||||
| @@ -63,7 +63,7 @@ if minetest.get_modpath("flint") ~= nil then | ||||
| 		} | ||||
| 	}) | ||||
| end | ||||
| if minetest.get_modpath("stoneage") ~= nil then | ||||
| if minetest.get_modpath("stoneage") then | ||||
| 	minetest.register_craft({ | ||||
| 		output = "dryplants:sickle", | ||||
| 		recipe = { | ||||
|   | ||||
| @@ -1,33 +1,15 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| local title		= "Grasses" -- former "Dry plants" | ||||
| local version	= "0.1.5" | ||||
| local mname		= "dryplants" | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- by Mossmanikin | ||||
| -- textures & ideas partly by Neuromancer | ||||
|  | ||||
| -- Contains code from:		default, farming | ||||
| -- Looked at code from:		darkage, sickle, stairs | ||||
| -- Dependencies:			default, farming, biome_lib | ||||
| -- Supports: | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| abstract_dryplants = {} | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("dryplants") | ||||
|  | ||||
| abstract_dryplants = {} | ||||
|  | ||||
| dofile(minetest.get_modpath("dryplants").."/crafting.lua") | ||||
| dofile(minetest.get_modpath("dryplants").."/settings.txt") | ||||
| dofile(minetest.get_modpath("dryplants").."/reed.lua") | ||||
| if REEDMACE_GENERATES == true then | ||||
|  | ||||
| dofile(minetest.get_modpath("dryplants").."/reedmace.lua") | ||||
| end | ||||
| if SMALL_JUNCUS_GENERATES == true then | ||||
| dofile(minetest.get_modpath("dryplants").."/juncus.lua") | ||||
| end | ||||
| if EXTRA_TALL_GRASS_GENERATES == true then | ||||
| dofile(minetest.get_modpath("dryplants").."/moregrass.lua") | ||||
| end | ||||
|  | ||||
| --dofile(minetest.get_modpath("dryplants").."/meadowvariation.lua") | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| @@ -145,7 +127,7 @@ minetest.register_node("dryplants:grass", { | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| minetest.register_abm({ | ||||
| 	nodenames = {"dryplants:grass"}, | ||||
| 	interval = HAY_DRYING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle | ||||
| 	interval = 3600, --1200, -- 20 minutes: a minetest-day/night-cycle | ||||
| 	chance = 1, | ||||
| 	action = function(pos) | ||||
| 		minetest.swap_node(pos, {name="dryplants:hay"}) | ||||
| @@ -191,8 +173,8 @@ minetest.register_node("dryplants:grass_short", { | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| minetest.register_abm({ | ||||
| 	nodenames = {"dryplants:grass_short"}, | ||||
| 	interval = GRASS_REGROWING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle | ||||
| 	chance = 100/GRASS_REGROWING_CHANCE, | ||||
| 	interval = 1200, --1200, -- 20 minutes: a minetest-day/night-cycle | ||||
| 	chance = 100/1200, | ||||
| 	action = function(pos) | ||||
| 		-- Only become dirt with grass if no cut grass or hay lies on top | ||||
| 		local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) | ||||
| @@ -201,7 +183,3 @@ minetest.register_abm({ | ||||
| 		end | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|   | ||||
| @@ -1,24 +1,12 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Grasses - Juncus 0.0.5 | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- by Mossmanikin | ||||
| -- textures & ideas partly by Neuromancer | ||||
|  | ||||
| -- Contains code from:		biome_lib | ||||
| -- Looked at code from:		default | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("dryplants") | ||||
|  | ||||
| local random = math.random | ||||
| local sqrt = math.sqrt | ||||
|  | ||||
| abstract_dryplants.grow_juncus = function(pos) | ||||
| 	local juncus_type = random(2,3) | ||||
| local function grow_juncus(pos) | ||||
| 	local juncus_type = math.random(2,3) | ||||
| 	local right_here = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 	if minetest.get_node(right_here).name == "air"  -- instead of check_air = true, | ||||
| 	or minetest.get_node(right_here).name == "default:junglegrass" then | ||||
|  | ||||
| 	local nodename = minetest.get_node(right_here).name | ||||
| 	if nodename == "air" or nodename == "default:junglegrass" then | ||||
| 		if juncus_type == 2 then | ||||
| 			minetest.swap_node(right_here, {name="dryplants:juncus_02"}) | ||||
| 		else | ||||
| @@ -30,7 +18,7 @@ end | ||||
| minetest.register_node("dryplants:juncus", { | ||||
| 	description = S("Juncus"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = sqrt(8), | ||||
| 	visual_scale = math.sqrt(8), | ||||
| 	paramtype = "light", | ||||
| 	tiles = {"dryplants_juncus_03.png"}, | ||||
| 	inventory_image = "dryplants_juncus_inv.png", | ||||
| @@ -49,6 +37,10 @@ minetest.register_node("dryplants:juncus", { | ||||
| 		fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16}, | ||||
| 	}, | ||||
| 	on_place = function(itemstack, placer, pointed_thing) | ||||
| 		if not itemstack or not placer or not pointed_thing then | ||||
| 			return | ||||
| 		end | ||||
|  | ||||
| 		local playername = placer:get_player_name() | ||||
| 		if minetest.is_protected(pointed_thing.above, playername) or | ||||
| 			minetest.is_protected(pointed_thing.under, playername) then | ||||
| @@ -56,23 +48,24 @@ minetest.register_node("dryplants:juncus", { | ||||
| 			return | ||||
| 		end | ||||
| 		local pos = pointed_thing.under | ||||
| 		local juncus_type = random(2,3) | ||||
| 		local juncus_type = math.random(2,3) | ||||
| 		local right_here = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 		if juncus_type == 2 then | ||||
| 			minetest.swap_node(right_here, {name="dryplants:juncus_02"}) | ||||
| 		else | ||||
| 			minetest.swap_node(right_here, {name="dryplants:juncus"}) | ||||
| 		end | ||||
| 		if not minetest.setting_getbool("creative_mode") then | ||||
| 		if not minetest.is_creative_enabled(playername) then | ||||
| 			itemstack:take_item() | ||||
| 		end | ||||
| 		return itemstack | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| minetest.register_node("dryplants:juncus_02", { | ||||
| 	description = S("Juncus"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = sqrt(8), | ||||
| 	visual_scale = math.sqrt(8), | ||||
| 	paramtype = "light", | ||||
| 	tiles = {"dryplants_juncus_02.png"}, | ||||
| 	walkable = false, | ||||
| @@ -95,44 +88,69 @@ minetest.register_node("dryplants:juncus_02", { | ||||
| -- GENERATE SMALL JUNCUS | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- near water or swamp | ||||
| biome_lib.register_on_generate({ | ||||
|     surface = { | ||||
| minetest.register_decoration({ | ||||
| 	name = "dryplants:juncus_water", | ||||
| 	decoration = {"air"}, | ||||
| 	fill_ratio = 0.16, | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		--"default:desert_sand", | ||||
| 		--"default:sand", | ||||
| 		"stoneage:grass_with_silex", | ||||
| 		"sumpf:peat", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
|     max_count = JUNCUS_NEAR_WATER_PER_MAPBLOCK, | ||||
|     rarity = 101 - JUNCUS_NEAR_WATER_RARITY, | ||||
|     min_elevation = 1, -- above sea level | ||||
| 	near_nodes = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"}, | ||||
| 	near_nodes_size = 2, | ||||
| 	near_nodes_vertical = 1, | ||||
| 	near_nodes_count = 1, | ||||
|     plantlife_limit = -0.9, | ||||
|   }, | ||||
|   abstract_dryplants.grow_juncus | ||||
| ) | ||||
| -- at dunes/beach | ||||
| biome_lib.register_on_generate({ | ||||
|     surface = { | ||||
| 		--"default:dirt_with_grass", | ||||
| 		--"default:desert_sand", | ||||
| 		"default:sand", | ||||
| 		--"stoneage:grass_with_silex", | ||||
| 		--"sumpf:peat", | ||||
| 		--"sumpf:sumpf" | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| 	spawn_by = { | ||||
| 		"default:water_source", | ||||
| 		"sumpf:dirtywater_source", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
|     max_count = JUNCUS_AT_BEACH_PER_MAPBLOCK, | ||||
|     rarity = 101 - JUNCUS_AT_BEACH_RARITY, | ||||
|     min_elevation = 1, -- above sea level | ||||
| 	near_nodes = {"default:dirt_with_grass"}, | ||||
| 	near_nodes_size = 2, | ||||
| 	near_nodes_vertical = 1, | ||||
| 	near_nodes_count = 1, | ||||
|     plantlife_limit = -0.9, | ||||
|   }, | ||||
|   abstract_dryplants.grow_juncus | ||||
| ) | ||||
| 	check_offset = -1, | ||||
| 	num_spawn_by = 1 | ||||
| }) | ||||
|  | ||||
| -- at dunes/beach | ||||
| minetest.register_decoration({ | ||||
| 	name = "dryplants:juncus_beach", | ||||
| 	decoration = {"air"}, | ||||
| 	fill_ratio = 0.08, | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:sand", | ||||
| 	}, | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| 	spawn_by = {"default:dirt_with_grass"}, | ||||
| 	check_offset = -1, | ||||
| 	num_spawn_by = 1 | ||||
| }) | ||||
|  | ||||
| local did, did2 | ||||
| minetest.register_on_mods_loaded(function() | ||||
| 	did = minetest.get_decoration_id("dryplants:juncus_water") | ||||
| 	did2 = minetest.get_decoration_id("dryplants:juncus_beach") | ||||
| 	minetest.set_gen_notify("decoration", {did, did2}) | ||||
| end) | ||||
|  | ||||
| minetest.register_on_generated(function(minp, maxp, blockseed) | ||||
| 	local g = minetest.get_mapgen_object("gennotify") | ||||
| 	local locations = {} | ||||
|  | ||||
| 	local deco_locations_1 = g["decoration#" .. did] or {} | ||||
| 	local deco_locations_2 = g["decoration#" .. did2] or {} | ||||
|  | ||||
| 	for _, pos in pairs(deco_locations_1) do | ||||
| 		locations[#locations+1] = pos | ||||
| 	end | ||||
| 	for _, pos in pairs(deco_locations_2) do | ||||
| 		locations[#locations+1] = pos | ||||
| 	end | ||||
|  | ||||
| 	if #locations == 0 then return end | ||||
| 	for _, pos in ipairs(locations) do | ||||
| 		grow_juncus(pos) | ||||
| 	end | ||||
| end) | ||||
|   | ||||
| @@ -1,25 +1,18 @@ | ||||
| # textdomain: dryplants | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # reusityback, 2022. | ||||
| # | ||||
|  | ||||
| Sickle=Sichel | ||||
| Cut Grass=Gras schneiden | ||||
| Cut Grass=Grasschnitt | ||||
| Hay=Heu | ||||
| Short Grass=Kurzes Gras | ||||
| Juncus=Binsen | ||||
| Wet Reed=Nasses Schilf | ||||
| Wet Reed Slab=Nasse Schilfstufe | ||||
| Wet Reed Slab=Nasse Schilfplatte | ||||
| Wet Reed Roof=Nasses Schilfdach | ||||
| Wet Reed Roof Corner=Nasser Schilfdachwinkel | ||||
| Wet Reed Roof Corner 1=Nasser Schilfdachwinkel 1 | ||||
| Wet Reed Roof Corner 2=Nasser Schilfdachwinkel 2 | ||||
| Reed=Schilf | ||||
| Reed Slab=Schilfstufe | ||||
| Reed Roof=Schilfdach | ||||
| Reed Roof Corner=Schilfdachwinkel | ||||
| Reed Roof Corner 1=Schilfdachwinkel 1 | ||||
| Reed Roof Corner 2=Schilfdachwinkel | ||||
| Reedmace=Rohrkolben | ||||
| Reedmace, height: 1=Rohrkolben, Höhe: 1 | ||||
|   | ||||
| @@ -1,11 +1,4 @@ | ||||
| # textdomain: dryplants | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
| Sickle= | ||||
| Cut Grass=Tranĉita Herbenon | ||||
| Hay=Fojno | ||||
| @@ -14,12 +7,12 @@ Juncus=Junko | ||||
| Wet Reed=Malseka Kano | ||||
| Wet Reed Slab=Slabo de Malseka Kano | ||||
| Wet Reed Roof=Tegmento de Malseka Kano | ||||
| Wet Reed Roof Corner=Tegmentangulo de Malseka Kano | ||||
| Wet Reed Roof Corner 1=Tegmentangulo 1 de Malseka Kano | ||||
| Wet Reed Roof Corner 2=Tegmentangulo 2 de Malseka Kano | ||||
| Reed=Kano | ||||
| Reed Slab=Slabo de Kano | ||||
| Reed Roof=Tegmento de Kano | ||||
| Reed Roof Corner=Tegmentangulo de Kano | ||||
| Reed Roof Corner 1=Tegmentangulo 1 de Kano | ||||
| Reed Roof Corner 2=Tegmentangulo 2 de Kano | ||||
| Reedmace=Tifeo | ||||
| Reedmace, height: 1=Tifeo, alteco: 1 | ||||
|   | ||||
| @@ -1,11 +1,4 @@ | ||||
| # textdomain: dryplants | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Sickle=Faucille | ||||
| Cut Grass=Herbe coupée | ||||
| Hay=Foin | ||||
| @@ -14,12 +7,12 @@ Juncus=Joncs | ||||
| Wet Reed=Bloc de roseau humide | ||||
| Wet Reed Slab=Dalle en roseau humide | ||||
| Wet Reed Roof=Toit en roseau humide | ||||
| Wet Reed Roof Corner=Angle de toit en roseau humide | ||||
| Wet Reed Roof Corner 1=Angle de toit en roseau humide 1 | ||||
| Wet Reed Roof Corner 2=Angle de toit en roseau humide 2 | ||||
| Reed=Roseau | ||||
| Reed Slab=Dalle en roseau | ||||
| Reed Roof=Toit en roseau | ||||
| Reed Roof Corner=Angle de toit en roseau | ||||
| Reed Roof Corner 1=Angle de toit en roseau 1 | ||||
| Reed Roof Corner 2=Angle de toit en roseau 2 | ||||
| Reedmace=Roseau | ||||
| Reedmace, height: 1=Roseau, 1 de hauteur | ||||
|   | ||||
| @@ -1,11 +1,4 @@ | ||||
| # textdomain: dryplants | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
| Sickle= | ||||
| Cut Grass= | ||||
| Hay= | ||||
| @@ -14,12 +7,12 @@ Juncus= | ||||
| Wet Reed= | ||||
| Wet Reed Slab= | ||||
| Wet Reed Roof= | ||||
| Wet Reed Roof Corner= | ||||
| Wet Reed Roof Corner 1= | ||||
| Wet Reed Roof Corner 2= | ||||
| Reed= | ||||
| Reed Slab= | ||||
| Reed Roof= | ||||
| Reed Roof Corner= | ||||
| Reed Roof Corner 1= | ||||
| Reed Roof Corner 2= | ||||
| Reedmace= | ||||
| Reedmace, height: 1= | ||||
|   | ||||
| @@ -1,24 +1,12 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Grasses - Meadow Variation 0.0.1 | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- by Mossmanikin | ||||
|  | ||||
| -- Contains code from:		biome_lib | ||||
| -- Looked at code from:		default | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| abstract_dryplants.grow_grass_variation = function(pos) | ||||
| 	minetest.swap_node(pos, {name="dryplants:grass_short"}) | ||||
| end | ||||
|  | ||||
| biome_lib.register_on_generate({ | ||||
|     surface = { | ||||
| -- @reviewer: couldn't even find using biome_lib | ||||
| minetest.register_decoration({ | ||||
| 	decoration = {"dryplants:grass_short"}, | ||||
| 	fill_ratio = 0.8, | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass", | ||||
| 	}, | ||||
|     max_count = 4800, | ||||
|     rarity = 25, | ||||
|     min_elevation = 1, -- above sea level | ||||
| 	plantlife_limit = -0.9, | ||||
|   }, | ||||
|   abstract_dryplants.grow_grass_variation | ||||
| ) | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors" | ||||
| }) | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| name = dryplants | ||||
| depends = default, biome_lib | ||||
| optional_depends = farming | ||||
| depends = default | ||||
| optional_depends = farming, ebiomes | ||||
|   | ||||
| @@ -1,30 +1,20 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Grasses - More Tall Grass 0.0.2 | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- by Mossmanikin | ||||
|  | ||||
| -- Contains code from:		biome_lib | ||||
| -- Looked at code from:		default | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| biome_lib.register_on_generate( | ||||
| 	{ | ||||
| 		surface = { | ||||
| 			"default:dirt_with_grass", | ||||
| 			"stoneage:grass_with_silex", | ||||
| 			"sumpf:peat", | ||||
| 			"sumpf:sumpf" | ||||
| 		}, | ||||
| 		max_count = TALL_GRASS_PER_MAPBLOCK, | ||||
| 		rarity = 101 - TALL_GRASS_RARITY, | ||||
| 		min_elevation = 1, -- above sea level | ||||
| 		plantlife_limit = -0.9, | ||||
| 		check_air = true, | ||||
| 	}, | ||||
| 	{	"default:grass_1", | ||||
| minetest.register_decoration({ | ||||
| 	decoration = { | ||||
| 		"default:grass_1", | ||||
| 		"default:grass_2", | ||||
| 		"default:grass_3", | ||||
| 		"default:grass_4", | ||||
| 		"default:grass_5" | ||||
| 	} | ||||
| ) | ||||
| 	}, | ||||
| 	fill_ratio = 0.8, | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"stoneage:grass_with_silex", | ||||
| 		"sumpf:peat", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors" | ||||
| }) | ||||
|   | ||||
| @@ -75,106 +75,103 @@ minetest.register_node("dryplants:wetreed_roof", { | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| }) | ||||
|  | ||||
| if AUTO_ROOF_CORNER == true then | ||||
|  | ||||
| 	local CoRNeR = { | ||||
| local CoRNeR = { | ||||
| --		  MaTeRiaL | ||||
| 		{"wetreed"}, | ||||
| 		{"reed"} | ||||
| 	} | ||||
| 	{"wetreed"}, | ||||
| 	{"reed"} | ||||
| } | ||||
|  | ||||
| 	for i in pairs(CoRNeR) do | ||||
| for i in pairs(CoRNeR) do | ||||
|  | ||||
| 		local MaTeRiaL = CoRNeR[i][1] | ||||
| 		local roof = "dryplants:"..MaTeRiaL.."_roof" | ||||
| 		local corner = "dryplants:"..MaTeRiaL.."_roof_corner" | ||||
| 		local corner_2 = "dryplants:"..MaTeRiaL.."_roof_corner_2" | ||||
| 	local MaTeRiaL = CoRNeR[i][1] | ||||
| 	local roof = "dryplants:"..MaTeRiaL.."_roof" | ||||
| 	local corner = "dryplants:"..MaTeRiaL.."_roof_corner" | ||||
| 	local corner_2 = "dryplants:"..MaTeRiaL.."_roof_corner_2" | ||||
|  | ||||
| 		minetest.register_abm({ | ||||
| 			nodenames = {roof}, | ||||
| 			interval = 1, | ||||
| 			chance = 1, | ||||
| 			action = function(pos) | ||||
| 	minetest.register_abm({ | ||||
| 		nodenames = {roof}, | ||||
| 		interval = 1, | ||||
| 		chance = 1, | ||||
| 		action = function(pos) | ||||
|  | ||||
| 				local node_east =			minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z  }) | ||||
| 				local node_west =			minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z  }) | ||||
| 				local node_north =			minetest.get_node({x=pos.x,   y=pos.y, z=pos.z+1}) | ||||
| 				local node_south =			minetest.get_node({x=pos.x,   y=pos.y, z=pos.z-1}) | ||||
| 		-- corner 1 | ||||
| 				if ((node_west.name == roof and node_west.param2 == 0) | ||||
| 				or (node_west.name == corner and node_west.param2 == 1)) | ||||
| 				and ((node_north.name == roof and node_north.param2 == 3) | ||||
| 				or (node_north.name == corner and node_north.param2 == 3)) | ||||
| 				then | ||||
| 					minetest.swap_node(pos, {name=corner, param2=0}) | ||||
| 				end | ||||
| 			local node_east =			minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z  }) | ||||
| 			local node_west =			minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z  }) | ||||
| 			local node_north =			minetest.get_node({x=pos.x,   y=pos.y, z=pos.z+1}) | ||||
| 			local node_south =			minetest.get_node({x=pos.x,   y=pos.y, z=pos.z-1}) | ||||
| 	-- corner 1 | ||||
| 			if ((node_west.name == roof and node_west.param2 == 0) | ||||
| 			or (node_west.name == corner and node_west.param2 == 1)) | ||||
| 			and ((node_north.name == roof and node_north.param2 == 3) | ||||
| 			or (node_north.name == corner and node_north.param2 == 3)) | ||||
| 			then | ||||
| 				minetest.swap_node(pos, {name=corner, param2=0}) | ||||
| 			end | ||||
|  | ||||
| 				if ((node_north.name == roof and node_north.param2 == 1) | ||||
| 				or (node_north.name == corner and node_north.param2 == 2)) | ||||
| 				and ((node_east.name == roof and node_east.param2 == 0) | ||||
| 				or (node_east.name == corner and node_east.param2 == 0)) | ||||
| 				then | ||||
| 					minetest.swap_node(pos, {name=corner, param2=1}) | ||||
| 				end | ||||
| 			if ((node_north.name == roof and node_north.param2 == 1) | ||||
| 			or (node_north.name == corner and node_north.param2 == 2)) | ||||
| 			and ((node_east.name == roof and node_east.param2 == 0) | ||||
| 			or (node_east.name == corner and node_east.param2 == 0)) | ||||
| 			then | ||||
| 				minetest.swap_node(pos, {name=corner, param2=1}) | ||||
| 			end | ||||
|  | ||||
| 				if ((node_east.name == roof and node_east.param2 == 2) | ||||
| 				or (node_east.name == corner and node_east.param2 == 3)) | ||||
| 				and ((node_south.name == roof and node_south.param2 == 1) | ||||
| 				or (node_south.name == corner and node_south.param2 == 1)) | ||||
| 				then | ||||
| 					minetest.swap_node(pos, {name=corner, param2=2}) | ||||
| 				end | ||||
| 			if ((node_east.name == roof and node_east.param2 == 2) | ||||
| 			or (node_east.name == corner and node_east.param2 == 3)) | ||||
| 			and ((node_south.name == roof and node_south.param2 == 1) | ||||
| 			or (node_south.name == corner and node_south.param2 == 1)) | ||||
| 			then | ||||
| 				minetest.swap_node(pos, {name=corner, param2=2}) | ||||
| 			end | ||||
|  | ||||
| 				if ((node_south.name == roof and node_south.param2 == 3) | ||||
| 				or (node_south.name == corner and node_south.param2 == 0)) | ||||
| 				and ((node_west.name == roof and node_west.param2 == 2) | ||||
| 				or (node_west.name == corner and node_west.param2 == 2)) | ||||
| 				then | ||||
| 					minetest.swap_node(pos, {name=corner, param2=3}) | ||||
| 				end | ||||
| 		-- corner 2 | ||||
| 				if ((node_west.name == roof and node_west.param2 == 2) | ||||
| 				or (node_west.name == corner_2 and node_west.param2 == 1)) | ||||
| 				and ((node_north.name == roof and node_north.param2 == 1) | ||||
| 				or (node_north.name == corner_2 and node_north.param2 == 3)) | ||||
| 				then | ||||
| 					minetest.swap_node(pos, {name=corner_2, param2=0}) | ||||
| 				end | ||||
| 			if ((node_south.name == roof and node_south.param2 == 3) | ||||
| 			or (node_south.name == corner and node_south.param2 == 0)) | ||||
| 			and ((node_west.name == roof and node_west.param2 == 2) | ||||
| 			or (node_west.name == corner and node_west.param2 == 2)) | ||||
| 			then | ||||
| 				minetest.swap_node(pos, {name=corner, param2=3}) | ||||
| 			end | ||||
| 	-- corner 2 | ||||
| 			if ((node_west.name == roof and node_west.param2 == 2) | ||||
| 			or (node_west.name == corner_2 and node_west.param2 == 1)) | ||||
| 			and ((node_north.name == roof and node_north.param2 == 1) | ||||
| 			or (node_north.name == corner_2 and node_north.param2 == 3)) | ||||
| 			then | ||||
| 				minetest.swap_node(pos, {name=corner_2, param2=0}) | ||||
| 			end | ||||
|  | ||||
| 				if ((node_north.name == roof and node_north.param2 == 3) | ||||
| 				or (node_north.name == corner_2 and node_north.param2 == 2)) | ||||
| 				and ((node_east.name == roof and node_east.param2 == 2) | ||||
| 				or (node_east.name == corner_2 and node_east.param2 == 0)) | ||||
| 				then | ||||
| 					minetest.swap_node(pos, {name=corner_2, param2=1}) | ||||
| 				end | ||||
| 			if ((node_north.name == roof and node_north.param2 == 3) | ||||
| 			or (node_north.name == corner_2 and node_north.param2 == 2)) | ||||
| 			and ((node_east.name == roof and node_east.param2 == 2) | ||||
| 			or (node_east.name == corner_2 and node_east.param2 == 0)) | ||||
| 			then | ||||
| 				minetest.swap_node(pos, {name=corner_2, param2=1}) | ||||
| 			end | ||||
|  | ||||
| 				if ((node_east.name == roof and node_east.param2 == 0) | ||||
| 				or (node_east.name == corner_2 and node_east.param2 == 3)) | ||||
| 				and ((node_south.name == roof and node_south.param2 == 3) | ||||
| 				or (node_south.name == corner_2 and node_south.param2 == 1)) | ||||
| 				then | ||||
| 					minetest.swap_node(pos, {name=corner_2, param2=2}) | ||||
| 				end | ||||
| 			if ((node_east.name == roof and node_east.param2 == 0) | ||||
| 			or (node_east.name == corner_2 and node_east.param2 == 3)) | ||||
| 			and ((node_south.name == roof and node_south.param2 == 3) | ||||
| 			or (node_south.name == corner_2 and node_south.param2 == 1)) | ||||
| 			then | ||||
| 				minetest.swap_node(pos, {name=corner_2, param2=2}) | ||||
| 			end | ||||
|  | ||||
| 				if ((node_south.name == roof and node_south.param2 == 1) | ||||
| 				or (node_south.name == corner_2 and node_south.param2 == 0)) | ||||
| 				and ((node_west.name == roof and node_west.param2 == 0) | ||||
| 				or (node_west.name == corner_2 and node_west.param2 == 2)) | ||||
| 				then | ||||
| 					minetest.swap_node(pos, {name=corner_2, param2=3}) | ||||
| 				end | ||||
| 			if ((node_south.name == roof and node_south.param2 == 1) | ||||
| 			or (node_south.name == corner_2 and node_south.param2 == 0)) | ||||
| 			and ((node_west.name == roof and node_west.param2 == 0) | ||||
| 			or (node_west.name == corner_2 and node_west.param2 == 2)) | ||||
| 			then | ||||
| 				minetest.swap_node(pos, {name=corner_2, param2=3}) | ||||
| 			end | ||||
|  | ||||
| 			end, | ||||
| 		}) | ||||
| 	end | ||||
| 		end, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Wet Reed Roof Corner | ||||
| -- Wet Reed Roof Corner 1 | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| minetest.register_node("dryplants:wetreed_roof_corner", { | ||||
| 	description = S("Wet Reed Roof Corner"), | ||||
| 	description = S("Wet Reed Roof Corner 1"), | ||||
| 	drawtype = "nodebox", | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| @@ -233,31 +230,28 @@ minetest.register_node("dryplants:wetreed_roof_corner_2", { | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Wet Reed becomes (dry) Reed over time | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| if REED_WILL_DRY == true then | ||||
|  | ||||
| 	local DRyiNG = { | ||||
| local DRyiNG = { | ||||
| --		  WeT									 DRy | ||||
| 		{"dryplants:wetreed",					"dryplants:reed"}, | ||||
| 		{"dryplants:wetreed_slab",				"dryplants:reed_slab"}, | ||||
| 		{"dryplants:wetreed_roof",				"dryplants:reed_roof"}, | ||||
| 		{"dryplants:wetreed_roof_corner",		"dryplants:reed_roof_corner"}, | ||||
| 		{"dryplants:wetreed_roof_corner_2",		"dryplants:reed_roof_corner_2"} | ||||
| 	} | ||||
| 	for i in pairs(DRyiNG) do | ||||
| 	{"dryplants:wetreed",					"dryplants:reed"}, | ||||
| 	{"dryplants:wetreed_slab",				"dryplants:reed_slab"}, | ||||
| 	{"dryplants:wetreed_roof",				"dryplants:reed_roof"}, | ||||
| 	{"dryplants:wetreed_roof_corner",		"dryplants:reed_roof_corner"}, | ||||
| 	{"dryplants:wetreed_roof_corner_2",		"dryplants:reed_roof_corner_2"} | ||||
| } | ||||
| for i in pairs(DRyiNG) do | ||||
|  | ||||
| 		local WeT = DRyiNG[i][1] | ||||
| 		local DRy = DRyiNG[i][2] | ||||
| 	local WeT = DRyiNG[i][1] | ||||
| 	local DRy = DRyiNG[i][2] | ||||
|  | ||||
| 		minetest.register_abm({ | ||||
| 			nodenames = {WeT}, | ||||
| 			interval = REED_DRYING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle | ||||
| 			chance = 1, | ||||
| 			action = function(pos) | ||||
| 				local direction = minetest.get_node(pos).param2 | ||||
| 				minetest.swap_node(pos, {name=DRy, param2=direction}) | ||||
| 			end, | ||||
| 		}) | ||||
| 	end | ||||
| 	minetest.register_abm({ | ||||
| 		nodenames = {WeT}, | ||||
| 		interval = 3600, --1200, -- 20 minutes: a minetest-day/night-cycle | ||||
| 		chance = 1, | ||||
| 		action = function(pos) | ||||
| 			local direction = minetest.get_node(pos).param2 | ||||
| 			minetest.swap_node(pos, {name=DRy, param2=direction}) | ||||
| 		end, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| @@ -322,10 +316,10 @@ minetest.register_node("dryplants:reed_roof", { | ||||
| }) | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Reed Roof Corner | ||||
| -- Reed Roof Corner 1 | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| minetest.register_node("dryplants:reed_roof_corner", { | ||||
| 	description = S("Reed Roof Corner"), | ||||
| 	description = S("Reed Roof Corner 1"), | ||||
| 	drawtype = "nodebox", | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
|   | ||||
| @@ -1,13 +1,3 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Grasses - Reedmace 0.1.1 | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- by Mossmanikin | ||||
| -- textures & ideas partly by Neuromancer | ||||
|  | ||||
| -- Contains code from:		biome_lib | ||||
| -- Looked at code from:		default, trees | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| -- NOTES (from wikipedia, some of this might get implemented) | ||||
| -- rhizomes are edible | ||||
| -- outer portion of young plants can be peeled and the heart can be eaten raw or boiled and eaten like asparagus | ||||
| @@ -20,21 +10,20 @@ | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("dryplants") | ||||
|  | ||||
| local random = math.random | ||||
| local sqrt = math.sqrt | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- REEDMACE SHAPES | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| abstract_dryplants.grow_reedmace = function(pos) | ||||
| 	local size = random(1,3) | ||||
| 	local spikes = random(1,3) | ||||
| local function grow_reedmace(pos) | ||||
| 	local size = math.random(1,3) | ||||
| 	local spikes = math.random(1,3) | ||||
| 	local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} | ||||
| 	local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z} | ||||
| 	local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z} | ||||
| 	if minetest.get_node(pos_01).name == "air"  -- bug fix | ||||
| 	or minetest.get_node(pos_01).name == "dryplants:reedmace_sapling" then | ||||
|  | ||||
| 	local nodename = minetest.get_node(pos_01).name | ||||
| 	if nodename == "air"  -- bug fix | ||||
| 	or nodename == "dryplants:reedmace_sapling" then | ||||
| 		if minetest.get_node(pos_02).name ~= "air" then | ||||
| 			minetest.swap_node(pos_01, {name="dryplants:reedmace_top"}) | ||||
| 		elseif minetest.get_node(pos_03).name ~= "air" then | ||||
| @@ -53,14 +42,16 @@ abstract_dryplants.grow_reedmace = function(pos) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| abstract_dryplants.grow_reedmace_water = function(pos) | ||||
| 	local size = random(1,3) | ||||
| 	local spikes = random(1,3) | ||||
| local function grow_reedmace_water(pos) | ||||
| 	local size = math.random(1,3) | ||||
| 	local spikes = math.random(1,3) | ||||
| 	local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z} | ||||
| 	local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z} | ||||
| 	local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z} | ||||
| 	local pos_04 = {x = pos.x, y = pos.y + 4, z = pos.z} | ||||
|  | ||||
| 	minetest.add_entity(pos_01, "dryplants:reedmace_water_entity") | ||||
|  | ||||
| 	if minetest.get_node(pos_02).name == "air" then -- bug fix | ||||
| 		if minetest.get_node(pos_03).name ~= "air" then | ||||
| 			minetest.swap_node(pos_02, {name="dryplants:reedmace_top"}) | ||||
| @@ -80,6 +71,8 @@ abstract_dryplants.grow_reedmace_water = function(pos) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| abstract_dryplants.grow_reedmace = grow_reedmace -- compatibility | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- REEDMACE SPIKES | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| @@ -130,7 +123,7 @@ minetest.register_node("dryplants:reedmace_top", { | ||||
| minetest.register_node("dryplants:reedmace_height_2", { | ||||
| 	description = S("Reedmace, height: 2"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = sqrt(8), | ||||
| 	visual_scale = math.sqrt(8), | ||||
| 	paramtype = "light", | ||||
| 	tiles = {"dryplants_reedmace_height_2.png"}, | ||||
| 	inventory_image = "dryplants_reedmace_top.png", | ||||
| @@ -153,7 +146,7 @@ minetest.register_node("dryplants:reedmace_height_2", { | ||||
| minetest.register_node("dryplants:reedmace_height_3", { | ||||
| 	description = S("Reedmace, height: 3"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = sqrt(8), | ||||
| 	visual_scale = math.sqrt(8), | ||||
| 	paramtype = "light", | ||||
| 	tiles = {"dryplants_reedmace_height_3.png"}, | ||||
| 	inventory_image = "dryplants_reedmace_top.png", | ||||
| @@ -176,7 +169,7 @@ minetest.register_node("dryplants:reedmace_height_3", { | ||||
| minetest.register_node("dryplants:reedmace_height_3_spikes", { | ||||
| 	description = S("Reedmace, height: 3 & Spikes"), | ||||
| 	drawtype = "plantlike", | ||||
| 	visual_scale = sqrt(8), | ||||
| 	visual_scale = math.sqrt(8), | ||||
| 	paramtype = "light", | ||||
| 	tiles = {"dryplants_reedmace_height_3_spikes.png"}, | ||||
| 	inventory_image = "dryplants_reedmace_top.png", | ||||
| @@ -279,19 +272,19 @@ minetest.register_node("dryplants:reedmace_sapling", { | ||||
| -- abm | ||||
| minetest.register_abm({ | ||||
| 	nodenames = "dryplants:reedmace_sapling", | ||||
| 	interval = REEDMACE_GROWING_TIME, | ||||
| 	chance = 100/REEDMACE_GROWING_CHANCE, | ||||
| 	interval = 600, | ||||
| 	chance = 100/5, | ||||
| 	action = function(pos, node, _, _) | ||||
| 		if string.find(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z	 }).name, "default:water") | ||||
| 		or string.find(minetest.get_node({x = pos.x,	 y = pos.y, z = pos.z + 1}).name, "default:water") | ||||
| 		or string.find(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z	 }).name, "default:water") | ||||
| 		or string.find(minetest.get_node({x = pos.x,	 y = pos.y, z = pos.z - 1}).name, "default:water") then | ||||
| 			if minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then | ||||
| 				abstract_dryplants.grow_reedmace_water({x = pos.x, y = pos.y - 1, z = pos.z}) | ||||
| 				grow_reedmace_water({x = pos.x, y = pos.y - 1, z = pos.z}) | ||||
| 			end | ||||
| 			minetest.swap_node({x=pos.x, y=pos.y, z=pos.z}, {name="default:water_source"}) | ||||
| 		else | ||||
| 			abstract_dryplants.grow_reedmace({x = pos.x, y = pos.y - 1, z = pos.z}) | ||||
| 			grow_reedmace({x = pos.x, y = pos.y - 1, z = pos.z}) | ||||
| 		end | ||||
|     end | ||||
| }) | ||||
| @@ -321,7 +314,7 @@ minetest.register_entity("dryplants:reedmace_water_entity",{ | ||||
| 	collisionbox = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}, | ||||
| 	on_punch = function(self, puncher) | ||||
| 		if puncher:is_player() and puncher:get_inventory() then | ||||
| 			if not minetest.setting_getbool("creative_mode") then | ||||
| 			if not minetest.is_creative_enabled(puncher:get_player_name()) then | ||||
| 				puncher:get_inventory():add_item("main", "dryplants:reedmace_sapling") | ||||
| 			end | ||||
| 			self.object:remove() | ||||
| @@ -329,89 +322,120 @@ minetest.register_entity("dryplants:reedmace_water_entity",{ | ||||
| 	end, | ||||
| }) | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- SPAWN REEDMACE | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| --[[biome_lib.register_active_spawner({ | ||||
| 	spawn_delay = 1200, | ||||
| 	spawn_plants = {"dryplants:reedmace_sapling"}, | ||||
| 	spawn_chance = 400, | ||||
| 	spawn_surfaces = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"default:desert_sand", | ||||
| 		"default:sand", | ||||
| 		"dryplants:grass_short", | ||||
| 		"stoneage:grass_with_silex" | ||||
| 	}, | ||||
| 	seed_diff = 329, | ||||
| 	near_nodes = {"default:water_source"}, | ||||
| 	near_nodes_size = 2, | ||||
| 	near_nodes_vertical = 1, | ||||
| 	near_nodes_count = 1, | ||||
| })]] | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- GENERATE REEDMACE | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- near water or swamp | ||||
| biome_lib.register_on_generate({ | ||||
|     surface = { | ||||
| minetest.register_decoration({ | ||||
| 	name = "dryplants:reedmace_swamp", | ||||
| 	decoration = {"air"}, | ||||
| 	fill_ratio = "0.05", | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass", | ||||
| 		"default:desert_sand", | ||||
| 		"stoneage:grass_with_silex", | ||||
| 		"sumpf:peat", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
|     max_count = REEDMACE_NEAR_WATER_PER_MAPBLOCK, | ||||
|     rarity = 101 - REEDMACE_NEAR_WATER_RARITY, | ||||
| 	--rarity = 60, | ||||
|     min_elevation = 1, -- above sea level | ||||
| 	near_nodes = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"}, | ||||
| 	near_nodes_size = 2, | ||||
| 	near_nodes_vertical = 1, | ||||
| 	near_nodes_count = 1, | ||||
|     plantlife_limit = -0.9, | ||||
|   }, | ||||
|   abstract_dryplants.grow_reedmace | ||||
| ) | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| 	spawn_by = { | ||||
| 		"default:water_source", | ||||
| 		"sumpf:dirtywater_source", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
| 	check_offset = -1, | ||||
| 	num_spawn_by = 1 | ||||
| }) | ||||
|  | ||||
| -- in water | ||||
| biome_lib.register_on_generate({ | ||||
|     surface = { | ||||
| minetest.register_decoration({ | ||||
| 	name = "dryplants:reedmace_water", | ||||
| 	decoration = {"air"}, | ||||
| 	fill_ratio = "0.01", | ||||
| 	y_min = 0, | ||||
| 	y_max = 0, | ||||
| 	place_on = { | ||||
| 		"default:dirt", | ||||
| 		"default:dirt_with_grass", | ||||
| 		--"default:desert_sand", | ||||
| 		--"stoneage:grass_with_silex", | ||||
| 		"stoneage:sand_with_silex", | ||||
| 		"sumpf:peat", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
|     max_count = REEDMACE_IN_WATER_PER_MAPBLOCK, | ||||
| 	rarity = 101 - REEDMACE_IN_WATER_RARITY, | ||||
|     --rarity = 35, | ||||
|     min_elevation = 0, -- a bit below sea level | ||||
| 	max_elevation = 0, -- "" | ||||
| 	near_nodes = {"default:water_source","sumpf:dirtywater_source"}, | ||||
| 	near_nodes_size = 1, | ||||
| 	near_nodes_count = 1, | ||||
|     plantlife_limit = -0.9, | ||||
|   }, | ||||
|   abstract_dryplants.grow_reedmace_water | ||||
| ) | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| 	spawn_by = { | ||||
| 		"default:water_source", | ||||
| 		"sumpf:dirtywater_source" | ||||
| 	}, | ||||
| 	check_offset = -1, | ||||
| 	num_spawn_by = 1 | ||||
| }) | ||||
|  | ||||
| -- for oases & tropical beaches & tropical swamps | ||||
| biome_lib.register_on_generate({ | ||||
|     surface = { | ||||
| minetest.register_decoration({ | ||||
| 	name = "dryplants:reedmace_beach", | ||||
| 	decoration = {"air"}, | ||||
| 	fill_ratio = "0.05", | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:sand", | ||||
| 		"sumpf:sumpf" | ||||
| 	}, | ||||
|     max_count = REEDMACE_FOR_OASES_PER_MAPBLOCK, | ||||
|     rarity = 101 - REEDMACE_FOR_OASES_RARITY, | ||||
| 	--rarity = 10, | ||||
|     neighbors = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"}, | ||||
| 	ncount = 1, | ||||
|     min_elevation = 1, -- above sea level | ||||
| 	near_nodes = {"default:desert_sand","sumpf:sumpf"}, | ||||
| 	near_nodes_size = 2, | ||||
| 	near_nodes_vertical = 1, | ||||
| 	near_nodes_count = 1, | ||||
|     plantlife_limit = -0.9, | ||||
|   }, | ||||
|   abstract_dryplants.grow_reedmace | ||||
| ) | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| 	spawn_by = { | ||||
| 		"default:water_source", | ||||
| 		"sumpf:dirtywater_source", | ||||
| 		"sumpf:sumpf", | ||||
| 		"default:desert_sand" | ||||
| 	}, | ||||
| 	check_offset = -1, | ||||
| 	num_spawn_by = 1 | ||||
| }) | ||||
|  | ||||
| local did, did2, did3 | ||||
| minetest.register_on_mods_loaded(function() | ||||
| 	did = minetest.get_decoration_id("dryplants:reedmace_swamp") | ||||
| 	did2 = minetest.get_decoration_id("dryplants:reedmace_water") | ||||
| 	did3 = minetest.get_decoration_id("dryplants:reedmace_beach") | ||||
| 	minetest.set_gen_notify("decoration", {did, did2, did3}) | ||||
| end) | ||||
|  | ||||
| minetest.register_on_generated(function(minp, maxp, blockseed) | ||||
| 	local g = minetest.get_mapgen_object("gennotify") | ||||
| 	local locations = {} | ||||
|  | ||||
| 	local deco_locations_1 = g["decoration#" .. did] or {} | ||||
| 	local deco_locations_3 = g["decoration#" .. did3] or {} | ||||
|  | ||||
| 	for _, pos in pairs(deco_locations_1) do | ||||
| 		locations[#locations+1] = pos | ||||
| 	end | ||||
| 	for _, pos in pairs(deco_locations_3) do | ||||
| 		locations[#locations+1] = pos | ||||
| 	end | ||||
|  | ||||
| 	if #locations == 0 then return end | ||||
| 	for _, pos in ipairs(locations) do | ||||
| 		grow_reedmace(pos) | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| minetest.register_on_generated(function(minp, maxp, blockseed) | ||||
| 	local g = minetest.get_mapgen_object("gennotify") | ||||
| 	local locations = {} | ||||
|  | ||||
| 	local deco_locations_2 = g["decoration#" .. did2] or {} | ||||
|  | ||||
| 	for _, pos in pairs(deco_locations_2) do | ||||
| 		locations[#locations+1] = pos | ||||
| 	end | ||||
|  | ||||
| 	if #locations == 0 then return end | ||||
| 	for _, pos in ipairs(locations) do | ||||
| 		grow_reedmace_water(pos) | ||||
| 	end | ||||
| end) | ||||
|   | ||||
| @@ -1,52 +0,0 @@ | ||||
| -- Here you can enable/disable the different plants | ||||
| REEDMACE_GENERATES 					= 	true | ||||
| SMALL_JUNCUS_GENERATES 				= 	true | ||||
| EXTRA_TALL_GRASS_GENERATES 			= 	true | ||||
|  | ||||
|  | ||||
|  | ||||
| -- Amount of Reedmace near water or swamp | ||||
| REEDMACE_NEAR_WATER_PER_MAPBLOCK	=	35		-- plants per 80x80x80 nodes (absolute maximum number) | ||||
| REEDMACE_NEAR_WATER_RARITY			=	40		-- percent | ||||
|  | ||||
| -- Amount of Reedmace in water | ||||
| REEDMACE_IN_WATER_PER_MAPBLOCK		=	35		-- plants per 80x80x80 nodes (absolute maximum number) | ||||
| REEDMACE_IN_WATER_RARITY			=	65		-- percent | ||||
|  | ||||
| -- Amount of Reedmace for oases, tropical beaches and tropical swamps | ||||
| REEDMACE_FOR_OASES_PER_MAPBLOCK		=	35		-- plants per 80x80x80 nodes (absolute maximum number) | ||||
| REEDMACE_FOR_OASES_RARITY			=	90		-- percent | ||||
|  | ||||
| -- growing of reedmace sapling | ||||
| REEDMACE_GROWING_TIME 				= 	600  	-- seconds | ||||
| REEDMACE_GROWING_CHANCE 			= 	5		-- percent | ||||
|  | ||||
|  | ||||
|  | ||||
| -- Amount of small Juncus near water or swamp | ||||
| JUNCUS_NEAR_WATER_PER_MAPBLOCK		=	70		-- plants per 80x80x80 nodes (absolute maximum number) | ||||
| JUNCUS_NEAR_WATER_RARITY			=	75		-- percent | ||||
|  | ||||
| -- Amount of small Juncus at dunes/beach | ||||
| JUNCUS_AT_BEACH_PER_MAPBLOCK		=	70		-- plants per 80x80x80 nodes (absolute maximum number) | ||||
| JUNCUS_AT_BEACH_RARITY				=	75		-- percent | ||||
|  | ||||
|  | ||||
|  | ||||
| -- Tall Grass on dirt with grass | ||||
| TALL_GRASS_PER_MAPBLOCK				=	4800	-- plants per 80x80x80 nodes (absolute maximum number) | ||||
| TALL_GRASS_RARITY					=	75		-- percent | ||||
|  | ||||
|  | ||||
|  | ||||
| -- short grass becomes dirt with grass again | ||||
| GRASS_REGROWING_TIME 				= 	1200 	-- seconds | ||||
| GRASS_REGROWING_CHANCE 				= 	5		-- percent | ||||
|  | ||||
| HAY_DRYING_TIME 					= 	3600 	-- seconds | ||||
|  | ||||
| REED_WILL_DRY 						= 	false	-- wet reed nodes will become dry reed nodes | ||||
| REED_DRYING_TIME 					= 	3600 	-- seconds | ||||
|  | ||||
| AUTO_ROOF_CORNER 					= 	false | ||||
| 	 | ||||
| @@ -30,7 +30,7 @@ minetest.register_craft({ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- FIDDLEHEAD | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| minetest.register_alias("archaeplantae:fiddlehead",      "ferns:fiddlehead") | ||||
| minetest.register_alias("archaeplantae:fiddlehead", "ferns:fiddlehead") | ||||
|  | ||||
| minetest.register_craftitem("ferns:fiddlehead", { | ||||
| 	description = S("Fiddlehead"), | ||||
| @@ -51,7 +51,7 @@ minetest.register_craftitem("ferns:fiddlehead_roasted", { | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- FERN TUBER | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| minetest.register_alias("archaeplantae:ferntuber",      "ferns:ferntuber") | ||||
| minetest.register_alias("archaeplantae:ferntuber", "ferns:ferntuber") | ||||
|  | ||||
| minetest.register_craftitem("ferns:ferntuber", { | ||||
| 	description = S("Fern Tuber"), | ||||
| @@ -64,7 +64,7 @@ minetest.register_craft({ | ||||
| 	cooktime = 3, | ||||
| }) | ||||
|  | ||||
| minetest.register_alias("archaeplantae:ferntuber_roasted",      "ferns:ferntuber_roasted") | ||||
| minetest.register_alias("archaeplantae:ferntuber_roasted", "ferns:ferntuber_roasted") | ||||
|  | ||||
| minetest.register_craftitem("ferns:ferntuber_roasted", { | ||||
| 	description = S("Roasted Fern Tuber"), | ||||
|   | ||||
| @@ -84,8 +84,8 @@ abstract_ferns.grow_giant_tree_fern = function(pos) | ||||
| 	local brk = false | ||||
| 	for i = 1, size-3 do | ||||
| 		pos_aux.y = pos.y + i | ||||
| 		local name = minetest.get_node(pos_aux).name | ||||
| 		if not (name == "air" or (i == 1 and name == "ferns:sapling_giant_tree_fern")) then | ||||
| 		local nodename = minetest.get_node(pos_aux).name | ||||
| 		if not (nodename == "air" or (i == 1 and nodename == "ferns:sapling_giant_tree_fern")) then | ||||
| 			brk = true | ||||
| 			break | ||||
| 		end | ||||
|   | ||||
| @@ -34,13 +34,13 @@ local function create_nodes() | ||||
| 		local node_drop = "ferns:horsetail_04" | ||||
|  | ||||
| 		if i == 1 then | ||||
| 			node_desc = S("Young Horsetail (Equisetum)") | ||||
| 			node_desc = S("Young Horsetail (Equisetum) @1", 1) | ||||
| 			node_on_use = minetest.item_eat(1) -- young ones edible https://en.wikipedia.org/wiki/Equisetum | ||||
| 			node_drop = node_name | ||||
| 		elseif i == 4 then | ||||
| 			node_desc = S("Horsetail (Equisetum)") | ||||
| 		else | ||||
| 			node_desc = S("Horsetail (Equisetum)").." ".. string.format("%02d", i) | ||||
| 			node_desc = S("Horsetail (Equisetum) @1", i) | ||||
| 		end | ||||
|  | ||||
| 		node_names[i] = node_name | ||||
| @@ -75,13 +75,10 @@ create_nodes() | ||||
| -- Spawning | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| if abstract_ferns.config.enable_horsetails_spawning == true then | ||||
| 	biome_lib.register_active_spawner({ | ||||
| 		spawn_delay = 1200, | ||||
| 		spawn_plants = node_names, | ||||
| 		spawn_chance = 400, | ||||
| 		spawn_surfaces = { | ||||
| 	minetest.register_abm({ | ||||
| 		nodenames = { | ||||
| 			"default:dirt_with_grass", | ||||
| 			"default:dirt_with_coniferous_litter", -- minetest >= 0.5 | ||||
| 			"default:dirt_with_coniferous_litter", | ||||
| 			"default:desert_sand", | ||||
| 			"default:sand", | ||||
| 			"dryplants:grass_short", | ||||
| @@ -89,13 +86,28 @@ if abstract_ferns.config.enable_horsetails_spawning == true then | ||||
| 			"default:mossycobble", | ||||
| 			"default:gravel" | ||||
| 		}, | ||||
| 		seed_diff = 329, | ||||
| 		min_elevation = 1, -- above sea level | ||||
| 		near_nodes = {"default:water_source","default:river_water_source","default:gravel"}, | ||||
| 		near_nodes_size = 2, | ||||
| 		near_nodes_vertical = 1, | ||||
| 		near_nodes_count = 1, | ||||
| 		--random_facedir = { 0, 179 }, | ||||
| 		interval = 1200, | ||||
| 		chance = 400, | ||||
| 		label = "[ferns] spawn horsetails", | ||||
| 		min_y = 1, | ||||
| 		max_y = 48, | ||||
| 		action = function(pos, node) | ||||
| 			local p_top = {x = pos.x, y = pos.y + 1, z = pos.z} | ||||
| 			local n_top = minetest.get_node_or_nil(p_top) | ||||
| 			if not n_top or n_top.name ~= "air" then return end | ||||
|  | ||||
| 			local NEAR_DST = 2 | ||||
| 			if #minetest.find_nodes_in_area( | ||||
| 					{x=pos.x-NEAR_DST, y=pos.y-1, z=pos.z-NEAR_DST}, | ||||
| 					{x=pos.x+NEAR_DST, y=pos.y+1, z=pos.z+NEAR_DST}, | ||||
| 					{"default:water_source","default:river_water_source","default:gravel"} | ||||
| 				) < 1 then return | ||||
| 			end | ||||
|  | ||||
| 			local plant_to_spawn = node_names[math.random(1, #node_names)] | ||||
|  | ||||
| 			minetest.swap_node(p_top, {name = plant_to_spawn, param2 = 0}) | ||||
| 		end | ||||
| 	}) | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -1,16 +1,5 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| local title		= "Ferns" -- former "Archae Plantae" | ||||
| local version	= "0.2.1" | ||||
| local mname		= "ferns" -- former "archaeplantae" | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- (by Mossmanikin) | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| abstract_ferns = {} | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("ferns") | ||||
|  | ||||
| dofile(minetest.get_modpath("ferns").."/settings.lua") | ||||
|  | ||||
| if abstract_ferns.config.enable_lady_fern == true then | ||||
| @@ -30,42 +19,3 @@ if abstract_ferns.config.enable_giant_treefern == true then | ||||
| end | ||||
|  | ||||
| dofile(minetest.get_modpath("ferns").."/crafting.lua") | ||||
|  | ||||
|  | ||||
| ----------------------------------------------------------------------------- | ||||
| -- TESTS | ||||
| ----------------------------------------------------------------------------- | ||||
| local run_tests = true	-- set to false to skip | ||||
|  | ||||
| if run_tests then | ||||
|  | ||||
| 	-- These are, essentially, unit tests to make sure that all required item | ||||
| 	-- strings are registered. The init sequence is not time critical so leaving | ||||
| 	-- them here won't affect performance. | ||||
|  | ||||
| 	-- Check node names | ||||
| 	if abstract_ferns.config.enable_horsetails then | ||||
| 		print("[Mod] " ..title.. " Checking horsetail item strings") | ||||
| 		assert(minetest.registered_items["ferns:horsetail_01"] ~= nil) | ||||
| 		assert(minetest.registered_items["ferns:horsetail_02"] ~= nil) | ||||
| 		assert(minetest.registered_items["ferns:horsetail_03"] ~= nil) | ||||
| 		assert(minetest.registered_items["ferns:horsetail_04"] ~= nil) | ||||
| 	end | ||||
| 	if abstract_ferns.config.enable_lady_fern then | ||||
| 		print("[Mod] ".. title .." Checking lady fern item strings") | ||||
| 		assert(minetest.registered_items["ferns:fern_01"] ~= nil) | ||||
| 		assert(minetest.registered_items["ferns:fern_02"] ~= nil) | ||||
| 		assert(minetest.registered_items["ferns:fern_03"] ~= nil) | ||||
| 	end | ||||
| 	if abstract_ferns.config.enable_treefern then | ||||
| 		print("[Mod] ".. title .." Checking tree fern item strings") | ||||
| 		assert(minetest.registered_items["ferns:tree_fern_leaves"] ~= nil) | ||||
| 		assert(minetest.registered_items["ferns:tree_fern_leaves_02"] ~= nil) | ||||
| 		assert(minetest.registered_items["ferns:fern_trunk"] ~= nil) | ||||
| 		assert(minetest.registered_items["ferns:sapling_tree_fern"] ~= nil) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|   | ||||
| @@ -1,23 +1,16 @@ | ||||
| # textdomain: ferns | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # reusityback, 2022. | ||||
| # | ||||
|  | ||||
|  | ||||
| Fiddlehead=Geigenkopf | ||||
| Roasted Fiddlehead=Gerösteter Geigenkopf | ||||
| Fern Tuber=Farnknolle | ||||
| Roasted Fern Tuber=Geröstete Farnknolle | ||||
| Lady-fern (Athyrium)=Frauenfarn (Athyrium) | ||||
| Tree Fern Crown (Dicksonia)=Baumfarnkrone (Dicksonia) | ||||
| Giant Tree Fern Leaves=Riesige Baumfarnblätter | ||||
| Giant Tree Fern Leave End=Riesiges Baumfarnblattende | ||||
| Giant Fern Trunk=Riesiger Baumfarnstamm | ||||
| Giant Tree Fern Sapling=Riesiger Baumfarnsetzling | ||||
| Young Horsetail (Equisetum)=Junger Schachtelhalm (Equisetum) | ||||
| Tree Fern Crown (Dicksonia)=Baumfarnkrone (Dicksonia) | ||||
| Young Horsetail (Equisetum) @1=Junger Schachtelhalm (Equisetum) @1 | ||||
| Horsetail (Equisetum)=Schachtelhalm (Equisetum) | ||||
| Horsetail (Equisetum) @1= Schachtelhalm (Equisetum) @1 | ||||
| Fern Trunk (Dicksonia)=Farnstamm (Dicksonia) | ||||
| Tree Fern Sapling (Dicksonia)=Baumfarnsetzling (Dicksonia) | ||||
|   | ||||
| @@ -1,23 +1,16 @@ | ||||
| # textdomain: ferns | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
|  | ||||
| Fiddlehead=Filika Supro | ||||
| Roasted Fiddlehead=Rostita Filika Supro | ||||
| Fern Tuber=Filika Tubero | ||||
| Roasted Fern Tuber=Rostita Filika Tubero | ||||
| Lady-fern (Athyrium)=Afiriumo (Athyrium) | ||||
| Tree Fern Crown (Dicksonia)=Krono de Arba Filiko | ||||
| Giant Tree Fern Leaves=Folioj de Giganta Arba Filiko | ||||
| Giant Tree Fern Leave End=Folifino de Giganta Arba Filiko | ||||
| Giant Fern Trunk=Trunko de Giganta Arba Filiko | ||||
| Giant Tree Fern Sapling=Arbido de Giganta Arba Filiko | ||||
| Young Horsetail (Equisetum)=Juna Ekvizeto (Equisetum) | ||||
| Tree Fern Crown (Dicksonia)=Krono de Arba Filiko | ||||
| Young Horsetail (Equisetum) @1=Juna Ekvizeto (Equisetum) @1 | ||||
| Horsetail (Equisetum)=Ekvizeto (Equisetum) | ||||
| Horsetail (Equisetum) @1=Ekvizeto (Equisetum) @1 | ||||
| Fern Trunk (Dicksonia)=Trunko de Arba Filiko (Dicksonia) | ||||
| Tree Fern Sapling (Dicksonia)=Arbido de Arba Filiko (Dicksonia) | ||||
|   | ||||
| @@ -1,22 +1,16 @@ | ||||
| # textdomain: ferns | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Fiddlehead=Crosse de fougère | ||||
| Roasted Fiddlehead=Crosse de fougère rôtie | ||||
| Fern Tuber=Tubercule de fougère | ||||
| Roasted Fern Tuber=Tubercule de fougère rôti | ||||
| Lady-fern (Athyrium)=Fougère (Athyrium) | ||||
| Tree Fern Crown (Dicksonia)=Fougère en couronne (Dicksonia) | ||||
| Giant Tree Fern Leaves=Feuilles de fougère géante | ||||
| Giant Tree Fern Leave End=Feuilles de fougère géante (extrémité) | ||||
| Giant Fern Trunk=Tronc de fougère géante | ||||
| Giant Tree Fern Sapling=Pousse de fougère géante | ||||
| Young Horsetail (Equisetum)=Pousse de prêle (Equisetum) | ||||
| Tree Fern Crown (Dicksonia)=Fougère en couronne (Dicksonia) | ||||
| Young Horsetail (Equisetum) @1=Pousse de prêle (Equisetum) @1 | ||||
| Horsetail (Equisetum)=Prêle (Equisetum) | ||||
| Horsetail (Equisetum) @1=Prêle (Equisetum) @1 | ||||
| Fern Trunk (Dicksonia)=Tronc de fougère en couronne (Dicksonia) | ||||
| Tree Fern Sapling (Dicksonia)=Pousse de fougère en couronne (Dicksonia) | ||||
|   | ||||
| @@ -1,23 +1,16 @@ | ||||
| # textdomain: ferns | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
|  | ||||
| Fiddlehead= | ||||
| Roasted Fiddlehead= | ||||
| Fern Tuber= | ||||
| Roasted Fern Tuber= | ||||
| Lady-fern (Athyrium)= | ||||
| Tree Fern Crown (Dicksonia)= | ||||
| Giant Tree Fern Leaves= | ||||
| Giant Tree Fern Leave End= | ||||
| Giant Fern Trunk= | ||||
| Giant Tree Fern Sapling= | ||||
| Young Horsetail (Equisetum)= | ||||
| Tree Fern Crown (Dicksonia)= | ||||
| Young Horsetail (Equisetum) @1= | ||||
| Horsetail (Equisetum)= | ||||
| Horsetail (Equisetum) @1= | ||||
| Fern Trunk (Dicksonia)= | ||||
| Tree Fern Sapling (Dicksonia)= | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| min_minetest_version = 5.2.0 | ||||
| min_minetest_version = 5.3.0 | ||||
|   | ||||
| @@ -1,20 +1,12 @@ | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Idea by Sokomine | ||||
| -- Code & textures by Mossmanikin | ||||
|  | ||||
| abstract_molehills = {} | ||||
|  | ||||
| local molehills_rarity = tonumber(minetest.settings:get("molehills_rarity")) or 99.5 | ||||
| local molehills_rarity_fertility = tonumber(minetest.settings:get("molehills_rarity_fertility")) or 1 | ||||
| local molehills_fertility = tonumber(minetest.settings:get("molehills_fertility")) or -0.6 | ||||
|  | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("molehills") | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- NoDe | ||||
| ----------------------------------------------------------------------------------------------- | ||||
|  | ||||
| local molehill_rarity = minetest.settings:get("molehills.molehill_rarity") or 0.002 | ||||
|  | ||||
| -- Node | ||||
| local mh_cbox = { | ||||
| 	type = "fixed", | ||||
| 	fixed = { -0.5, -0.5, -0.5, 0.5, -0.125, 0.5} | ||||
| @@ -34,9 +26,7 @@ minetest.register_node("molehills:molehill",{ | ||||
| 	sounds = default.node_sound_dirt_defaults(), | ||||
| }) | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- CRaFTiNG | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- Crafting | ||||
| minetest.register_craft({ -- molehills --> dirt | ||||
| 	output = "default:dirt", | ||||
| 	recipe = { | ||||
| @@ -45,32 +35,19 @@ minetest.register_craft({ -- molehills --> dirt | ||||
| 	} | ||||
| }) | ||||
|  | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| -- GeNeRaTiNG | ||||
| ----------------------------------------------------------------------------------------------- | ||||
| abstract_molehills.place_molehill = function(pos) | ||||
| 	local right_here	= {x=pos.x	, y=pos.y+1, z=pos.z	} | ||||
| 	if	minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z	}).name ~= "air" | ||||
| 	and minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z	}).name ~= "air" | ||||
| 	and minetest.get_node({x=pos.x	, y=pos.y, z=pos.z+1}).name ~= "air" | ||||
| 	and minetest.get_node({x=pos.x	, y=pos.y, z=pos.z-1}).name ~= "air" | ||||
| 	and minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1}).name ~= "air" | ||||
| 	and minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z-1}).name ~= "air" | ||||
| 	and minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1}).name ~= "air" | ||||
| 	and minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1}).name ~= "air" then | ||||
| 		minetest.swap_node(right_here, {name="molehills:molehill"}) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| biome_lib.register_on_generate({ | ||||
| 		surface = {"default:dirt_with_grass"}, | ||||
| 		rarity = molehills_rarity, | ||||
| 		rarity_fertility = molehills_rarity_fertility, | ||||
| 		plantlife_limit = molehills_fertility, | ||||
| 		min_elevation = 1, | ||||
| 		max_elevation = 40, | ||||
| 		avoid_nodes = {"group:tree","group:liquid","group:stone","group:falling_node"--[[,"air"]]}, | ||||
| 		avoid_radius = 4, | ||||
| -- Generating | ||||
| minetest.register_decoration({ | ||||
| 	decoration = { | ||||
| 		"molehills:molehill" | ||||
| 	}, | ||||
| 	abstract_molehills.place_molehill | ||||
| ) | ||||
| 	fill_ratio = molehill_rarity, | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass" | ||||
| 	}, | ||||
| 	spawn_by = "air", | ||||
| 	num_spawn_by = 3, | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| }) | ||||
|   | ||||
| @@ -1,9 +1,2 @@ | ||||
| # textdomain: molehills | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # reusityback, 2022. | ||||
| # | ||||
|  | ||||
| Mole Hill=Maulwurfshügel | ||||
|   | ||||
| @@ -1,9 +1,2 @@ | ||||
| # textdomain: molehills | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
| Mole Hill=Talpa Monteto | ||||
|   | ||||
| @@ -1,9 +1,2 @@ | ||||
| # textdomain: molehills | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Mole Hill=Taupinière | ||||
|   | ||||
| @@ -1,9 +1,2 @@ | ||||
| # textdomain: molehills | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
| Mole Hill= | ||||
|   | ||||
| @@ -1,2 +1,2 @@ | ||||
| name = molehills | ||||
| depends = default, biome_lib | ||||
| depends = default | ||||
|   | ||||
| @@ -1,8 +1,2 @@ | ||||
| #Molehills rarity % | ||||
| molehills_rarity (Molehills rarity %) float 99.5 0 100 | ||||
|  | ||||
| #How much the rarity is reduced by fertility % | ||||
| molehills_rarity_fertility (Molehills rarity fertility reduction %) float 1 0 100 | ||||
|  | ||||
| #Molehills minimum fertility (-1 to +1) | ||||
| molehills_fertility (Molehills minimum fertility) float -0.6 -1 1 | ||||
| # Molehill rarity (higher number -> higher probability) | ||||
| molehills.molehill_rarity (Molehill rarity) float 0.002 0.0001 1 | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  | ||||
| local function process_blossom_queue_item() | ||||
| 	local pos  = nature.blossomqueue[1][1] | ||||
| 	local node = nature.blossomqueue[1][2] | ||||
| 	-- local node = nature.blossomqueue[1][2] | ||||
| 	local replace = nature.blossomqueue[1][3] | ||||
| 	if (nature.blossomqueue[1][3] == nature.blossom_node and not nature:is_near_water(pos)) then | ||||
| 		table.remove(nature.blossomqueue, 1) -- don't grow if it's not near water, pop from queue. | ||||
| @@ -32,7 +32,7 @@ end) | ||||
| function nature.enqueue_node(pos, node, replace) | ||||
| 	local idx = #nature.blossomqueue | ||||
| 	if idx < nature.blossomqueue_max then | ||||
| 		local enqueue_prob = 0 | ||||
| 		local enqueue_prob | ||||
| 		if idx < nature.blossomqueue_max * 0.8 then | ||||
| 			enqueue_prob = 1 | ||||
| 		else | ||||
|   | ||||
| @@ -6,8 +6,6 @@ | ||||
| local current_mod_name = minetest.get_current_modname() | ||||
|  | ||||
| nature = {} | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("nature_classic") | ||||
|  | ||||
| nature.blossomqueue = {} | ||||
| nature.blossomqueue_max = 1000 | ||||
| @@ -25,7 +23,7 @@ if minetest.get_modpath("moretrees") then | ||||
| 	nature.blossom_node = "moretrees:apple_blossoms" | ||||
| 	nature.blossom_leaves = "moretrees:apple_tree_leaves" | ||||
| 	nature.blossom_textures = { "moretrees_apple_tree_leaves.png^nature_blossom.png" } | ||||
|     nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2, moretrees_leaves = 1 }, | ||||
|     nature.blossom_groups = { snappy = 3, leafdecay = 1, leaves = 1, flammable = 2, moretrees_leaves = 1 } | ||||
| 	minetest.register_alias("nature:blossom", "default:leaves") | ||||
| end | ||||
|  | ||||
| @@ -39,10 +37,6 @@ nature.apple_spread = 2 | ||||
| nature.meta_blossom_time = "blossom_time" | ||||
| nature.blossom_duration = nature.blossom_delay | ||||
|  | ||||
| function dumppos(pos) | ||||
| 	return "("..pos.x..","..pos.y..","..pos.z..")" | ||||
| end | ||||
|  | ||||
| dofile(minetest.get_modpath(current_mod_name) .. "/config.lua") | ||||
| dofile(minetest.get_modpath(current_mod_name) .. "/global_function.lua") | ||||
| dofile(minetest.get_modpath(current_mod_name) .. "/blossom.lua") | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: nature_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # reusityback, 2022. | ||||
| # | ||||
|  | ||||
| Apple blossoms=Apfelblüten | ||||
| [Nature Classic] loaded!=[Nature Classic] geladen! | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: nature_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Apple blossoms=Fleurs de pommier | ||||
| [Nature Classic] loaded!=[Nature Classic] chargé.! | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: nature_classic | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
| Apple blossoms= | ||||
| [Nature Classic] loaded!= | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("pl_seaweed") | ||||
|  | ||||
| pl_seaweed = {} | ||||
|  | ||||
| local seaweed_max_count = tonumber(minetest.settings:get("pl_seaweed_max_count")) or 320 | ||||
| local seaweed_rarity = tonumber(minetest.settings:get("pl_seaweed_rarity")) or 33 | ||||
| local seaweed_rarity = minetest.settings:get("pl_seaweed.seaweed_rarity") or 0.06 | ||||
|  | ||||
| local function get_ndef(name) | ||||
| 	return minetest.registered_nodes[name] or {} | ||||
| end | ||||
|  | ||||
| local algae_list = { {nil}, {2}, {3}, {4} } | ||||
|  | ||||
| @@ -47,7 +47,11 @@ for i in ipairs(algae_list) do | ||||
| 		liquids_pointable = true, | ||||
| 		drop = "flowers:seaweed", | ||||
| 		on_place = function(itemstack, placer, pointed_thing) | ||||
| 			local keys=placer:get_player_control() | ||||
| 			if not itemstack or not placer or not pointed_thing then | ||||
| 				return | ||||
| 			end | ||||
|  | ||||
| 			local keys = placer:get_player_control() | ||||
| 			local pt = pointed_thing | ||||
|  | ||||
| 			local place_pos = nil | ||||
| @@ -55,22 +59,21 @@ for i in ipairs(algae_list) do | ||||
| 			local under_node = minetest.get_node(pt.under) | ||||
| 			local above_node = minetest.get_node(pt.above) | ||||
| 			local top_node	 = minetest.get_node(top_pos) | ||||
|  | ||||
| 			if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then | ||||
| 			if get_ndef(under_node.name)["buildable_to"] then | ||||
| 				if under_node.name ~= "default:water_source" then | ||||
| 					place_pos = pt.under | ||||
| 				elseif top_node.name ~= "default:water_source" | ||||
| 							 and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then | ||||
| 				elseif top_node.name ~= "default:water_source" and get_ndef(top_node.name)["buildable_to"] then | ||||
| 					place_pos = top_pos | ||||
| 				else | ||||
| 					return | ||||
| 				end | ||||
| 			elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then | ||||
| 			elseif get_ndef(above_node.name)["buildable_to"] then | ||||
| 				place_pos = pt.above | ||||
| 			end | ||||
| 			if not place_pos then return end -- something went wrong :P | ||||
|  | ||||
| 			if not minetest.is_protected(place_pos, placer:get_player_name()) then | ||||
| 			local pname = placer:get_player_name() | ||||
| 			if not minetest.is_protected(place_pos, pname) then | ||||
|  | ||||
| 			local nodename = "default:cobble" -- :D | ||||
|  | ||||
| @@ -92,78 +95,46 @@ for i in ipairs(algae_list) do | ||||
| 					minetest.swap_node(place_pos, {name = "flowers:seaweed", param2 = fdir}) | ||||
| 				end | ||||
|  | ||||
| 				if not biome_lib.expect_infinite_stacks then | ||||
| 				if not minetest.is_creative_enabled(pname) then | ||||
| 					itemstack:take_item() | ||||
| 				end | ||||
| 				return itemstack | ||||
| 			end | ||||
| 		end, | ||||
| 	}) | ||||
|  | ||||
| 	minetest.register_decoration({ | ||||
| 		name = "flowers:seaweed"..num, | ||||
| 		decoration = {"flowers:seaweed"..num}, | ||||
| 		place_on = {"default:water_source"}, | ||||
| 		deco_type = "simple", | ||||
| 		flags = "liquid_surface", | ||||
| 		spawn_by = {"default:dirt_with_grass", "default:sand"}, | ||||
| 		num_spawn_by = 1, | ||||
| 		fill_ratio = seaweed_rarity, | ||||
| 		check_offset = -1, | ||||
| 		y_min = 1, | ||||
| 		y_max = 1, | ||||
| 	}) | ||||
|  | ||||
| 	minetest.register_decoration({ | ||||
| 		name = "flowers:seaweed"..num .."_sand", | ||||
| 		decoration = {"flowers:seaweed"..num}, | ||||
| 		place_on = {"default:sand"}, | ||||
| 		deco_type = "simple", | ||||
| 		flags = "all_floors", | ||||
| 		spawn_by = "default:water_source", | ||||
| 		num_spawn_by = 1, | ||||
| 		fill_ratio = seaweed_rarity*1.2, | ||||
| 		check_offset = -1, | ||||
| 		y_min = 1, | ||||
| 		y_max = 1, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| pl_seaweed.grow_seaweed = function(pos) | ||||
| 	local right_here = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 	local seaweed = math.random(1,4) | ||||
| 	local node_name = "flowers:seaweed" | ||||
| 	if seaweed > 1 then | ||||
| 		node_name = node_name .. "_" .. seaweed | ||||
| 	end | ||||
| 	minetest.swap_node(right_here, {name=node_name, param2=math.random(1,3)}) | ||||
| end | ||||
|  | ||||
| biome_lib.register_on_generate({ | ||||
| 		surface = {"default:water_source"}, | ||||
| 		max_count = seaweed_max_count, | ||||
| 		rarity = seaweed_rarity, | ||||
| 		min_elevation = 1, | ||||
| 		max_elevation = 40, | ||||
| 		near_nodes = {"default:dirt_with_grass"}, | ||||
| 		near_nodes_size = 4, | ||||
| 		near_nodes_vertical = 1, | ||||
| 		near_nodes_count = 1, | ||||
| 		plantlife_limit = -0.9, | ||||
| 	}, | ||||
| 	pl_seaweed.grow_seaweed | ||||
| ) | ||||
|  | ||||
| -- pl_seaweed at beaches | ||||
| -- MM: not satisfied with it, but IMHO some beaches should have some algae | ||||
| biome_lib.register_on_generate({ | ||||
| 		surface = {"default:water_source"}, | ||||
| 		max_count = seaweed_max_count, | ||||
| 		rarity = seaweed_rarity, | ||||
| 		min_elevation = 1, | ||||
| 		max_elevation = 40, | ||||
| 		near_nodes = {"default:sand"}, | ||||
| 		near_nodes_size = 1, | ||||
| 		near_nodes_vertical = 0, | ||||
| 		near_nodes_count = 3, | ||||
| 		plantlife_limit = -0.9, | ||||
| 		temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere | ||||
| 		temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere | ||||
| 	}, | ||||
| 	pl_seaweed.grow_seaweed | ||||
| ) | ||||
| biome_lib.register_on_generate({ | ||||
| 		surface = {"default:sand"}, | ||||
| 		max_count = seaweed_max_count*2, | ||||
| 		rarity = seaweed_rarity/2, | ||||
| 		min_elevation = 1, | ||||
| 		max_elevation = 40, | ||||
| 		near_nodes = {"default:water_source"}, | ||||
| 		near_nodes_size = 1, | ||||
| 		near_nodes_vertical = 0, | ||||
| 		near_nodes_count = 3, | ||||
| 		plantlife_limit = -0.9, | ||||
| 		temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere | ||||
| 		temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere | ||||
| 	}, | ||||
| 	pl_seaweed.grow_seaweed | ||||
| ) | ||||
|  | ||||
| minetest.register_alias( "flowers:flower_seaweed" , "flowers:seaweed"	 ) | ||||
| minetest.register_alias( "along_shore:pondscum_1" ,	"flowers:seaweed"	 ) | ||||
| minetest.register_alias( "along_shore:seaweed_1"	,	"flowers:seaweed"	 ) | ||||
| minetest.register_alias( "along_shore:seaweed_2"	,	"flowers:seaweed_2" ) | ||||
| minetest.register_alias( "along_shore:seaweed_3"	,	"flowers:seaweed_3" ) | ||||
| minetest.register_alias( "along_shore:seaweed_4"	,	"flowers:seaweed_4" ) | ||||
| minetest.register_alias("flowers:flower_seaweed", "flowers:seaweed") | ||||
| minetest.register_alias("along_shore:pondscum_1", "flowers:seaweed") | ||||
| minetest.register_alias("along_shore:seaweed_1", "flowers:seaweed") | ||||
| minetest.register_alias("along_shore:seaweed_2", "flowers:seaweed_2") | ||||
| minetest.register_alias("along_shore:seaweed_3", "flowers:seaweed_3") | ||||
| minetest.register_alias("along_shore:seaweed_4", "flowers:seaweed_4") | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_seaweed | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Xanthin, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| Seaweed=Seetang | ||||
| Seaweed=Seegras | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_seaweed | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Seaweed=Algues | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_seaweed | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # mahmutelmas06@hotmail.com, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Seaweed=Deniz yosunu | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_seaweed | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| Seaweed=Algo | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_seaweed | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Carlos Barraza <carlosbarrazaes@gmail.com>, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Seaweed=Algas marinas | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_seaweed | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| Seaweed= | ||||
|   | ||||
| @@ -1,3 +1,2 @@ | ||||
| name = pl_seaweed | ||||
| depends = biome_lib | ||||
| optional_depends = farming, flowers | ||||
|   | ||||
| @@ -1,5 +1,2 @@ | ||||
| #Seaweed maximum count | ||||
| pl_seaweed_max_count (Seaweed maximum count) int 320 1 1000 | ||||
|  | ||||
| #Seaweed rarity | ||||
| pl_seaweed_rarity (Seaweed rarity) int 33 0 100 | ||||
| # Seaweed rarity (higher number -> higher probability) | ||||
| pl_seaweed.seaweed_rarity (Seaweed rarity) float 0.06 0.0001 1 | ||||
|   | ||||
| @@ -1,9 +1,7 @@ | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("pl_sunflowers") | ||||
|  | ||||
| local sunflowers_max_count = tonumber(minetest.settings:get("pl_sunflowers_max_count")) or 10 | ||||
| local sunflowers_rarity = tonumber(minetest.settings:get("pl_sunflowers_rarity")) or 25 | ||||
|  | ||||
| local sunflower_rarity = minetest.settings:get("pl_sunflowers.sunflower_rarity") or 0.005 | ||||
|  | ||||
| local box = { | ||||
| 	type="fixed", | ||||
| @@ -19,7 +17,7 @@ minetest.register_node(":flowers:sunflower", { | ||||
| 	description = S("Sunflower"), | ||||
| 	drawtype = "mesh", | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	paramtype2 = "degrotate", | ||||
| 	inventory_image = "flowers_sunflower_inv.png", | ||||
| 	mesh = "flowers_sunflower.obj", | ||||
| 	tiles = { "flowers_sunflower.png" }, | ||||
| @@ -40,17 +38,20 @@ minetest.register_node(":flowers:sunflower", { | ||||
| 	} | ||||
| }) | ||||
|  | ||||
| biome_lib.register_on_generate({ | ||||
| 	surface = {"default:dirt_with_grass"}, | ||||
| 	avoid_nodes = { "flowers:sunflower" }, | ||||
| 	max_count = sunflowers_max_count, | ||||
| 	rarity = sunflowers_rarity, | ||||
| 	min_elevation = 0, | ||||
| 	plantlife_limit = -0.9, | ||||
| 	temp_max = -0.1, | ||||
| 	random_facedir = {0,3}, | ||||
| minetest.register_decoration({ | ||||
| 	decoration = { | ||||
| 		"flowers:sunflower" | ||||
| 	}, | ||||
| 	"flowers:sunflower" | ||||
| ) | ||||
| 	fill_ratio = sunflower_rarity, | ||||
| 	y_min = 1, | ||||
| 	y_max = 40, | ||||
| 	param2 = 0, | ||||
| 	param2_max = 239, | ||||
| 	place_on = { | ||||
| 		"default:dirt_with_grass" | ||||
| 	}, | ||||
| 	deco_type = "simple", | ||||
| 	flags = "all_floors", | ||||
| }) | ||||
|  | ||||
| minetest.register_alias("sunflower:sunflower", "flowers:sunflower") | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_sunflowers | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Xanthin, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| Sunflower=Sonnenblume | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_sunflowers | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| Sunflower=Sunfloro | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_sunflowers | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Carlos Barraza <carlosbarrazaes@gmail.com>, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Sunflower=Girasol | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_sunflowers | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Sunflower=Tournesol | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_sunflowers | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # mahmutelmas06@hotmail.com, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Sunflower=Ayçiçeği | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_sunflowers | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| Sunflower= | ||||
|   | ||||
| @@ -1,3 +1,2 @@ | ||||
| name = pl_sunflowers | ||||
| depends = biome_lib | ||||
| optional_depends = farming, flowers | ||||
|   | ||||
| @@ -1,5 +1,2 @@ | ||||
| #Sunflowers maximum count | ||||
| pl_sunflowers_max_count (Sunflowers maximum count) int 10 1 1000 | ||||
|  | ||||
| #Sunflowers rarity | ||||
| pl_sunflowers_rarity (Sunflowers rarity) int 25 0 100 | ||||
| # Sunflower rarity (higher number -> higher probability) | ||||
| pl_sunflowers.sunflower_rarity (Sunflower rarity) float 0.005 0.0001 1 | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("pl_waterlilies") | ||||
|  | ||||
| pl_waterlilies = {} | ||||
|  | ||||
| local lilies_max_count = tonumber(minetest.settings:get("pl_waterlilies_max_count")) or 320 | ||||
| local lilies_rarity = tonumber(minetest.settings:get("pl_waterlilies_rarity")) or 33 | ||||
| local fill_ratio = minetest.settings:get("pl_waterlilies.waterlily_rarity") or 0.03 | ||||
|  | ||||
| local function get_ndef(name) | ||||
| 	return minetest.registered_nodes[name] or {} | ||||
| end | ||||
|  | ||||
| local lilies_list = { | ||||
| 	{ nil	, nil			 , 1	}, | ||||
| @@ -18,6 +18,15 @@ local lilies_list = { | ||||
| 	{ "s4" , "small_4" , 8	}, | ||||
| } | ||||
|  | ||||
| local lilynames_list = {} | ||||
| for i in ipairs(lilies_list) do | ||||
| 	local deg1 = "" | ||||
| 	if lilies_list[i][1] ~= nil then | ||||
| 		deg1 = "_"..lilies_list[i][1] | ||||
| 	end | ||||
| 	table.insert(lilynames_list, "flowers:waterlily"..deg1) | ||||
| end | ||||
|  | ||||
| for i in ipairs(lilies_list) do | ||||
| 	local deg1 = "" | ||||
| 	local deg2 = "" | ||||
| @@ -59,7 +68,11 @@ for i in ipairs(lilies_list) do | ||||
| 		liquids_pointable = true, | ||||
| 		drop = "flowers:waterlily", | ||||
| 		on_place = function(itemstack, placer, pointed_thing) | ||||
| 			local keys=placer:get_player_control() | ||||
| 			if not itemstack or not placer or not pointed_thing then | ||||
| 				return | ||||
| 			end | ||||
|  | ||||
| 			local keys = placer:get_player_control() | ||||
| 			local pt = pointed_thing | ||||
|  | ||||
| 			local place_pos = nil | ||||
| @@ -68,25 +81,24 @@ for i in ipairs(lilies_list) do | ||||
| 			local above_node = minetest.get_node(pt.above) | ||||
| 			local top_node	 = minetest.get_node(top_pos) | ||||
|  | ||||
| 			if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then | ||||
| 			if get_ndef(under_node.name)["buildable_to"] then | ||||
| 				if under_node.name ~= "default:water_source" then | ||||
| 					place_pos = pt.under | ||||
| 				elseif top_node.name ~= "default:water_source" | ||||
| 							 and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then | ||||
| 				elseif top_node.name ~= "default:water_source" and get_ndef(top_node.name)["buildable_to"] then | ||||
| 					place_pos = top_pos | ||||
| 				else | ||||
| 					return | ||||
| 				end | ||||
| 			elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then | ||||
| 			elseif get_ndef(above_node.name)["buildable_to"] then | ||||
| 				place_pos = pt.above | ||||
| 			end | ||||
|  | ||||
| 			if place_pos and not minetest.is_protected(place_pos, placer:get_player_name()) then | ||||
| 			local pname = placer:get_player_name() | ||||
| 			if place_pos and not minetest.is_protected(place_pos, pname) then | ||||
|  | ||||
| 			local nodename = "default:cobble" -- if this block appears, something went....wrong :-) | ||||
|  | ||||
| 				if not keys["sneak"] then | ||||
| 					local node = minetest.get_node(pt.under) | ||||
| 					local waterlily = math.random(1,8) | ||||
| 					if waterlily == 1 then | ||||
| 						nodename = "flowers:waterlily" | ||||
| @@ -111,55 +123,63 @@ for i in ipairs(lilies_list) do | ||||
| 					minetest.swap_node(place_pos, {name = "flowers:waterlily", param2 = fdir}) | ||||
| 				end | ||||
|  | ||||
| 				if not biome_lib.expect_infinite_stacks then | ||||
| 				if not minetest.is_creative_enabled(pname) then | ||||
| 					itemstack:take_item() | ||||
| 				end | ||||
| 				return itemstack | ||||
| 			end | ||||
| 		end, | ||||
| 	}) | ||||
|  | ||||
| 	minetest.register_decoration({ | ||||
| 		name = "flowers:waterlily"..deg1, | ||||
| 		decoration = {"flowers:waterlily"..deg1}, | ||||
| 		place_on = {"default:water_source"}, | ||||
| 		deco_type = "simple", | ||||
| 		flags = "liquid_surface", | ||||
| 		spawn_by = "default:sand", | ||||
| 		num_spawn_by = 1, | ||||
| 		fill_ratio = fill_ratio, | ||||
| 		check_offset = -1, | ||||
| 		y_min = 1, | ||||
| 		y_max = 1, | ||||
| 	}) | ||||
|  | ||||
| 	minetest.register_decoration({ | ||||
| 		name = "flowers:waterlily"..deg1 .."_relative", | ||||
| 		decoration = {"flowers:waterlily"..deg1}, | ||||
| 		place_on = {"default:water_source"}, | ||||
| 		deco_type = "simple", | ||||
| 		flags = "liquid_surface", | ||||
| 		spawn_by = lilynames_list, | ||||
| 		num_spawn_by = 1, | ||||
| 		fill_ratio = fill_ratio*1.25, | ||||
| 		check_offset = -1, | ||||
| 		y_min = 1, | ||||
| 		y_max = 1, | ||||
| 	}) | ||||
|  | ||||
| 	minetest.register_decoration({ | ||||
| 		name = "flowers:waterlily"..deg1 .."_relative", | ||||
| 		decoration = {"flowers:waterlily"..deg1}, | ||||
| 		place_on = {"default:water_source"}, | ||||
| 		deco_type = "simple", | ||||
| 		flags = "liquid_surface", | ||||
| 		spawn_by = lilynames_list, | ||||
| 		num_spawn_by = 1, | ||||
| 		fill_ratio = fill_ratio*1.5, | ||||
| 		check_offset = -1, | ||||
| 		y_min = 1, | ||||
| 		y_max = 1, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| pl_waterlilies.grow_waterlily = function(pos) | ||||
| 	local right_here = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 	for i in ipairs(lilies_list) do | ||||
| 		local chance = math.random(1,8) | ||||
| 		local ext = "" | ||||
| 		local num = lilies_list[i][3] | ||||
|  | ||||
| 		if lilies_list[i][1] ~= nil then | ||||
| 			ext = "_"..lilies_list[i][1] | ||||
| 		end | ||||
|  | ||||
| 		if chance == num then | ||||
| 			minetest.swap_node(right_here, {name="flowers:waterlily"..ext, param2=math.random(0,3)}) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| biome_lib.register_on_generate({ | ||||
| 		surface = {"default:water_source"}, | ||||
| 		max_count = lilies_max_count, | ||||
| 		rarity = lilies_rarity, | ||||
| 		min_elevation = 1, | ||||
| 		max_elevation = 40, | ||||
| 		near_nodes = {"default:dirt_with_grass"}, | ||||
| 		near_nodes_size = 4, | ||||
| 		near_nodes_vertical = 1, | ||||
| 		near_nodes_count = 1, | ||||
| 		plantlife_limit = -0.9, | ||||
| 		temp_max = -0.22, | ||||
| 		temp_min = 0.22, | ||||
| 	}, | ||||
| 	pl_waterlilies.grow_waterlily | ||||
| ) | ||||
|  | ||||
| minetest.register_alias( "flowers:flower_waterlily", "flowers:waterlily") | ||||
| minetest.register_alias( "flowers:flower_waterlily_225", "flowers:waterlily_225") | ||||
| minetest.register_alias( "flowers:flower_waterlily_45", "flowers:waterlily_45") | ||||
| minetest.register_alias( "flowers:flower_waterlily_675", "flowers:waterlily_675") | ||||
| minetest.register_alias( "trunks:lilypad"				 ,	"flowers:waterlily_s1" ) | ||||
| minetest.register_alias( "along_shore:lilypads_1" , "flowers:waterlily_s1" ) | ||||
| minetest.register_alias( "along_shore:lilypads_2" , "flowers:waterlily_s2" ) | ||||
| minetest.register_alias( "along_shore:lilypads_3" , "flowers:waterlily_s3" ) | ||||
| minetest.register_alias( "along_shore:lilypads_4" , "flowers:waterlily_s4" ) | ||||
| minetest.register_alias( "trunks:lilypad", "flowers:waterlily_s1") | ||||
| minetest.register_alias( "along_shore:lilypads_1", "flowers:waterlily_s1") | ||||
| minetest.register_alias( "along_shore:lilypads_2", "flowers:waterlily_s2") | ||||
| minetest.register_alias( "along_shore:lilypads_3", "flowers:waterlily_s3") | ||||
| minetest.register_alias( "along_shore:lilypads_4", "flowers:waterlily_s4") | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_waterlilies | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Xanthin, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| Waterlily=Seerose | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_waterlillies | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| # textdomain: pl_waterlilies | ||||
| Waterlily=Akvolilio | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_waterlilies | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Carlos Barraza <carlosbarrazaes@gmail.com>, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Waterlily=Lirio de agua | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_waterlilies | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Waterlily=Nénuphar | ||||
|   | ||||
| @@ -1,10 +1,2 @@ | ||||
| # textdomain: pl_waterlilies | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # mahmutelmas06@hotmail.com, 2017. | ||||
| # | ||||
|  | ||||
|  | ||||
| Waterlily=Nilüfer | ||||
|   | ||||
| @@ -1,11 +1,2 @@ | ||||
| # textdomain: pl_waterlillies | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
|  | ||||
|  | ||||
|  | ||||
| # textdomain: pl_waterlilies | ||||
| Waterlily= | ||||
|   | ||||
| @@ -1,3 +1,2 @@ | ||||
| name = pl_waterlilies | ||||
| depends = biome_lib | ||||
| optional_depends = farming, flowers | ||||
|   | ||||
| @@ -1,5 +1,2 @@ | ||||
| #Water-lilies maximum count | ||||
| pl_waterlilies_max_count (Water-lilies maximum count) int 320 1 1000 | ||||
|  | ||||
| #Water-lilies rarity | ||||
| pl_waterlilies_rarity (Water-lilies rarity) int 33 0 100 | ||||
| # Waterlily rarity (higher number -> higher probability) | ||||
| pl_waterlilies.waterlily_rarity (Waterlily rarity) float 0.03 0.0001 1 | ||||
|   | ||||
| @@ -1,14 +1,8 @@ | ||||
| -- This file supplies poison ivy for the plantlife modpack | ||||
| -- Last revision:  2013-01-24 | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator("poisonivy") | ||||
|  | ||||
| local SPAWN_DELAY = 1000 | ||||
| local SPAWN_CHANCE = 200 | ||||
| local GROW_DELAY = 500 | ||||
| local GROW_CHANCE = 30 | ||||
| local poisonivy_seed_diff = 339 | ||||
| local walls_list = { | ||||
| 	"default:dirt", | ||||
| 	"default:dirt_with_grass", | ||||
| @@ -20,7 +14,7 @@ local walls_list = { | ||||
| 	"default:jungletree", | ||||
| 	"default:stone_with_coal", | ||||
| 	"default:stone_with_iron" | ||||
| }, | ||||
| } | ||||
| minetest.register_node('poisonivy:seedling', { | ||||
| 	description = S("Poison ivy (seedling)"), | ||||
| 	drawtype = 'plantlike', | ||||
| @@ -31,7 +25,7 @@ minetest.register_node('poisonivy:seedling', { | ||||
| 	sunlight_propagates = true, | ||||
| 	paramtype = 'light', | ||||
| 	walkable = false, | ||||
| 	groups = { snappy = 3, poisonivy=1, flora_block=1 }, | ||||
| 	groups = { snappy = 3, poisonivy=1, flora_block=1, attached_node=1 }, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| 	buildable_to = true, | ||||
| }) | ||||
| @@ -46,7 +40,7 @@ minetest.register_node('poisonivy:sproutling', { | ||||
| 	sunlight_propagates = true, | ||||
| 	paramtype = 'light', | ||||
| 	walkable = false, | ||||
| 	groups = { snappy = 3, poisonivy=1, flora_block=1 }, | ||||
| 	groups = { snappy = 3, poisonivy=1, flora_block=1, attached_node=1 }, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| 	buildable_to = true, | ||||
| }) | ||||
| @@ -61,7 +55,7 @@ minetest.register_node('poisonivy:climbing', { | ||||
| 	paramtype = 'light', | ||||
| 	paramtype2 = 'wallmounted', | ||||
| 	walkable = false, | ||||
| 	groups = { snappy = 3, poisonivy=1, flora_block=1 }, | ||||
| 	groups = { snappy = 3, poisonivy=1, flora_block=1, attached_node=1 }, | ||||
| 	sounds = default.node_sound_leaves_defaults(), | ||||
| 	selection_box = { | ||||
| 		type = "wallmounted", | ||||
| @@ -70,35 +64,75 @@ minetest.register_node('poisonivy:climbing', { | ||||
| 	buildable_to = true, | ||||
| }) | ||||
|  | ||||
| biome_lib.register_active_spawner({ | ||||
| 	spawn_delay = SPAWN_DELAY, | ||||
| 	spawn_plants = {"poisonivy:seedling"}, | ||||
| 	avoid_radius = 10, | ||||
| 	spawn_chance = SPAWN_CHANCE/10, | ||||
| 	spawn_surfaces = {"default:dirt_with_grass"}, | ||||
| 	avoid_nodes = {"group:poisonivy", "group:flower", "group:flora"}, | ||||
| 	seed_diff = poisonivy_seed_diff, | ||||
| 	light_min = 7, | ||||
| 	alt_wallnode = "poisonivy:climbing", | ||||
| 	verticals_list = walls_list | ||||
| local function find_adjacent_wall(pos, verticals, randomflag) | ||||
| 	local verts = dump(verticals) | ||||
|  | ||||
| 	if string.find(verts, minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z  }).name) then return 3 end | ||||
| 	if string.find(verts, minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z  }).name) then return 2 end | ||||
| 	if string.find(verts, minetest.get_node({x=pos.x  , y=pos.y, z=pos.z-1}).name) then return 5 end | ||||
| 	if string.find(verts, minetest.get_node({x=pos.x  , y=pos.y, z=pos.z+1}).name) then return 4 end | ||||
|  | ||||
| 	return nil | ||||
| end | ||||
|  | ||||
| minetest.register_abm({ | ||||
| 	nodenames = {"default:dirt_with_grass"}, | ||||
| 	interval = 1000, | ||||
| 	chance = 20, | ||||
| 	label = "[poisoninvy] spawn plants", | ||||
| 	min_y = -16, | ||||
| 	max_y = 48, | ||||
| 	action = function(pos, node) | ||||
| 		local p_top = {x = pos.x, y = pos.y + 1, z = pos.z} | ||||
| 		local n_top = minetest.get_node_or_nil(p_top) | ||||
| 		if not n_top or n_top.name ~= "air" then return end | ||||
|  | ||||
| 		local n_light = minetest.get_node_light(p_top) | ||||
| 		if n_light < 7 then | ||||
| 			return | ||||
| 		end | ||||
|  | ||||
| 		if minetest.find_node_near(p_top, 10 + math.random(-1.5,2), {"group:poisonivy", "group:flower"}) then | ||||
| 			return -- Nodes to avoid are nearby | ||||
| 		end | ||||
|  | ||||
| 		local walldir = find_adjacent_wall(p_top, walls_list) | ||||
| 		if walldir then | ||||
| 			minetest.swap_node(p_top, {name = "poisonivy:climbing", param2 = walldir}) | ||||
| 			return | ||||
| 		end | ||||
|  | ||||
| 		minetest.swap_node(p_top, {name = "poisonivy:seedling", param2 = 0}) | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| biome_lib.update_plant({ | ||||
| 	grow_delay = SPAWN_DELAY, | ||||
| 	grow_chance = GROW_CHANCE, | ||||
| 	grow_plant = "poisonivy:seedling", | ||||
| 	grow_result = "poisonivy:sproutling", | ||||
| 	grow_nodes = {"default:dirt_with_grass"} | ||||
| minetest.register_abm({ | ||||
| 	nodenames = {"poisonivy:seedling"}, | ||||
| 	interval = 1000, | ||||
| 	chance = 30, | ||||
| 	label = "grow poisonivy", | ||||
| 	action = function(pos, node) | ||||
| 		local p_top = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 		local n_top = minetest.get_node(p_top) | ||||
|  | ||||
| 		if n_top.name == "air" then | ||||
| 			minetest.swap_node(pos, {name = "poisonivy:sproutling"}) | ||||
| 		end | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| biome_lib.update_plant({ | ||||
| 	grow_delay = GROW_DELAY, | ||||
| 	grow_chance = GROW_CHANCE*2, | ||||
| 	grow_plant = "poisonivy:climbing", | ||||
| 	need_wall = true, | ||||
| 	grow_vertically = true, | ||||
| 	verticals_list = walls_list, | ||||
| 	ground_nodes = {"default:dirt_with_grass"} | ||||
| }) | ||||
| minetest.register_abm({ | ||||
| 	nodenames = {"poisonivy:climbing"}, | ||||
| 	interval = 500, | ||||
| 	chance = 60, | ||||
| 	label = "grow climbing poisonivy", | ||||
| 	action = function(pos, node) | ||||
| 		local p_top = {x=pos.x, y=pos.y+1, z=pos.z} | ||||
| 		local n_top = minetest.get_node(p_top) | ||||
|  | ||||
| print("[Poison Ivy] Loaded.") | ||||
| 		local walldir = find_adjacent_wall(p_top, walls_list) | ||||
| 		if n_top.name == "air" and walldir then | ||||
| 			minetest.swap_node(p_top, {name = "poisonivy:climbing", param2 = walldir}) | ||||
| 		end | ||||
| 	end | ||||
| }) | ||||
| @@ -1,12 +1,4 @@ | ||||
| # textdomain: poisonivy | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Xanthin, 2017. | ||||
| # | ||||
|  | ||||
| Poison ivy (seedling)=Giftefeu (Saemling) | ||||
| Poison ivy (sproutling)=Giftefeu (Sproessling) | ||||
| Poison ivy (seedling)=Giftefeu (Sämling) | ||||
| Poison ivy (sproutling)=Giftefeu (Sprössling) | ||||
| Poison ivy (climbing plant)=Giftefeu (Kletterpflanze) | ||||
| [Poison Ivy] Loaded.=[Poison Ivy] Geladen. | ||||
|   | ||||
| @@ -1,12 +1,4 @@ | ||||
| # textdomain: poisonivy | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Jolesh, 2022. | ||||
| # | ||||
|  | ||||
| Poison ivy (seedling)=Venena hedero (plantido) | ||||
| Poison ivy (sproutling)=Venena hedero (ĝermanta) | ||||
| Poison ivy (climbing plant)=Venena hedero (grimpplanto) | ||||
| [Poison Ivy] Loaded.=[Poison Ivy] ŝarĝita. | ||||
|   | ||||
| @@ -1,12 +1,4 @@ | ||||
| # textdomain: poisonivy | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # Carlos Barraza <carlosbarrazaes@gmail.com>, 2017. | ||||
| # | ||||
|  | ||||
| Poison ivy (seedling)=Hiedra venenosa (retoño) | ||||
| Poison ivy (sproutling)=Hiedra venenosa (brotes) | ||||
| Poison ivy (climbing plant)=Hiedra venenosa (planta trepadora) | ||||
| [Poison Ivy] Loaded.=[Poison Ivy] Cargado. | ||||
|   | ||||
| @@ -1,12 +1,4 @@ | ||||
| # textdomain: poisonivy | ||||
|  | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
|  | ||||
| Poison ivy (seedling)=Sumac vénéneux (semis) | ||||
| Poison ivy (sproutling)=Sumac vénéneux (pousse) | ||||
| Poison ivy (climbing plant)=Sumac vénéneux (grimpant) | ||||
| [Poison Ivy] Loaded.=[Poison Ivy] chargé. | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user