Compare commits
	
		
			96 Commits
		
	
	
		
			2019-06-18
			...
			ferns_rm_b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					80cedce7c6 | ||
| 
						 | 
					21816e5a43 | ||
| 
						 | 
					3c390beb0f | ||
| 
						 | 
					e0dca20186 | ||
| 
						 | 
					25fbc53114 | ||
| 
						 | 
					5a8794cd84 | ||
| 
						 | 
					f629f54d43 | ||
| 
						 | 
					455f891275 | ||
| 
						 | 
					54a3e1d98b | ||
| 
						 | 
					a6c8e4a9d3 | ||
| 
						 | 
					e9eb1f51e8 | ||
| 
						 | 
					fc1d05978e | ||
| 
						 | 
					9aa5d85218 | ||
| 
						 | 
					fbd4aaf034 | ||
| 
						 | 
					3fce92a9f5 | ||
| 
						 | 
					46608a7fb9 | ||
| 
						 | 
					ab9a912598 | ||
| 
						 | 
					72572bb5c8 | ||
| 
						 | 
					6a3c47157f | ||
| 
						 | 
					9e771e2988 | ||
| 
						 | 
					69e272cd64 | ||
| 
						 | 
					12cfbe3cb5 | ||
| 
						 | 
					2af1d996d2 | ||
| 
						 | 
					3b7fa4e8ea | ||
| 
						 | 
					877d94dace | ||
| 
						 | 
					ded2685047 | ||
| 
						 | 
					e58042acd0 | ||
| 
						 | 
					f4185762d5 | ||
| 
						 | 
					c7f65aac83 | ||
| 
						 | 
					d9782771c3 | ||
| 
						 | 
					d483c2a1ae | ||
| 
						 | 
					c6b1ce5ca5 | ||
| 
						 | 
					23d04af7d6 | ||
| 
						 | 
					577404c850 | ||
| 
						 | 
					a2cbc18351 | ||
| 
						 | 
					9483fee7b3 | ||
| 
						 | 
					1894d91609 | ||
| 
						 | 
					438a1adb32 | ||
| 
						 | 
					e159b843d2 | ||
| 
						 | 
					6e842d9b0d | ||
| 
						 | 
					8287ae2476 | ||
| 
						 | 
					ca2b47492e | ||
| 
						 | 
					f5490e3b58 | ||
| 
						 | 
					bde2082ee1 | ||
| 
						 | 
					d33907ca75 | ||
| 
						 | 
					244d5da0e2 | ||
| 
						 | 
					8de8b889c2 | ||
| 
						 | 
					1d71e2c64e | ||
| 
						 | 
					d3edfbeace | ||
| 
						 | 
					c82ba38e68 | ||
| 
						 | 
					031d5f4e4e | ||
| 
						 | 
					32bab30e1f | ||
| 
						 | 
					7094d8a369 | ||
| 
						 | 
					c990942ba2 | ||
| 
						 | 
					4953b1ba54 | ||
| 
						 | 
					cb2373f089 | ||
| 
						 | 
					1a96ac87a7 | ||
| 
						 | 
					a6dc4890d9 | ||
| 
						 | 
					a5b752f8b2 | ||
| 
						 | 
					4c48e5be29 | ||
| 
						 | 
					a7d0e42cd1 | ||
| 
						 | 
					2e4e4a2412 | ||
| 
						 | 
					1d3751d755 | ||
| 
						 | 
					e2486ca7f5 | ||
| 
						 | 
					98f0c6c20f | ||
| 
						 | 
					54d3b669be | ||
| 
						 | 
					93265656cc | ||
| 
						 | 
					c76fd45a2c | ||
| 
						 | 
					c7d0fd3c53 | ||
| 
						 | 
					a66b82f1f0 | ||
| 
						 | 
					63914caed1 | ||
| 
						 | 
					ba98359dd0 | ||
| 
						 | 
					6df36da4e1 | ||
| 
						 | 
					28ef3e0c4b | ||
| 
						 | 
					680b02f7e2 | ||
| 
						 | 
					a2976c609a | ||
| 
						 | 
					46717958bc | ||
| 
						 | 
					52b2d18523 | ||
| 
						 | 
					bfd08f01c8 | ||
| 
						 | 
					9ed4771515 | ||
| 
						 | 
					3f107a8067 | ||
| 
						 | 
					b3cbd3df2e | ||
| 
						 | 
					b1b4a08834 | ||
| 
						 | 
					f01e4bb55f | ||
| 
						 | 
					7b4f54ead0 | ||
| 
						 | 
					c061ef23cf | ||
| 
						 | 
					d87d8e51f5 | ||
| 
						 | 
					70df655a42 | ||
| 
						 | 
					4876fc1265 | ||
| 
						 | 
					81b2b0898b | ||
| 
						 | 
					a750bac532 | ||
| 
						 | 
					b4b24dedba | ||
| 
						 | 
					622016713e | ||
| 
						 | 
					9963e588d6 | ||
| 
						 | 
					686dd21b9d | ||
| 
						 | 
					47c20dc550 | 
							
								
								
									
										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 +0,0 @@
 | 
			
		||||
*~
 | 
			
		||||
							
								
								
									
										24
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						@@ -1,15 +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",
 | 
			
		||||
	"intllib",
 | 
			
		||||
	"default",
 | 
			
		||||
	"bushes_classic",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
read_globals = {
 | 
			
		||||
	table = {fields = {"copy"}},
 | 
			
		||||
 | 
			
		||||
	"minetest", "ItemStack",
 | 
			
		||||
	"vector",
 | 
			
		||||
 | 
			
		||||
	"default",
 | 
			
		||||
	"moretrees",
 | 
			
		||||
	"dump",
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
default
 | 
			
		||||
flowers
 | 
			
		||||
@@ -1,7 +1,5 @@
 | 
			
		||||
-- 3D Mushroom mod by VanessaE
 | 
			
		||||
 | 
			
		||||
mushroom = {}
 | 
			
		||||
 | 
			
		||||
minetest.override_item("flowers:mushroom_fertile_brown", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "3dmushrooms.obj",
 | 
			
		||||
@@ -10,7 +8,8 @@ minetest.override_item("flowers:mushroom_fertile_brown", {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "3dmushrooms_brown_inv.png"
 | 
			
		||||
	inventory_image = "3dmushrooms_brown_inv.png",
 | 
			
		||||
	wield_image = "3dmushrooms_brown_inv.png"
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.override_item("flowers:mushroom_brown", {
 | 
			
		||||
@@ -21,7 +20,8 @@ minetest.override_item("flowers:mushroom_brown", {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "3dmushrooms_brown_inv.png"
 | 
			
		||||
	inventory_image = "3dmushrooms_brown_inv.png",
 | 
			
		||||
	wield_image = "3dmushrooms_brown_inv.png"
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.override_item("flowers:mushroom_fertile_red", {
 | 
			
		||||
@@ -32,7 +32,8 @@ minetest.override_item("flowers:mushroom_fertile_red", {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "3dmushrooms_red_inv.png"
 | 
			
		||||
	inventory_image = "3dmushrooms_red_inv.png",
 | 
			
		||||
	wield_image = "3dmushrooms_red_inv.png"
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.override_item("flowers:mushroom_red", {
 | 
			
		||||
@@ -43,7 +44,8 @@ minetest.override_item("flowers:mushroom_red", {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "3dmushrooms_red_inv.png"
 | 
			
		||||
	inventory_image = "3dmushrooms_red_inv.png",
 | 
			
		||||
	wield_image = "3dmushrooms_red_inv.png"
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- aliases to the default mushrooms
 | 
			
		||||
@@ -61,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")
 | 
			
		||||
 | 
			
		||||
print("[3D Mushrooms] loaded.")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								3dmushrooms/mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
name = 3dmushrooms
 | 
			
		||||
depends = flowers
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 3.8 KiB  | 
| 
		 Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.1 KiB  | 
| 
		 Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.0 KiB  | 
@@ -1,3 +0,0 @@
 | 
			
		||||
default
 | 
			
		||||
biome_lib
 | 
			
		||||
flowers_plus?
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
local title		= "Along the Shore"
 | 
			
		||||
local version	= "0.0.4"
 | 
			
		||||
local mname		= "along_shore"
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 234 B  | 
@@ -1,30 +0,0 @@
 | 
			
		||||
-------------------------------------------------------------
 | 
			
		||||
Credit for textures of "along_shore"
 | 
			
		||||
-------------------------------------------------------------
 | 
			
		||||
(If more than one author is listed the names are in alphabetical order)
 | 
			
		||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
FOLDER									TEXTURE							AUTHORS
 | 
			
		||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
../along_shore/textures				    along_shore_seaweed_1Darker.png	Neuromancer, VanessaE
 | 
			
		||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
../along_shore/textures/old            (along_shore_empty.png) 		   (Mossmanikin)
 | 
			
		||||
										along_shore_lilypads_1.png		Mossmanikin, Neuromancer
 | 
			
		||||
										along_shore_lilypads_2.png		Mossmanikin, Neuromancer
 | 
			
		||||
										along_shore_lilypads_3.png		Mossmanikin, Neuromancer
 | 
			
		||||
										along_shore_lilypads_4.png		Mossmanikin, Neuromancer
 | 
			
		||||
										along_shore_pondscum_1.png		Neuromancer
 | 
			
		||||
										along_shore_seaweed_1.png		Neuromancer, VanessaE
 | 
			
		||||
										along_shore_seaweed_2.png		Mossmanikin, Neuromancer, VanessaE
 | 
			
		||||
										along_shore_seaweed_3.png		Mossmanikin, Neuromancer, VanessaE
 | 
			
		||||
										along_shore_seaweed_4.png		Mossmanikin, Neuromancer, VanessaE
 | 
			
		||||
										flowers_seaweed.png				Neuromancer, VanessaE
 | 
			
		||||
										flowers_waterlily.png			Mossmanikin, VanessaE
 | 
			
		||||
										flowers_waterlily_22.5.png		Mossmanikin, VanessaE
 | 
			
		||||
										flowers_waterlily_45.png		Mossmanikin, VanessaE
 | 
			
		||||
										flowers_waterlily_67.5.png		Mossmanikin, VanessaE
 | 
			
		||||
										lillypad3Flower16x.png			Neuromancer	
 | 
			
		||||
										LillyPad3x16.png				Neuromancer		
 | 
			
		||||
										lillyPad5x16.png				Neuromancer			
 | 
			
		||||
										MultiLilly16x.png				Neuromancer
 | 
			
		||||
										pondscum16xc.png				Neuromancer
 | 
			
		||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 439 B  | 
| 
		 Before Width: | Height: | Size: 305 B  | 
| 
		 Before Width: | Height: | Size: 74 B  | 
| 
		 Before Width: | Height: | Size: 305 B  | 
| 
		 Before Width: | Height: | Size: 382 B  | 
| 
		 Before Width: | Height: | Size: 314 B  | 
| 
		 Before Width: | Height: | Size: 209 B  | 
| 
		 Before Width: | Height: | Size: 543 B  | 
| 
		 Before Width: | Height: | Size: 222 B  | 
| 
		 Before Width: | Height: | Size: 224 B  | 
| 
		 Before Width: | Height: | Size: 226 B  | 
| 
		 Before Width: | Height: | Size: 178 B  | 
| 
		 Before Width: | Height: | Size: 222 B  | 
| 
		 Before Width: | Height: | Size: 404 B  | 
| 
		 Before Width: | Height: | Size: 429 B  | 
| 
		 Before Width: | Height: | Size: 424 B  | 
| 
		 Before Width: | Height: | Size: 427 B  | 
| 
		 Before Width: | Height: | Size: 308 B  | 
| 
		 Before Width: | Height: | Size: 411 B  | 
| 
		 Before Width: | Height: | Size: 543 B  | 
@@ -1,5 +0,0 @@
 | 
			
		||||
default
 | 
			
		||||
biome_lib
 | 
			
		||||
plantlife_i18n
 | 
			
		||||
stonage?
 | 
			
		||||
sumpf?
 | 
			
		||||
							
								
								
									
										271
									
								
								bushes/init.lua
									
									
									
									
									
								
							
							
						
						@@ -7,34 +7,35 @@
 | 
			
		||||
-- Branch textures created by Neuromancer.
 | 
			
		||||
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = plantlife_i18n.gettext
 | 
			
		||||
  abstract_bushes = {}
 | 
			
		||||
local S = minetest.get_translator("bushes")
 | 
			
		||||
 | 
			
		||||
  minetest.register_node("bushes:youngtree2_bottom", {
 | 
			
		||||
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)"),
 | 
			
		||||
 drawtype="nodebox",
 | 
			
		||||
 tiles = {"bushes_youngtree2trunk.png"},
 | 
			
		||||
	drawtype="nodebox",
 | 
			
		||||
	tiles = {"bushes_youngtree2trunk.png"},
 | 
			
		||||
	inventory_image = "bushes_youngtree2trunk_inv.png",
 | 
			
		||||
	wield_image = "bushes_youngtree2trunk_inv.png",
 | 
			
		||||
paramtype = "light",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
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
 | 
			
		||||
	}
 | 
			
		||||
},
 | 
			
		||||
	groups = {snappy=3,flammable=2},
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3,flammable=2,attached_node=1},
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	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",
 | 
			
		||||
@@ -42,6 +43,7 @@ for i in pairs(BushBranchCenter) do
 | 
			
		||||
			"bushes_leaves_"..TexNum..".png",
 | 
			
		||||
			"bushes_branches_center_"..TexNum..".png"
 | 
			
		||||
		},
 | 
			
		||||
		use_texture_alpha = "clip",
 | 
			
		||||
		node_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = {
 | 
			
		||||
@@ -55,23 +57,24 @@ for i in pairs(BushBranchCenter) do
 | 
			
		||||
		},
 | 
			
		||||
		inventory_image = "bushes_branches_center_"..TexNum..".png",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
			paramtype2 = "facedir",
 | 
			
		||||
				sunlight_propagates = true,
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		sunlight_propagates = true,
 | 
			
		||||
		groups = {
 | 
			
		||||
		--	tree=1, -- MM: disabled because some recipes use group:tree for trunks
 | 
			
		||||
			snappy=3,
 | 
			
		||||
			flammable=2,
 | 
			
		||||
			leaves=1
 | 
			
		||||
			leaves=1,
 | 
			
		||||
			attached_node=1
 | 
			
		||||
		},
 | 
			
		||||
		sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
		drop = 'default:stick 4'
 | 
			
		||||
	})
 | 
			
		||||
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",
 | 
			
		||||
@@ -80,16 +83,17 @@ for i in pairs(BushBranchSide) do
 | 
			
		||||
--[[bottom]]"bushes_branches_center_"..TexNum..".png",
 | 
			
		||||
--[[right]]	"bushes_branches_left_"..TexNum..".png",
 | 
			
		||||
--[[left]]	"bushes_branches_right_"..TexNum..".png", -- MM: We could also mirror the previous here,
 | 
			
		||||
--[[back]]	"bushes_branches_center_"..TexNum..".png",--     unless U really want 'em 2 B different
 | 
			
		||||
--[[back]]	"bushes_branches_center_"..TexNum..".png",--		 unless U really want 'em 2 B different
 | 
			
		||||
--[[front]]	"bushes_branches_right_"..TexNum..".png"
 | 
			
		||||
		},
 | 
			
		||||
		use_texture_alpha = "clip",
 | 
			
		||||
		node_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = {
 | 
			
		||||
--				{ left	 , bottom  , front, right   , top     , back    }
 | 
			
		||||
				{0.137748,-0.491944, 0.5  ,-0.125000,-0.179444,-0.007790}, --NodeBox 1
 | 
			
		||||
				{0.262748,-0.185995, 0.5  ,-0.237252, 0.126505,-0.260269}, --NodeBox 2
 | 
			
		||||
				{0.500000, 0.125000, 0.5  ,-0.500000, 0.500000,-0.500000}, --NodeBox 3
 | 
			
		||||
--				{ left	 , bottom	, front, right	 , top		 , back		}
 | 
			
		||||
				{0.137748,-0.491944, 0.5	,-0.125000,-0.179444,-0.007790}, --NodeBox 1
 | 
			
		||||
				{0.262748,-0.185995, 0.5	,-0.237252, 0.126505,-0.260269}, --NodeBox 2
 | 
			
		||||
				{0.500000, 0.125000, 0.5	,-0.500000, 0.500000,-0.500000}, --NodeBox 3
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		selection_box = {
 | 
			
		||||
@@ -98,75 +102,45 @@ for i in pairs(BushBranchSide) do
 | 
			
		||||
		},
 | 
			
		||||
		inventory_image = "bushes_branches_right_"..TexNum..".png",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
			paramtype2 = "facedir",
 | 
			
		||||
				sunlight_propagates = true,
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		sunlight_propagates = true,
 | 
			
		||||
		groups = {
 | 
			
		||||
		--	tree=1, -- MM: disabled because some recipes use group:tree for trunks
 | 
			
		||||
			snappy=3,
 | 
			
		||||
			flammable=2,
 | 
			
		||||
			leaves=1
 | 
			
		||||
			leaves=1,
 | 
			
		||||
			attached_node=1
 | 
			
		||||
		},
 | 
			
		||||
		sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
		drop = 'default:stick 3'
 | 
			
		||||
	})
 | 
			
		||||
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, {
 | 
			
		||||
		description = S("Bush Leaves @1", Num),
 | 
			
		||||
		drawtype = "allfaces_optional",
 | 
			
		||||
		tiles = {"bushes_leaves_"..Num..".png"},
 | 
			
		||||
		use_texture_alpha = "clip",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		groups = {	-- MM: Should we add leafdecay?
 | 
			
		||||
			snappy=3,
 | 
			
		||||
			flammable=2,
 | 
			
		||||
			attached_node=1
 | 
			
		||||
			attached_node=1,
 | 
			
		||||
			leaves=1
 | 
			
		||||
		},
 | 
			
		||||
		sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
abstract_bushes.grow_bush = function(pos)
 | 
			
		||||
	local leaf_type = math.random(1,2)
 | 
			
		||||
	local bush_side_height = math.random(0,1)
 | 
			
		||||
		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}
 | 
			
		||||
			abstract_bushes.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
 | 
			
		||||
			bush_side_height = math.random(0,1)
 | 
			
		||||
			local left_pos = {x=pos.x-1, y=pos.y+bush_side_height, z=pos.z}
 | 
			
		||||
			abstract_bushes.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
 | 
			
		||||
			bush_side_height = math.random(0,1)
 | 
			
		||||
			local front_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z+1}
 | 
			
		||||
			abstract_bushes.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
 | 
			
		||||
			bush_side_height = math.random(0,1)
 | 
			
		||||
			local back_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z-1}
 | 
			
		||||
			abstract_bushes.grow_bush_node(back_pos,0,leaf_type)
 | 
			
		||||
		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
 | 
			
		||||
@@ -182,79 +156,162 @@ 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})
 | 
			
		||||
 | 
			
		||||
		local chance_of_high_leaves = math.random(1,10)
 | 
			
		||||
		if chance_of_high_leaves> 5 then
 | 
			
		||||
		if chance_of_high_leaves > 5 then
 | 
			
		||||
			local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
 | 
			
		||||
							--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")")
 | 
			
		||||
			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_generate_plant({
 | 
			
		||||
    surface = {
 | 
			
		||||
	local leaf_type = math.random(1,2)
 | 
			
		||||
	local bush_side_height = math.random(0,1)
 | 
			
		||||
 | 
			
		||||
	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"
 | 
			
		||||
	},
 | 
			
		||||
    max_count = 15,  --10,15
 | 
			
		||||
    rarity = 101 - 4,  --3,4
 | 
			
		||||
    min_elevation = 1, -- above sea level
 | 
			
		||||
	plantlife_limit = -0.9,
 | 
			
		||||
  },
 | 
			
		||||
  abstract_bushes.grow_bush
 | 
			
		||||
)
 | 
			
		||||
	deco_type = "simple",
 | 
			
		||||
	flags = "all_floors",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 abstract_bushes.grow_youngtree2 = function(pos)
 | 
			
		||||
	local height = math.random(4,5)
 | 
			
		||||
	abstract_bushes.grow_youngtree_node2(pos,height)
 | 
			
		||||
end
 | 
			
		||||
--[[
 | 
			
		||||
	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)
 | 
			
		||||
 | 
			
		||||
abstract_bushes.grow_youngtree_node2 = function(pos, height)
 | 
			
		||||
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})
 | 
			
		||||
				minetest.swap_node(two_above_right_here_south, {name="bushes:bushbranches2"  , param2=0})
 | 
			
		||||
				minetest.swap_node(three_above_right_here, {name="bushes:BushLeaves1" })
 | 
			
		||||
				minetest.swap_node(three_above_right_here_south, {name="bushes:BushLeaves1" })
 | 
			
		||||
		end
 | 
			
		||||
			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})
 | 
			
		||||
			minetest.swap_node(two_above_right_here_south, {name="bushes:bushbranches2"	, param2=0})
 | 
			
		||||
			minetest.swap_node(three_above_right_here, {name="bushes:BushLeaves1" })
 | 
			
		||||
			minetest.swap_node(three_above_right_here_south, {name="bushes:BushLeaves1" })
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function grow_youngtree2(pos)
 | 
			
		||||
	local height = math.random(4,5)
 | 
			
		||||
	grow_youngtree_node2(pos,height)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
biome_lib:register_generate_plant({
 | 
			
		||||
    surface = {
 | 
			
		||||
minetest.register_decoration({
 | 
			
		||||
	name = "bushes:youngtree",
 | 
			
		||||
	decoration = {
 | 
			
		||||
		"air"
 | 
			
		||||
	},
 | 
			
		||||
	fill_ratio = youngtree_rarity,
 | 
			
		||||
	y_min = 1,
 | 
			
		||||
	y_max = 40,
 | 
			
		||||
	place_on = {
 | 
			
		||||
		"default:dirt_with_grass",
 | 
			
		||||
		"stoneage:grass_with_silex",
 | 
			
		||||
		"sumpf:peat",
 | 
			
		||||
		"sumpf:sumpf"
 | 
			
		||||
	},
 | 
			
		||||
    max_count = 55,  --10,15
 | 
			
		||||
    rarity = 101 - 4,  --3,4
 | 
			
		||||
    min_elevation = 1, -- above sea level
 | 
			
		||||
	plantlife_limit = -0.9,
 | 
			
		||||
  },
 | 
			
		||||
  abstract_bushes.grow_youngtree2
 | 
			
		||||
)
 | 
			
		||||
	deco_type = "simple",
 | 
			
		||||
	flags = "all_floors",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
		--http://dev.minetest.net/Node_Drawtypes
 | 
			
		||||
--[[
 | 
			
		||||
	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)
 | 
			
		||||
							
								
								
									
										4
									
								
								bushes/locale/bushes.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: bushes
 | 
			
		||||
Young Tree 2 (bottom)=Strauch 2 (Ansatz)
 | 
			
		||||
Bush Branches @1=Buschäste @1
 | 
			
		||||
Bush Leaves @1=Buschblätter @1
 | 
			
		||||
							
								
								
									
										4
									
								
								bushes/locale/bushes.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: bushes
 | 
			
		||||
Young Tree 2 (bottom)=Juna Arbo 2 (malsupro)
 | 
			
		||||
Bush Branches @1=Arbustaj Branĉoj @1
 | 
			
		||||
Bush Leaves @1=Arbustaj Folioj @1
 | 
			
		||||
							
								
								
									
										4
									
								
								bushes/locale/bushes.fr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: bushes
 | 
			
		||||
Young Tree 2 (bottom)=Arbuste 2 (bas)
 | 
			
		||||
Bush Branches @1=Branches de buisson @1
 | 
			
		||||
Bush Leaves @1=Feuilles de buisson @1
 | 
			
		||||
							
								
								
									
										4
									
								
								bushes/locale/template.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: bushes
 | 
			
		||||
Young Tree 2 (bottom)=
 | 
			
		||||
Bush Branches @1=
 | 
			
		||||
Bush Leaves @1=
 | 
			
		||||
							
								
								
									
										4
									
								
								bushes/mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
name = bushes
 | 
			
		||||
title = Bushes
 | 
			
		||||
depends = default
 | 
			
		||||
optional_depends = stoneage, sumpf, ebiomes
 | 
			
		||||
							
								
								
									
										5
									
								
								bushes/settingtypes.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
# Bush rarity (higher number -> higher probability)
 | 
			
		||||
bushes.bush_rarity (Bush rarity) float 0.008 0.0001 1
 | 
			
		||||
 | 
			
		||||
# Youngtree rarity (higher number -> higher probability)
 | 
			
		||||
bushes.youngtree_rarity (Youngtree rarity) float 0.006 0.0001 1
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 72 KiB  | 
| 
		 Before Width: | Height: | Size: 33 KiB  | 
| 
		 Before Width: | Height: | Size: 39 KiB  | 
| 
		 Before Width: | Height: | Size: 52 KiB  | 
| 
		 Before Width: | Height: | Size: 609 B  | 
| 
		 Before Width: | Height: | Size: 620 B  | 
| 
		 Before Width: | Height: | Size: 396 B  | 
| 
		 Before Width: | Height: | Size: 540 B  | 
| 
		 Before Width: | Height: | Size: 285 B  | 
| 
		 Before Width: | Height: | Size: 657 B  | 
| 
		 Before Width: | Height: | Size: 693 B  | 
| 
		 Before Width: | Height: | Size: 83 B  | 
| 
		 Before Width: | Height: | Size: 525 B  | 
@@ -1,5 +1,5 @@
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = plantlife_i18n.gettext
 | 
			
		||||
local S = minetest.get_translator("bushes_classic")
 | 
			
		||||
 | 
			
		||||
-- Basket
 | 
			
		||||
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
biome_lib
 | 
			
		||||
plantlife_i18n
 | 
			
		||||
farming?
 | 
			
		||||
farming_plus?
 | 
			
		||||
@@ -4,10 +4,10 @@
 | 
			
		||||
bushes_classic = {}
 | 
			
		||||
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = plantlife_i18n.gettext
 | 
			
		||||
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:spawn_on_surfaces({
 | 
			
		||||
	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:spawn_on_surfaces({
 | 
			
		||||
		"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(S("[Bushes] Loaded."))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								bushes_classic/locale/bushes_classic.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
# textdomain: bushes_classic
 | 
			
		||||
Sugar=Zucker
 | 
			
		||||
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
 | 
			
		||||
Blackberry=Brombeere
 | 
			
		||||
Raw Blackberry pie=Rohe Brombeertorte
 | 
			
		||||
Cooked Blackberry pie=Brombeertorte
 | 
			
		||||
Slice of Blackberry pie=Brombeertortenstück
 | 
			
		||||
Basket with Blackberry pies=Korb mit Brombeertorten
 | 
			
		||||
Blackberry Bush=Brombeerbusch
 | 
			
		||||
Blueberry=Blaubeere
 | 
			
		||||
Raw Blueberry pie=Rohe Blaubeertorte
 | 
			
		||||
Cooked Blueberry pie=Blaubeertorte
 | 
			
		||||
Slice of Blueberry pie=Blaubeertortenstück
 | 
			
		||||
Basket with Blueberry pies=Korb mit Blaubeertorten
 | 
			
		||||
Blueberry Bush=Blaubeerbusch
 | 
			
		||||
Raspberry=Himbeere
 | 
			
		||||
Raw Raspberry pie=Rohe Himbeertorte
 | 
			
		||||
Cooked Raspberry pie=Himbeertorte
 | 
			
		||||
Slice of Raspberry pie=Himbeertortenstück
 | 
			
		||||
Basket with Raspberry pies=Korb mit Himbeertorten
 | 
			
		||||
Raspberry Bush=Himbeerbusch
 | 
			
		||||
Gooseberry=Stachelbeere
 | 
			
		||||
Raw Gooseberry pie=Rohe Stachelbeertorte
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										39
									
								
								bushes_classic/locale/bushes_classic.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
# textdomain: bushes_classic
 | 
			
		||||
Sugar=Sukero
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
Blueberry=Mirtelo
 | 
			
		||||
Raw Blueberry pie=Kruda Mirtelokuko
 | 
			
		||||
Cooked Blueberry pie=Kuirita Mirtelokuko
 | 
			
		||||
Slice of Blueberry pie=Tranĉaĵo de Mirtelokuko
 | 
			
		||||
Basket with Blueberry pies=Korbo kun Mirtelokukoj
 | 
			
		||||
Blueberry Bush=Mirtela Arbusto
 | 
			
		||||
Raspberry=Frambo
 | 
			
		||||
Raw Raspberry pie=Kruda Frambokuko
 | 
			
		||||
Cooked Raspberry pie=Kuirita Frambokuko
 | 
			
		||||
Slice of Raspberry pie=Tranĉaĵo de Frambokuko
 | 
			
		||||
Basket with Raspberry pies=Korbo kun Frambokukoj
 | 
			
		||||
Raspberry Bush=Framba Arbusto
 | 
			
		||||
Gooseberry=Grosbero
 | 
			
		||||
Raw Gooseberry pie=Kruda Grosberkuko
 | 
			
		||||
Cooked Gooseberry pie=Kuirita Grosberkuko
 | 
			
		||||
Slice of Gooseberry pie=Tranĉaĵo de Grosberkuko
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										39
									
								
								bushes_classic/locale/bushes_classic.es.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
# textdomain: bushes_classic
 | 
			
		||||
Sugar=Azúcar
 | 
			
		||||
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
 | 
			
		||||
Blackberry=Mora
 | 
			
		||||
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 Blackberry pies=Cesta con Pasteles de Mora
 | 
			
		||||
Blackberry Bush=Arbusto de Mora
 | 
			
		||||
Blueberry=Arándano
 | 
			
		||||
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 Blueberry pies=Cesta con Pasteles de Arándano
 | 
			
		||||
Blueberry Bush=Arbusto de Arándano
 | 
			
		||||
Raspberry=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 Raspberry pies=Cesta con Pasteles de Frambuesa
 | 
			
		||||
Raspberry Bush=Arbusto de Frambuesa
 | 
			
		||||
Gooseberry=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 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
 | 
			
		||||
							
								
								
									
										39
									
								
								bushes_classic/locale/bushes_classic.fr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
# textdomain: bushes_classic
 | 
			
		||||
Sugar=Sucre
 | 
			
		||||
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
 | 
			
		||||
Blackberry=Mûres
 | 
			
		||||
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 Blackberry pies=Panier de tartes aux fraises
 | 
			
		||||
Blackberry Bush=Buisson de mûres
 | 
			
		||||
Blueberry=Myrtilles
 | 
			
		||||
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 Blueberry pies=Panier de tartes aux mûres
 | 
			
		||||
Blueberry Bush=Buisson de myrtilles
 | 
			
		||||
Raspberry=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 Raspberry pies=Panier de tartes aux framboises
 | 
			
		||||
Raspberry Bush=Buisson de framboises
 | 
			
		||||
Gooseberry=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 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
 | 
			
		||||
							
								
								
									
										39
									
								
								bushes_classic/locale/bushes_classic.tr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
# textdomain: bushes_classic
 | 
			
		||||
Sugar=Şeker
 | 
			
		||||
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ı
 | 
			
		||||
Blackberry=Böğürtlen
 | 
			
		||||
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 Blackberry pies=Böğürtlenli pasta sepeti
 | 
			
		||||
Blackberry Bush=Böğürtlen fidanı
 | 
			
		||||
Blueberry=Yaban mersini
 | 
			
		||||
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 Blueberry pies=Yaban mersini pastalı sepet
 | 
			
		||||
Blueberry Bush=Yaban mersini fidanı
 | 
			
		||||
Raspberry=Ahududu
 | 
			
		||||
Raw Raspberry pie=Ahududulu çiğ pasta
 | 
			
		||||
Cooked Raspberry pie=Pişmiş ahududulu pasta
 | 
			
		||||
Slice of Raspberry pie=Ahududulu pasta dilimi
 | 
			
		||||
Basket with Raspberry pies=Ahududulu pasta sepeti
 | 
			
		||||
Raspberry Bush=Ahududu fidanı
 | 
			
		||||
Gooseberry=Bektaşi üzümü
 | 
			
		||||
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 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
 | 
			
		||||
							
								
								
									
										39
									
								
								bushes_classic/locale/template.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
# textdomain: bushes_classic
 | 
			
		||||
Sugar=
 | 
			
		||||
Strawberry=
 | 
			
		||||
Raw Strawberry pie=
 | 
			
		||||
Cooked Strawberry pie=
 | 
			
		||||
Slice of Strawberry pie=
 | 
			
		||||
Basket with Strawberry pies=
 | 
			
		||||
Strawberry Bush=
 | 
			
		||||
Blackberry=
 | 
			
		||||
Raw Blackberry pie=
 | 
			
		||||
Cooked Blackberry pie=
 | 
			
		||||
Slice of Blackberry pie=
 | 
			
		||||
Basket with Blackberry pies=
 | 
			
		||||
Blackberry Bush=
 | 
			
		||||
Blueberry=
 | 
			
		||||
Raw Blueberry pie=
 | 
			
		||||
Cooked Blueberry pie=
 | 
			
		||||
Slice of Blueberry pie=
 | 
			
		||||
Basket with Blueberry pies=
 | 
			
		||||
Blueberry Bush=
 | 
			
		||||
Raspberry=
 | 
			
		||||
Raw Raspberry pie=
 | 
			
		||||
Cooked Raspberry pie=
 | 
			
		||||
Slice of Raspberry pie=
 | 
			
		||||
Basket with Raspberry pies=
 | 
			
		||||
Raspberry Bush=
 | 
			
		||||
Gooseberry=
 | 
			
		||||
Raw Gooseberry pie=
 | 
			
		||||
Cooked Gooseberry pie=
 | 
			
		||||
Slice of Gooseberry pie=
 | 
			
		||||
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=
 | 
			
		||||
							
								
								
									
										2
									
								
								bushes_classic/mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
name = bushes_classic
 | 
			
		||||
optional_depends = farming, farming_plus
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = plantlife_i18n.gettext
 | 
			
		||||
local S = minetest.get_translator("bushes_classic")
 | 
			
		||||
 | 
			
		||||
plantlife_bushes = {}
 | 
			
		||||
 | 
			
		||||
@@ -63,7 +63,7 @@ plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
 | 
			
		||||
		-- with a chance of 1/3, return 2 bushes
 | 
			
		||||
		local amount
 | 
			
		||||
		if math.random(1,3) == 1 then
 | 
			
		||||
		if can_harvest and math.random(1,3) == 1 then
 | 
			
		||||
			amount = "2"
 | 
			
		||||
		else
 | 
			
		||||
			amount = "1"
 | 
			
		||||
@@ -159,19 +159,21 @@ for i, bush_name in ipairs(bushes_classic.bushes) do
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		on_use = minetest.item_eat(18),
 | 
			
		||||
		groups = { dig_immediate = 3 },
 | 
			
		||||
		is_ground_content = false,
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
		node_dig_prediction = "bushes:fruitless_bush"
 | 
			
		||||
		node_placement_prediction = "bushes:fruitless_bush"
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	minetest.register_node(":bushes:" .. bush_name .. "_bush", {
 | 
			
		||||
@@ -185,6 +187,8 @@ for i, bush_name in ipairs(bushes_classic.bushes) do
 | 
			
		||||
		groups = groups,
 | 
			
		||||
		sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
		drop = "",
 | 
			
		||||
		node_dig_prediction = node_dig_prediction,
 | 
			
		||||
		node_placement_prediction = node_placement_prediction,
 | 
			
		||||
		after_dig_node = function( pos, oldnode, oldmetadata, digger )
 | 
			
		||||
			return plantlife_bushes.after_dig_node(pos, oldnode, oldmetadata, digger);
 | 
			
		||||
		end,
 | 
			
		||||
@@ -207,4 +211,5 @@ minetest.register_node(":bushes:basket_empty", {
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
    groups = { dig_immediate = 3 },
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 6.6 KiB  | 
| 
		 Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 6.7 KiB  | 
| 
		 Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 6.5 KiB  | 
| 
		 Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 6.8 KiB  | 
| 
		 Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 6.7 KiB  | 
| 
		 Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 6.7 KiB  | 
@@ -1,2 +0,0 @@
 | 
			
		||||
default
 | 
			
		||||
plantlife_i18n
 | 
			
		||||
@@ -1,15 +1,2 @@
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
local title		= "Cave Stuff"
 | 
			
		||||
local version	= "0.0.3"
 | 
			
		||||
local mname		= "cavestuff"
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = plantlife_i18n.gettext
 | 
			
		||||
 | 
			
		||||
dofile(minetest.get_modpath("cavestuff").."/nodes.lua")
 | 
			
		||||
dofile(minetest.get_modpath("cavestuff").."/mapgen.lua")
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								cavestuff/locale/cavestuff.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: cavestuff
 | 
			
		||||
Pebble=Kieselstein
 | 
			
		||||
Desert Pebble=Wüstenkiesel
 | 
			
		||||
Stalactite=Stalaktit
 | 
			
		||||
							
								
								
									
										4
									
								
								cavestuff/locale/cavestuff.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: cavestuff
 | 
			
		||||
Pebble=Ŝtoneto
 | 
			
		||||
Desert Pebble=Dezerta Ŝtoneto
 | 
			
		||||
Stalactite=Stalaktito
 | 
			
		||||
							
								
								
									
										4
									
								
								cavestuff/locale/cavestuff.fr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: cavestuff
 | 
			
		||||
Pebble=Caillou
 | 
			
		||||
Desert Pebble=Caillou du désert
 | 
			
		||||
Stalactite=Stalactite
 | 
			
		||||
							
								
								
									
										4
									
								
								cavestuff/locale/template.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
# textdomain: cavestuff
 | 
			
		||||
Pebble=
 | 
			
		||||
Desert Pebble=
 | 
			
		||||
Stalactite=
 | 
			
		||||
@@ -1,52 +1,65 @@
 | 
			
		||||
--Map Generation Stuff
 | 
			
		||||
 | 
			
		||||
minetest.register_on_generated(function(minp, maxp, seed)
 | 
			
		||||
	if maxp.y >= 2 and minp.y <= 0 then
 | 
			
		||||
		-- Generate pebbles
 | 
			
		||||
		local perlin1 = minetest.get_perlin(329, 3, 0.6, 100)
 | 
			
		||||
		-- Assume X and Z lengths are equal
 | 
			
		||||
		local divlen = 16
 | 
			
		||||
		local divs = (maxp.x-minp.x)/divlen+1;
 | 
			
		||||
		for divx=0,divs-1 do
 | 
			
		||||
		for divz=0,divs-1 do
 | 
			
		||||
			local x0 = minp.x + math.floor((divx+0)*divlen)
 | 
			
		||||
			local z0 = minp.z + math.floor((divz+0)*divlen)
 | 
			
		||||
			local x1 = minp.x + math.floor((divx+1)*divlen)
 | 
			
		||||
			local z1 = minp.z + math.floor((divz+1)*divlen)
 | 
			
		||||
			-- Determine pebble amount from perlin noise
 | 
			
		||||
			local pebble_amount = math.floor(perlin1:get2d({x=x0, y=z0}) ^ 2 * 2)
 | 
			
		||||
			-- Find random positions for pebbles based on this random
 | 
			
		||||
			local pr = PseudoRandom(seed+1)
 | 
			
		||||
			for i=0,pebble_amount do
 | 
			
		||||
				local x = pr:next(x0, x1)
 | 
			
		||||
				local z = pr:next(z0, z1)
 | 
			
		||||
				-- Find ground level (0...15)
 | 
			
		||||
				local ground_y = nil
 | 
			
		||||
				for y=30,0,-1 do
 | 
			
		||||
					if minetest.get_node({x=x,y=y,z=z}).name ~= "air" then
 | 
			
		||||
						ground_y = y
 | 
			
		||||
						break
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
minetest.register_decoration({
 | 
			
		||||
	decoration = {
 | 
			
		||||
		"cavestuff:pebble_1",
 | 
			
		||||
		"cavestuff:pebble_2"
 | 
			
		||||
	},
 | 
			
		||||
	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
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
				if ground_y then
 | 
			
		||||
					local p = {x=x,y=ground_y+1,z=z}
 | 
			
		||||
					local nn = minetest.get_node(p).name
 | 
			
		||||
					-- Check if the node can be replaced
 | 
			
		||||
					if minetest.registered_nodes[nn] and
 | 
			
		||||
						minetest.registered_nodes[nn].buildable_to then
 | 
			
		||||
						nn = minetest.get_node({x=x,y=ground_y,z=z}).name
 | 
			
		||||
						-- If desert sand, add dry shrub
 | 
			
		||||
						if nn == "default:dirt_with_grass" then
 | 
			
		||||
							minetest.swap_node(p,{name="cavestuff:pebble_"..pr:next(1,2), param2=math.random(0,3)})
 | 
			
		||||
						elseif nn == "default:desert_sand" then
 | 
			
		||||
							minetest.swap_node(p,{name="cavestuff:desert_pebble_"..pr:next(1,2), param2=math.random(0,3)})
 | 
			
		||||
					    end
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
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
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										2
									
								
								cavestuff/mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
name = cavestuff
 | 
			
		||||
depends = default
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = plantlife_i18n.gettext
 | 
			
		||||
local S = minetest.get_translator("cavestuff")
 | 
			
		||||
 | 
			
		||||
--Rocks
 | 
			
		||||
 | 
			
		||||
@@ -12,65 +12,64 @@ 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},
 | 
			
		||||
    selection_box = cbox,
 | 
			
		||||
    collision_box = cbox,
 | 
			
		||||
    on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
	groups = {cracky=3, stone=1, attached_node=1, dig_immediate=3},
 | 
			
		||||
	selection_box = cbox,
 | 
			
		||||
	collision_box = cbox,
 | 
			
		||||
	on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
		-- place a random pebble node
 | 
			
		||||
		local stack = ItemStack("cavestuff:pebble_"..math.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, not_in_creative_inventory=1},
 | 
			
		||||
	groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1, dig_immediate=3},
 | 
			
		||||
	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",{
 | 
			
		||||
	description = S("Desert Pebble"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "cavestuff_pebble.obj",
 | 
			
		||||
    tiles = {"default_desert_stone.png"},
 | 
			
		||||
    paramtype = "light",
 | 
			
		||||
	 tiles = {"default_desert_stone.png"},
 | 
			
		||||
	 paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
    groups = {cracky=3, stone=1},
 | 
			
		||||
	 groups = {cracky=3, stone=1, attached_node=1, dig_immediate=3},
 | 
			
		||||
	selection_box = cbox,
 | 
			
		||||
	collision_box = cbox,
 | 
			
		||||
    on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
	 on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
		-- place a random pebble node
 | 
			
		||||
		local stack = ItemStack("cavestuff:desert_pebble_"..math.random(1,2))
 | 
			
		||||
		local ret = minetest.item_place(stack, placer, pointed_thing)
 | 
			
		||||
		return ItemStack("cavestuff:desert_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:desert_pebble_2",{
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "cavestuff_pebble.obj",
 | 
			
		||||
	drop = "cavestuff:desert_pebble_1",
 | 
			
		||||
    tiles = {"default_desert_stone.png"},
 | 
			
		||||
    paramtype = "light",
 | 
			
		||||
	 tiles = {"default_desert_stone.png"},
 | 
			
		||||
	 paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
    groups = {cracky=3, stone=1, not_in_creative_inventory=1},
 | 
			
		||||
	 groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1, dig_immediate=3},
 | 
			
		||||
	selection_box = cbox,
 | 
			
		||||
	collision_box = cbox,
 | 
			
		||||
    sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	 sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Staclactites
 | 
			
		||||
@@ -79,26 +78,42 @@ minetest.register_node("cavestuff:stalactite_1",{
 | 
			
		||||
	drawtype="nodebox",
 | 
			
		||||
	tiles = {"undergrowth_pebble.png"},
 | 
			
		||||
	groups = {cracky=3,attached_node=1},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	description = S("Stalactite"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.187500,0.425000,-0.150003,0.162500,0.500000,0.162500},
 | 
			
		||||
			{-0.112500,0.162500,-0.100000,0.087500,0.475000,0.087500},
 | 
			
		||||
			{-0.062500,-0.275000,-0.062500,0.062500,0.500000,0.062500},
 | 
			
		||||
			{-0.037500,-0.837500,0.037500,0.037500,0.500000,-0.025000},
 | 
			
		||||
			{-0.187500,-0.425000,-0.150003,0.162500,-0.500000,0.162500},
 | 
			
		||||
			{-0.112500,-0.162500,-0.100000,0.087500,-0.475000,0.087500},
 | 
			
		||||
			{-0.062500,0.275000,-0.062500,0.062500,-0.500000,0.062500},
 | 
			
		||||
			{-0.037500,0.837500,0.037500,0.037500,-0.500000,-0.025000},
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
		local pt = pointed_thing
 | 
			
		||||
		if minetest.get_node(pt.under).name=="default:stone"
 | 
			
		||||
		and minetest.get_node({x=pt.under.x, y=pt.under.y-1, z=pt.under.z}).name=="air"
 | 
			
		||||
		and minetest.get_node({x=pt.under.x, y=pt.under.y-2, z=pt.under.z}).name=="air" then
 | 
			
		||||
			minetest.swap_node({x=pt.under.x, y=pt.under.y-1, z=pt.under.z}, {name="cavestuff:stalactite_"..math.random(1,3)})
 | 
			
		||||
			if not minetest.setting_getbool("creative_mode") then
 | 
			
		||||
		local dir = vector.subtract(pointed_thing.above, pointed_thing.under)
 | 
			
		||||
		local base = pointed_thing.under
 | 
			
		||||
		local place = vector.add(base, dir)
 | 
			
		||||
		local above = vector.add(place, dir)
 | 
			
		||||
 | 
			
		||||
		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
 | 
			
		||||
			minetest.record_protection_violation(place, playername)
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if minetest.get_node(base).name == "default:stone"
 | 
			
		||||
		and minetest.get_node(place).name == "air"
 | 
			
		||||
		and minetest.get_node(above).name == "air"
 | 
			
		||||
		then
 | 
			
		||||
			minetest.swap_node(place, {
 | 
			
		||||
				name = "cavestuff:stalactite_"..math.random(1,3),
 | 
			
		||||
				param2 = minetest.dir_to_wallmounted(vector.multiply(dir, -1))
 | 
			
		||||
			})
 | 
			
		||||
			if not minetest.is_creative_enabled(playername) then
 | 
			
		||||
				itemstack:take_item()
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
@@ -110,16 +125,17 @@ minetest.register_node("cavestuff:stalactite_2",{
 | 
			
		||||
	drawtype="nodebox",
 | 
			
		||||
	tiles = {"undergrowth_pebble.png"},
 | 
			
		||||
	groups = {cracky=3,attached_node=1,not_in_creative_inventory=1},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = "cavestuff:stalactite_1",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
				{-0.187500,0.387500,-0.150003,0.162500,0.500000,0.162500},
 | 
			
		||||
	            {-0.112500,0.112500,-0.100000,0.087500,0.475000,0.087500},
 | 
			
		||||
	            {-0.062500,-0.675000,-0.062500,0.062500,0.500000,0.062500},
 | 
			
		||||
	            {-0.037500,-0.975000,0.037500,0.037500,0.500000,-0.025000},
 | 
			
		||||
			{-0.187500,-0.387500,-0.150003,0.162500,-0.500000,0.162500},
 | 
			
		||||
			{-0.112500,-0.112500,-0.100000,0.087500,-0.475000,0.087500},
 | 
			
		||||
			{-0.062500,0.675000,-0.062500,0.062500,-0.500000,0.062500},
 | 
			
		||||
			{-0.037500,0.975000,0.037500,0.037500,-0.500000,-0.025000},
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
@@ -128,18 +144,17 @@ minetest.register_node("cavestuff:stalactite_3",{
 | 
			
		||||
	drawtype="nodebox",
 | 
			
		||||
	tiles = {"undergrowth_pebble.png"},
 | 
			
		||||
	groups = {cracky=3,attached_node=1,not_in_creative_inventory=1},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = "cavestuff:stalactite_1",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	node_box = {
 | 
			
		||||
	   type = "fixed",
 | 
			
		||||
	   fixed = {
 | 
			
		||||
		   {-0.187500,0.387500,-0.150003,0.162500,0.500000,0.162500},
 | 
			
		||||
		   {-0.112500,0.037500,-0.100000,0.087500,0.475000,0.087500},
 | 
			
		||||
		   {-0.062500,-0.437500,-0.062500,0.062500,0.500000,0.062500},
 | 
			
		||||
		   {-0.037500,-1.237500,0.037500,0.037500,0.500000,-0.025000},
 | 
			
		||||
	    }
 | 
			
		||||
    },
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.187500,-0.387500,-0.150003,0.162500,-0.500000,0.162500},
 | 
			
		||||
			{-0.112500,-0.037500,-0.100000,0.087500,-0.475000,0.087500},
 | 
			
		||||
			{-0.062500,0.437500,-0.062500,0.062500,-0.500000,0.062500},
 | 
			
		||||
			{-0.037500,1.237500,0.037500,0.037500,-0.500000,-0.025000},
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--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,4 +0,0 @@
 | 
			
		||||
default
 | 
			
		||||
biome_lib
 | 
			
		||||
plantlife_i18n
 | 
			
		||||
farming?
 | 
			
		||||
@@ -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
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = minetest.get_translator("dryplants")
 | 
			
		||||
 | 
			
		||||
-- 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 = plantlife_i18n.gettext
 | 
			
		||||
 | 
			
		||||
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")
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
@@ -130,12 +112,14 @@ minetest.register_node("dryplants:grass", {
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	tiles = {"dryplants_grass.png"},
 | 
			
		||||
	use_texture_alpha = "clip",
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	node_box = {
 | 
			
		||||
	    type = "fixed",
 | 
			
		||||
        fixed = {-0.5   , -0.5   , -0.5   ,   0.5   , -0.4375,  0.5   },
 | 
			
		||||
    },
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -144,7 +128,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"})
 | 
			
		||||
@@ -161,12 +145,14 @@ minetest.register_node("dryplants:hay", {
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	tiles = {"dryplants_hay.png"},
 | 
			
		||||
	use_texture_alpha = "clip",
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	node_box = {
 | 
			
		||||
	    type = "fixed",
 | 
			
		||||
        fixed = {-0.5   , -0.5   , -0.5   ,   0.5   , -0.4375,  0.5   },
 | 
			
		||||
    },
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -189,8 +175,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})
 | 
			
		||||
@@ -199,7 +185,3 @@ minetest.register_abm({
 | 
			
		||||
		end
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +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 = plantlife_i18n.gettext
 | 
			
		||||
local S = minetest.get_translator("dryplants")
 | 
			
		||||
 | 
			
		||||
abstract_dryplants.grow_juncus = function(pos)
 | 
			
		||||
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
 | 
			
		||||
@@ -46,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
 | 
			
		||||
@@ -60,12 +55,13 @@ minetest.register_node("dryplants:juncus", {
 | 
			
		||||
		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",
 | 
			
		||||
@@ -92,44 +88,69 @@ minetest.register_node("dryplants:juncus_02", {
 | 
			
		||||
-- GENERATE SMALL JUNCUS
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- near water or swamp
 | 
			
		||||
biome_lib:register_generate_plant({
 | 
			
		||||
    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_generate_plant({
 | 
			
		||||
    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)
 | 
			
		||||
							
								
								
									
										21
									
								
								dryplants/locale/dryplants.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,21 @@
 | 
			
		||||
# textdomain: dryplants
 | 
			
		||||
Sickle=Sichel
 | 
			
		||||
Cut Grass=Grasschnitt
 | 
			
		||||
Hay=Heu
 | 
			
		||||
Short Grass=Kurzes Gras
 | 
			
		||||
Juncus=Binsen
 | 
			
		||||
Wet Reed=Nasses Schilf
 | 
			
		||||
Wet Reed Slab=Nasse Schilfplatte
 | 
			
		||||
Wet Reed Roof=Nasses Schilfdach
 | 
			
		||||
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 1=Schilfdachwinkel 1
 | 
			
		||||
Reed Roof Corner 2=Schilfdachwinkel
 | 
			
		||||
Reedmace=Rohrkolben
 | 
			
		||||
Reedmace, height: 1=Rohrkolben, Höhe: 1
 | 
			
		||||
Reedmace, height: 2=Rohrkolben, Höhe: 2
 | 
			
		||||
Reedmace, height: 3=Rohrkolben, Höhe: 3
 | 
			
		||||
Reedmace, height: 3 & Spikes=Rohrkolben, Höhe: 3 & Rispe
 | 
			
		||||
							
								
								
									
										21
									
								
								dryplants/locale/dryplants.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,21 @@
 | 
			
		||||
# textdomain: dryplants
 | 
			
		||||
Sickle=
 | 
			
		||||
Cut Grass=Tranĉita Herbenon
 | 
			
		||||
Hay=Fojno
 | 
			
		||||
Short Grass=Mallonga Herbo
 | 
			
		||||
Juncus=Junko
 | 
			
		||||
Wet Reed=Malseka Kano
 | 
			
		||||
Wet Reed Slab=Slabo de Malseka Kano
 | 
			
		||||
Wet Reed Roof=Tegmento 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 1=Tegmentangulo 1 de Kano
 | 
			
		||||
Reed Roof Corner 2=Tegmentangulo 2 de Kano
 | 
			
		||||
Reedmace=Tifeo
 | 
			
		||||
Reedmace, height: 1=Tifeo, alteco: 1
 | 
			
		||||
Reedmace, height: 2=Tifeo, alteco: 2
 | 
			
		||||
Reedmace, height: 3=Tifeo, alteco: 3
 | 
			
		||||
Reedmace, height: 3 & Spikes=Tifeo, alteco: 3 & Pikiloj
 | 
			
		||||
							
								
								
									
										21
									
								
								dryplants/locale/dryplants.fr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,21 @@
 | 
			
		||||
# textdomain: dryplants
 | 
			
		||||
Sickle=Faucille
 | 
			
		||||
Cut Grass=Herbe coupée
 | 
			
		||||
Hay=Foin
 | 
			
		||||
Short Grass=Herbes courtes
 | 
			
		||||
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 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 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
 | 
			
		||||
Reedmace, height: 2=Roseau, 2 de hauteur
 | 
			
		||||
Reedmace, height: 3=Roseau, 3 de hauteur
 | 
			
		||||
Reedmace, height: 3 & Spikes=Roseau, 3 de hauteur avec panicules
 | 
			
		||||
							
								
								
									
										21
									
								
								dryplants/locale/template.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,21 @@
 | 
			
		||||
# textdomain: dryplants
 | 
			
		||||
Sickle=
 | 
			
		||||
Cut Grass=
 | 
			
		||||
Hay=
 | 
			
		||||
Short Grass=
 | 
			
		||||
Juncus=
 | 
			
		||||
Wet Reed=
 | 
			
		||||
Wet Reed Slab=
 | 
			
		||||
Wet Reed Roof=
 | 
			
		||||
Wet Reed Roof Corner 1=
 | 
			
		||||
Wet Reed Roof Corner 2=
 | 
			
		||||
Reed=
 | 
			
		||||
Reed Slab=
 | 
			
		||||
Reed Roof=
 | 
			
		||||
Reed Roof Corner 1=
 | 
			
		||||
Reed Roof Corner 2=
 | 
			
		||||
Reedmace=
 | 
			
		||||
Reedmace, height: 1=
 | 
			
		||||
Reedmace, height: 2=
 | 
			
		||||
Reedmace, height: 3=
 | 
			
		||||
Reedmace, height: 3 & Spikes=
 | 
			
		||||
@@ -1,25 +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)
 | 
			
		||||
	local right_here = {x=pos.x, y=pos.y, z=pos.z}
 | 
			
		||||
	minetest.swap_node(right_here, {name="dryplants:grass_short"})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
biome_lib:register_generate_plant({
 | 
			
		||||
    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"
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								dryplants/mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
name = dryplants
 | 
			
		||||
depends = default
 | 
			
		||||
optional_depends = farming, ebiomes
 | 
			
		||||
@@ -1,32 +1,20 @@
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- Grasses - More Tall Grass 0.0.2
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- by Mossmanikin
 | 
			
		||||
 | 
			
		||||
-- Contains code from:		biome_lib
 | 
			
		||||
-- Looked at code from:		default
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
abstract_dryplants.grow_grass = function(pos)
 | 
			
		||||
	local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
 | 
			
		||||
	local grass_size = math.random(1,5)
 | 
			
		||||
	if minetest.get_node(right_here).name == "air"  -- instead of check_air = true,
 | 
			
		||||
	or minetest.get_node(right_here).name == "default:junglegrass" then
 | 
			
		||||
		minetest.swap_node(right_here, {name="default:grass_"..grass_size})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
biome_lib:register_generate_plant({
 | 
			
		||||
    surface = {
 | 
			
		||||
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"
 | 
			
		||||
	},
 | 
			
		||||
    max_count = TALL_GRASS_PER_MAPBLOCK,
 | 
			
		||||
    rarity = 101 - TALL_GRASS_RARITY,
 | 
			
		||||
    min_elevation = 1, -- above sea level
 | 
			
		||||
	plantlife_limit = -0.9,
 | 
			
		||||
  },
 | 
			
		||||
  abstract_dryplants.grow_grass
 | 
			
		||||
)
 | 
			
		||||
	deco_type = "simple",
 | 
			
		||||
	flags = "all_floors"
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
-- Dependencies:			default
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = plantlife_i18n.gettext
 | 
			
		||||
local S = minetest.get_translator("dryplants")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("stairs:stair_wetreed",				"dryplants:wetreed_roof")
 | 
			
		||||
minetest.register_alias("stairs:slab_wetreed",				"dryplants:wetreed_slab")
 | 
			
		||||
@@ -44,6 +44,7 @@ minetest.register_node("dryplants:wetreed_slab", {
 | 
			
		||||
		fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -72,109 +73,107 @@ minetest.register_node("dryplants:wetreed_roof", {
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	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",
 | 
			
		||||
@@ -197,6 +196,7 @@ minetest.register_node("dryplants:wetreed_roof_corner", {
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -227,37 +227,35 @@ minetest.register_node("dryplants:wetreed_roof_corner_2", {
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- 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
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
@@ -269,6 +267,7 @@ minetest.register_node("dryplants:reed", {
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	tiles = {"dryplants_reed.png"},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -290,6 +289,7 @@ minetest.register_node("dryplants:reed_slab", {
 | 
			
		||||
		fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -318,14 +318,15 @@ minetest.register_node("dryplants:reed_roof", {
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- 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",
 | 
			
		||||
@@ -348,6 +349,7 @@ minetest.register_node("dryplants:reed_roof_corner", {
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -378,5 +380,6 @@ minetest.register_node("dryplants:reed_roof_corner_2", {
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=3, flammable=2},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -18,20 +8,22 @@
 | 
			
		||||
-- The seed hairs were used by some Native American groups as tinder for starting fires
 | 
			
		||||
 | 
			
		||||
-- support for i18n
 | 
			
		||||
local S = plantlife_i18n.gettext
 | 
			
		||||
local S = minetest.get_translator("dryplants")
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- REEDMACE SHAPES
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
abstract_dryplants.grow_reedmace = function(pos)
 | 
			
		||||
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
 | 
			
		||||
@@ -50,14 +42,16 @@ abstract_dryplants.grow_reedmace = function(pos)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
abstract_dryplants.grow_reedmace_water = function(pos)
 | 
			
		||||
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"})
 | 
			
		||||
@@ -77,6 +71,8 @@ abstract_dryplants.grow_reedmace_water = function(pos)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
abstract_dryplants.grow_reedmace = grow_reedmace -- compatibility
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- REEDMACE SPIKES
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
@@ -92,6 +88,7 @@ minetest.register_node("dryplants:reedmace_spikes", {
 | 
			
		||||
		flammable=2,
 | 
			
		||||
		not_in_creative_inventory=1
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = 'dryplants:reedmace_sapling',
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -114,6 +111,7 @@ minetest.register_node("dryplants:reedmace_top", {
 | 
			
		||||
		flammable=2,
 | 
			
		||||
		not_in_creative_inventory=1
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = 'dryplants:reedmace_sapling',
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -137,6 +135,7 @@ minetest.register_node("dryplants:reedmace_height_2", {
 | 
			
		||||
		flammable=2--,
 | 
			
		||||
		--not_in_creative_inventory=1
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = 'dryplants:reedmace_sapling',
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -160,6 +159,7 @@ minetest.register_node("dryplants:reedmace_height_3", {
 | 
			
		||||
		flammable=2--,
 | 
			
		||||
		--not_in_creative_inventory=1
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = 'dryplants:reedmace_sapling',
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -183,6 +183,7 @@ minetest.register_node("dryplants:reedmace_height_3_spikes", {
 | 
			
		||||
		flammable=2--,
 | 
			
		||||
		--not_in_creative_inventory=1
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = 'dryplants:reedmace_sapling',
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -205,6 +206,7 @@ minetest.register_node("dryplants:reedmace", {
 | 
			
		||||
		flammable=2,
 | 
			
		||||
		not_in_creative_inventory=1
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = 'dryplants:reedmace_sapling',
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -235,6 +237,7 @@ minetest.register_node("dryplants:reedmace_bottom", {
 | 
			
		||||
		flammable=2,
 | 
			
		||||
		not_in_creative_inventory=1
 | 
			
		||||
	},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	drop = 'dryplants:reedmace_sapling',
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -264,7 +267,8 @@ minetest.register_node("dryplants:reedmace_sapling", {
 | 
			
		||||
	groups = {
 | 
			
		||||
		snappy=3,
 | 
			
		||||
		flammable=2,
 | 
			
		||||
		attached_node=1
 | 
			
		||||
		attached_node=1,
 | 
			
		||||
		sapling=1,
 | 
			
		||||
	},
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -275,19 +279,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
 | 
			
		||||
})
 | 
			
		||||
@@ -317,7 +321,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()
 | 
			
		||||
@@ -325,89 +329,120 @@ minetest.register_entity("dryplants:reedmace_water_entity",{
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
-- SPAWN REEDMACE
 | 
			
		||||
-----------------------------------------------------------------------------------------------
 | 
			
		||||
--[[biome_lib:spawn_on_surfaces({
 | 
			
		||||
	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_generate_plant({
 | 
			
		||||
    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_generate_plant({
 | 
			
		||||
    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_generate_plant({
 | 
			
		||||
    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)
 | 
			
		||||
 
 | 
			
		||||