Compare commits
	
		
			43 Commits
		
	
	
		
			master
			...
			ferns-clea
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					3b524b01d7 | ||
| 
						 | 
					06c8d1c5ea | ||
| 
						 | 
					b815ffc578 | ||
| 
						 | 
					85dd10e88a | ||
| 
						 | 
					ccee13df66 | ||
| 
						 | 
					d7d56ec1b0 | ||
| 
						 | 
					97f7b11f86 | ||
| 
						 | 
					e34dc49f07 | ||
| 
						 | 
					329f6eb5d5 | ||
| 
						 | 
					aa8668f69b | ||
| 
						 | 
					5b5652c552 | ||
| 
						 | 
					6b7b15ba4f | ||
| 
						 | 
					d3daa28b06 | ||
| 
						 | 
					6b2a7785da | ||
| 
						 | 
					9a6491a366 | ||
| 
						 | 
					4eb20c03c2 | ||
| 
						 | 
					77d0a1040c | ||
| 
						 | 
					13a249369d | ||
| 
						 | 
					69ce1ff826 | ||
| 
						 | 
					282e3c3317 | ||
| 
						 | 
					878c5dd449 | ||
| 
						 | 
					9ad737f951 | ||
| 
						 | 
					4fb3cdfffb | ||
| 
						 | 
					174096ac87 | ||
| 
						 | 
					7357524224 | ||
| 
						 | 
					c5f6d6831e | ||
| 
						 | 
					a3e926421a | ||
| 
						 | 
					62b27570f4 | ||
| 
						 | 
					76414325cf | ||
| 
						 | 
					549d39d4d2 | ||
| 
						 | 
					b72f1dd5eb | ||
| 
						 | 
					d1369c25cf | ||
| 
						 | 
					1d0543b435 | ||
| 
						 | 
					38d972d58e | ||
| 
						 | 
					cd0735203a | ||
| 
						 | 
					27156fdd71 | ||
| 
						 | 
					655cff9f76 | ||
| 
						 | 
					abdf76566a | ||
| 
						 | 
					b069341d33 | ||
| 
						 | 
					64471c9bfc | ||
| 
						 | 
					fc3363d439 | ||
| 
						 | 
					786a28a5e9 | ||
| 
						 | 
					25c8c8aeb0 | 
							
								
								
									
										13
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,13 +0,0 @@
 | 
				
			|||||||
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
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					*~
 | 
				
			||||||
							
								
								
									
										21
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						@@ -1,21 +0,0 @@
 | 
				
			|||||||
unused_args = false
 | 
					 | 
				
			||||||
allow_defined_top = true
 | 
					 | 
				
			||||||
max_line_length = 185
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exclude_files = {".luacheckrc"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
globals = {
 | 
					 | 
				
			||||||
	"biome_lib",
 | 
					 | 
				
			||||||
	"bushes_classic",
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
read_globals = {
 | 
					 | 
				
			||||||
	table = {fields = {"copy"}},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"minetest", "ItemStack",
 | 
					 | 
				
			||||||
	"vector",
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"default",
 | 
					 | 
				
			||||||
	"moretrees",
 | 
					 | 
				
			||||||
	"dump",
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,65 +0,0 @@
 | 
				
			|||||||
-- 3D Mushroom mod by VanessaE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.override_item("flowers:mushroom_fertile_brown", {
 | 
					 | 
				
			||||||
	drawtype = "mesh",
 | 
					 | 
				
			||||||
	mesh = "3dmushrooms.obj",
 | 
					 | 
				
			||||||
	tiles = {"3dmushrooms_brown.png"},
 | 
					 | 
				
			||||||
	selection_box = {
 | 
					 | 
				
			||||||
		type = "fixed",
 | 
					 | 
				
			||||||
		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	inventory_image = "3dmushrooms_brown_inv.png",
 | 
					 | 
				
			||||||
	wield_image = "3dmushrooms_brown_inv.png"
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.override_item("flowers:mushroom_brown", {
 | 
					 | 
				
			||||||
	drawtype = "mesh",
 | 
					 | 
				
			||||||
	mesh = "3dmushrooms.obj",
 | 
					 | 
				
			||||||
	tiles = {"3dmushrooms_brown.png"},
 | 
					 | 
				
			||||||
	selection_box = {
 | 
					 | 
				
			||||||
		type = "fixed",
 | 
					 | 
				
			||||||
		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	inventory_image = "3dmushrooms_brown_inv.png",
 | 
					 | 
				
			||||||
	wield_image = "3dmushrooms_brown_inv.png"
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.override_item("flowers:mushroom_fertile_red", {
 | 
					 | 
				
			||||||
	drawtype = "mesh",
 | 
					 | 
				
			||||||
	mesh = "3dmushrooms.obj",
 | 
					 | 
				
			||||||
	tiles = {"3dmushrooms_red.png"},
 | 
					 | 
				
			||||||
	selection_box = {
 | 
					 | 
				
			||||||
		type = "fixed",
 | 
					 | 
				
			||||||
		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	inventory_image = "3dmushrooms_red_inv.png",
 | 
					 | 
				
			||||||
	wield_image = "3dmushrooms_red_inv.png"
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.override_item("flowers:mushroom_red", {
 | 
					 | 
				
			||||||
	drawtype = "mesh",
 | 
					 | 
				
			||||||
	mesh = "3dmushrooms.obj",
 | 
					 | 
				
			||||||
	tiles = {"3dmushrooms_red.png"},
 | 
					 | 
				
			||||||
	selection_box = {
 | 
					 | 
				
			||||||
		type = "fixed",
 | 
					 | 
				
			||||||
		fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	inventory_image = "3dmushrooms_red_inv.png",
 | 
					 | 
				
			||||||
	wield_image = "3dmushrooms_red_inv.png"
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- aliases to the default mushrooms
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_alias("mushroom:brown", "flowers:mushroom_brown")
 | 
					 | 
				
			||||||
minetest.register_alias("mushroom:brown_natural", "flowers:mushroom_fertile_brown")
 | 
					 | 
				
			||||||
minetest.register_alias("mushroom:spore_brown", "flowers:mushroom_spores_brown")
 | 
					 | 
				
			||||||
minetest.register_alias("mushroom:spore2", "flowers:mushroom_spores_brown")
 | 
					 | 
				
			||||||
minetest.register_alias("mushroom:brown_essence", "flowers:mushroom_brown")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_alias("mushroom:red", "flowers:mushroom_red")
 | 
					 | 
				
			||||||
minetest.register_alias("mushroom:red_natural", "flowers:mushroom_fertile_red")
 | 
					 | 
				
			||||||
minetest.register_alias("mushroom:spore_red", "flowers:mushroom_spores_red")
 | 
					 | 
				
			||||||
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")
 | 
					 | 
				
			||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
name = 3dmushrooms
 | 
					 | 
				
			||||||
depends = flowers
 | 
					 | 
				
			||||||
@@ -1,329 +0,0 @@
 | 
				
			|||||||
# Blender v2.73 (sub 0) OBJ File: 'plantlife_mushroom.blend'
 | 
					 | 
				
			||||||
# www.blender.org
 | 
					 | 
				
			||||||
o Cylinder
 | 
					 | 
				
			||||||
v 0.261489 -0.177877 -0.000000
 | 
					 | 
				
			||||||
v 0.165972 -0.203714 -0.000000
 | 
					 | 
				
			||||||
v 0.210761 -0.224729 -0.000000
 | 
					 | 
				
			||||||
v 0.258520 -0.211811 -0.000000
 | 
					 | 
				
			||||||
v 0.185335 -0.171215 -0.184553
 | 
					 | 
				
			||||||
v 0.116925 -0.199423 -0.118862
 | 
					 | 
				
			||||||
v 0.148161 -0.219252 -0.151707
 | 
					 | 
				
			||||||
v 0.182366 -0.205148 -0.184553
 | 
					 | 
				
			||||||
v 0.001484 -0.155130 -0.260997
 | 
					 | 
				
			||||||
v -0.001484 -0.189063 -0.168096
 | 
					 | 
				
			||||||
v -0.002969 -0.206030 -0.214547
 | 
					 | 
				
			||||||
v -0.001484 -0.189063 -0.260997
 | 
					 | 
				
			||||||
v -0.182366 -0.139045 -0.184553
 | 
					 | 
				
			||||||
v -0.119894 -0.178704 -0.118862
 | 
					 | 
				
			||||||
v -0.154099 -0.192808 -0.151707
 | 
					 | 
				
			||||||
v -0.185335 -0.172979 -0.184553
 | 
					 | 
				
			||||||
v -0.258520 -0.132382 -0.000000
 | 
					 | 
				
			||||||
v -0.168941 -0.174413 -0.000000
 | 
					 | 
				
			||||||
v -0.216699 -0.187331 -0.000000
 | 
					 | 
				
			||||||
v -0.261489 -0.166316 -0.000000
 | 
					 | 
				
			||||||
v -0.182366 -0.139045 0.184553
 | 
					 | 
				
			||||||
v -0.119894 -0.178704 0.118862
 | 
					 | 
				
			||||||
v -0.154099 -0.192808 0.151707
 | 
					 | 
				
			||||||
v -0.185335 -0.172979 0.184553
 | 
					 | 
				
			||||||
v 0.001484 -0.155130 0.260997
 | 
					 | 
				
			||||||
v -0.001484 -0.189063 0.168096
 | 
					 | 
				
			||||||
v -0.002969 -0.206030 0.214547
 | 
					 | 
				
			||||||
v -0.001484 -0.189063 0.260997
 | 
					 | 
				
			||||||
v 0.185335 -0.171215 0.184553
 | 
					 | 
				
			||||||
v 0.116925 -0.199423 0.118862
 | 
					 | 
				
			||||||
v 0.148161 -0.219252 0.151708
 | 
					 | 
				
			||||||
v 0.182366 -0.205148 0.184553
 | 
					 | 
				
			||||||
v 0.059333 -0.075538 0.000000
 | 
					 | 
				
			||||||
v 0.044915 -0.074277 -0.034942
 | 
					 | 
				
			||||||
v 0.010106 -0.071232 -0.049416
 | 
					 | 
				
			||||||
v -0.024704 -0.068186 -0.034942
 | 
					 | 
				
			||||||
v -0.039122 -0.066925 0.000000
 | 
					 | 
				
			||||||
v -0.024704 -0.068186 0.034942
 | 
					 | 
				
			||||||
v 0.010106 -0.071232 0.049416
 | 
					 | 
				
			||||||
v 0.044915 -0.074277 0.034942
 | 
					 | 
				
			||||||
v 0.004580 -0.119744 -0.206430
 | 
					 | 
				
			||||||
v 0.149993 -0.132466 -0.145968
 | 
					 | 
				
			||||||
v 0.004580 -0.119744 0.206430
 | 
					 | 
				
			||||||
v -0.140833 -0.107022 0.145968
 | 
					 | 
				
			||||||
v 0.210225 -0.137736 -0.000000
 | 
					 | 
				
			||||||
v 0.149993 -0.132466 0.145968
 | 
					 | 
				
			||||||
v -0.201064 -0.101752 -0.000000
 | 
					 | 
				
			||||||
v -0.140833 -0.107022 -0.145968
 | 
					 | 
				
			||||||
v 0.033054 -0.500000 -0.079800
 | 
					 | 
				
			||||||
v 0.025067 -0.177627 -0.060518
 | 
					 | 
				
			||||||
v 0.079800 -0.500000 -0.033054
 | 
					 | 
				
			||||||
v 0.060518 -0.177627 -0.025067
 | 
					 | 
				
			||||||
v 0.079800 -0.500000 0.033054
 | 
					 | 
				
			||||||
v 0.060518 -0.177627 0.025067
 | 
					 | 
				
			||||||
v 0.033054 -0.500000 0.079800
 | 
					 | 
				
			||||||
v 0.025067 -0.177627 0.060518
 | 
					 | 
				
			||||||
v -0.033054 -0.500000 0.079800
 | 
					 | 
				
			||||||
v -0.025067 -0.177627 0.060518
 | 
					 | 
				
			||||||
v -0.079800 -0.500000 0.033054
 | 
					 | 
				
			||||||
v -0.060518 -0.177627 0.025067
 | 
					 | 
				
			||||||
v -0.079800 -0.500000 -0.033054
 | 
					 | 
				
			||||||
v -0.060518 -0.177627 -0.025067
 | 
					 | 
				
			||||||
v -0.033054 -0.500000 -0.079800
 | 
					 | 
				
			||||||
v -0.025067 -0.177627 -0.060518
 | 
					 | 
				
			||||||
v 0.014323 -0.253674 -0.065067
 | 
					 | 
				
			||||||
v 0.012105 -0.382623 -0.072780
 | 
					 | 
				
			||||||
v 0.052438 -0.253674 -0.026952
 | 
					 | 
				
			||||||
v 0.054739 -0.382623 -0.030146
 | 
					 | 
				
			||||||
v 0.052438 -0.253674 0.026952
 | 
					 | 
				
			||||||
v 0.054739 -0.382623 0.030146
 | 
					 | 
				
			||||||
v 0.014323 -0.253674 0.065067
 | 
					 | 
				
			||||||
v 0.012105 -0.382623 0.072780
 | 
					 | 
				
			||||||
v -0.039580 -0.253674 0.065067
 | 
					 | 
				
			||||||
v -0.048187 -0.382623 0.072780
 | 
					 | 
				
			||||||
v -0.077695 -0.253674 0.026952
 | 
					 | 
				
			||||||
v -0.090820 -0.382623 0.030146
 | 
					 | 
				
			||||||
v -0.077695 -0.253674 -0.026952
 | 
					 | 
				
			||||||
v -0.090820 -0.382623 -0.030146
 | 
					 | 
				
			||||||
v -0.039580 -0.253674 -0.065067
 | 
					 | 
				
			||||||
v -0.048187 -0.382623 -0.072780
 | 
					 | 
				
			||||||
vt 0.261010 0.917920
 | 
					 | 
				
			||||||
vt 0.235559 0.983636
 | 
					 | 
				
			||||||
vt 0.016350 0.764426
 | 
					 | 
				
			||||||
vt 0.080814 0.737724
 | 
					 | 
				
			||||||
vt 0.545568 0.235207
 | 
					 | 
				
			||||||
vt 0.764778 0.454417
 | 
					 | 
				
			||||||
vt 0.690996 0.484978
 | 
					 | 
				
			||||||
vt 0.517617 0.311599
 | 
					 | 
				
			||||||
vt 0.235559 0.235207
 | 
					 | 
				
			||||||
vt 0.515845 0.302693
 | 
					 | 
				
			||||||
vt 0.261010 0.302693
 | 
					 | 
				
			||||||
vt 0.578125 0.234375
 | 
					 | 
				
			||||||
vt 0.765625 0.234375
 | 
					 | 
				
			||||||
vt 0.765625 0.312500
 | 
					 | 
				
			||||||
vt 0.578125 0.312500
 | 
					 | 
				
			||||||
vt 0.015625 0.234375
 | 
					 | 
				
			||||||
vt 0.203125 0.234375
 | 
					 | 
				
			||||||
vt 0.203125 0.312500
 | 
					 | 
				
			||||||
vt 0.015625 0.312500
 | 
					 | 
				
			||||||
vt 0.390625 0.312500
 | 
					 | 
				
			||||||
vt 0.578125 0.390625
 | 
					 | 
				
			||||||
vt 0.390625 0.390625
 | 
					 | 
				
			||||||
vt 0.016350 0.454417
 | 
					 | 
				
			||||||
vt 0.080814 0.482889
 | 
					 | 
				
			||||||
vt 0.545569 0.983636
 | 
					 | 
				
			||||||
vt 0.515845 0.917920
 | 
					 | 
				
			||||||
vt 0.099043 0.730173
 | 
					 | 
				
			||||||
vt 0.272422 0.903553
 | 
					 | 
				
			||||||
vt 0.290733 0.368408
 | 
					 | 
				
			||||||
vt 0.490395 0.368408
 | 
					 | 
				
			||||||
vt 0.149550 0.709253
 | 
					 | 
				
			||||||
vt 0.149550 0.509591
 | 
					 | 
				
			||||||
vt 0.764778 0.764426
 | 
					 | 
				
			||||||
vt 0.696041 0.737725
 | 
					 | 
				
			||||||
vt 0.696041 0.482889
 | 
					 | 
				
			||||||
vt 0.099043 0.484978
 | 
					 | 
				
			||||||
vt 0.203125 0.390625
 | 
					 | 
				
			||||||
vt 0.765625 0.390625
 | 
					 | 
				
			||||||
vt 0.272422 0.311599
 | 
					 | 
				
			||||||
vt 0.631577 0.509591
 | 
					 | 
				
			||||||
vt 0.390625 0.234375
 | 
					 | 
				
			||||||
vt 0.517617 0.903553
 | 
					 | 
				
			||||||
vt 0.690996 0.730173
 | 
					 | 
				
			||||||
vt 0.432320 0.675133
 | 
					 | 
				
			||||||
vt 0.473823 0.633629
 | 
					 | 
				
			||||||
vt 0.015625 0.390625
 | 
					 | 
				
			||||||
vt 0.490395 0.850435
 | 
					 | 
				
			||||||
vt 0.290733 0.850435
 | 
					 | 
				
			||||||
vt 0.631577 0.709253
 | 
					 | 
				
			||||||
vt 0.373624 0.533431
 | 
					 | 
				
			||||||
vt 0.332121 0.574934
 | 
					 | 
				
			||||||
vt 0.473823 0.574934
 | 
					 | 
				
			||||||
vt 0.432320 0.533431
 | 
					 | 
				
			||||||
vt 0.332121 0.633630
 | 
					 | 
				
			||||||
vt 0.373624 0.675133
 | 
					 | 
				
			||||||
vt 0.935126 0.767633
 | 
					 | 
				
			||||||
vt 0.998032 0.830539
 | 
					 | 
				
			||||||
vt 0.998032 0.919502
 | 
					 | 
				
			||||||
vt 0.935126 0.982408
 | 
					 | 
				
			||||||
vt 0.846164 0.982408
 | 
					 | 
				
			||||||
vt 0.783257 0.919502
 | 
					 | 
				
			||||||
vt 0.783258 0.830539
 | 
					 | 
				
			||||||
vt 0.846164 0.767633
 | 
					 | 
				
			||||||
vt 0.375000 0.187500
 | 
					 | 
				
			||||||
vt 0.375000 0.031250
 | 
					 | 
				
			||||||
vt 0.500000 0.031250
 | 
					 | 
				
			||||||
vt 0.500000 0.187500
 | 
					 | 
				
			||||||
vt 0.625000 0.031250
 | 
					 | 
				
			||||||
vt 0.625000 0.187500
 | 
					 | 
				
			||||||
vt 0.750000 0.031250
 | 
					 | 
				
			||||||
vt 0.750000 0.187500
 | 
					 | 
				
			||||||
vt 0.875000 0.031250
 | 
					 | 
				
			||||||
vt 0.875000 0.187500
 | 
					 | 
				
			||||||
vt 1.000000 0.031250
 | 
					 | 
				
			||||||
vt 1.000000 0.187500
 | 
					 | 
				
			||||||
vt 0.000000 0.031250
 | 
					 | 
				
			||||||
vt 0.125000 0.031250
 | 
					 | 
				
			||||||
vt 0.125000 0.187500
 | 
					 | 
				
			||||||
vt 0.000000 0.187500
 | 
					 | 
				
			||||||
vt 0.250000 0.031250
 | 
					 | 
				
			||||||
vt 0.250000 0.187500
 | 
					 | 
				
			||||||
vt 0.542224 0.015885
 | 
					 | 
				
			||||||
vt 0.601585 0.075246
 | 
					 | 
				
			||||||
vt 0.601585 0.159195
 | 
					 | 
				
			||||||
vt 0.542224 0.218556
 | 
					 | 
				
			||||||
vt 0.458275 0.218556
 | 
					 | 
				
			||||||
vt 0.398914 0.159195
 | 
					 | 
				
			||||||
vt 0.398914 0.075246
 | 
					 | 
				
			||||||
vt 0.458275 0.015885
 | 
					 | 
				
			||||||
vt 0.625000 0.125000
 | 
					 | 
				
			||||||
vt 0.500000 0.125000
 | 
					 | 
				
			||||||
vt 0.750000 0.125000
 | 
					 | 
				
			||||||
vt 0.875000 0.125000
 | 
					 | 
				
			||||||
vt 1.000000 0.125000
 | 
					 | 
				
			||||||
vt 0.125000 0.125000
 | 
					 | 
				
			||||||
vt 0.000000 0.125000
 | 
					 | 
				
			||||||
vt 0.250000 0.125000
 | 
					 | 
				
			||||||
vt 0.375000 0.125000
 | 
					 | 
				
			||||||
vn -0.147000 -0.987300 0.060400
 | 
					 | 
				
			||||||
vn -0.648700 -0.460200 0.606100
 | 
					 | 
				
			||||||
vn -0.898800 -0.438400 0.000000
 | 
					 | 
				
			||||||
vn -0.172000 -0.985100 0.000000
 | 
					 | 
				
			||||||
vn 0.672500 0.376500 0.637100
 | 
					 | 
				
			||||||
vn 0.935400 0.353500 0.000000
 | 
					 | 
				
			||||||
vn 0.529200 0.848500 0.000000
 | 
					 | 
				
			||||||
vn 0.396700 0.860200 0.320400
 | 
					 | 
				
			||||||
vn -0.044900 -0.513100 -0.857100
 | 
					 | 
				
			||||||
vn 0.558900 -0.565900 -0.606100
 | 
					 | 
				
			||||||
vn -0.026600 -0.997800 -0.060400
 | 
					 | 
				
			||||||
vn -0.086800 -0.992500 -0.085500
 | 
					 | 
				
			||||||
vn -0.044900 -0.513100 0.857100
 | 
					 | 
				
			||||||
vn 0.037800 0.432000 0.901100
 | 
					 | 
				
			||||||
vn -0.596900 0.487600 0.637100
 | 
					 | 
				
			||||||
vn -0.648700 -0.460200 -0.606100
 | 
					 | 
				
			||||||
vn -0.596900 0.487600 -0.637100
 | 
					 | 
				
			||||||
vn 0.037800 0.432000 -0.901100
 | 
					 | 
				
			||||||
vn 0.809000 -0.587800 0.000000
 | 
					 | 
				
			||||||
vn 0.672500 0.376500 -0.637100
 | 
					 | 
				
			||||||
vn -0.147000 -0.987300 -0.060400
 | 
					 | 
				
			||||||
vn -0.086800 -0.992500 0.085500
 | 
					 | 
				
			||||||
vn -0.859800 0.510500 0.000000
 | 
					 | 
				
			||||||
vn -0.372100 0.928200 0.000000
 | 
					 | 
				
			||||||
vn -0.240600 0.916500 -0.319400
 | 
					 | 
				
			||||||
vn -0.085100 -0.972600 0.216400
 | 
					 | 
				
			||||||
vn -0.237500 -0.959200 0.153000
 | 
					 | 
				
			||||||
vn 0.130500 -0.991400 0.000000
 | 
					 | 
				
			||||||
vn 0.067400 -0.985900 0.153000
 | 
					 | 
				
			||||||
vn 0.558900 -0.565900 0.606100
 | 
					 | 
				
			||||||
vn -0.026600 -0.997800 0.060400
 | 
					 | 
				
			||||||
vn -0.001700 -1.000000 0.000000
 | 
					 | 
				
			||||||
vn -0.240600 0.916500 0.319400
 | 
					 | 
				
			||||||
vn 0.077500 0.888400 0.452400
 | 
					 | 
				
			||||||
vn -0.300700 -0.953700 0.000000
 | 
					 | 
				
			||||||
vn 0.077500 0.888400 -0.452400
 | 
					 | 
				
			||||||
vn 0.396700 0.860200 -0.320400
 | 
					 | 
				
			||||||
vn 0.086200 0.978700 -0.186300
 | 
					 | 
				
			||||||
vn 0.217800 0.967000 -0.132200
 | 
					 | 
				
			||||||
vn -0.085100 -0.972600 -0.216400
 | 
					 | 
				
			||||||
vn 0.067400 -0.985900 -0.153000
 | 
					 | 
				
			||||||
vn -0.237500 -0.959200 -0.153000
 | 
					 | 
				
			||||||
vn 0.086200 0.978700 0.186300
 | 
					 | 
				
			||||||
vn -0.044600 0.990300 0.131300
 | 
					 | 
				
			||||||
vn 0.272600 0.962100 0.000000
 | 
					 | 
				
			||||||
vn 0.217800 0.967000 0.132200
 | 
					 | 
				
			||||||
vn -0.098600 0.995100 0.000000
 | 
					 | 
				
			||||||
vn -0.044600 0.990300 -0.131300
 | 
					 | 
				
			||||||
vn -0.273500 -0.626100 -0.730200
 | 
					 | 
				
			||||||
vn -0.402500 0.040600 -0.914500
 | 
					 | 
				
			||||||
vn 0.360300 0.084000 -0.929000
 | 
					 | 
				
			||||||
vn 0.335600 -0.581700 -0.740900
 | 
					 | 
				
			||||||
vn 0.369900 0.027700 -0.928600
 | 
					 | 
				
			||||||
vn 0.921100 -0.031200 -0.388000
 | 
					 | 
				
			||||||
vn 0.913800 0.116800 -0.388800
 | 
					 | 
				
			||||||
vn 0.921100 -0.031200 0.388000
 | 
					 | 
				
			||||||
vn 0.913800 0.116800 0.388800
 | 
					 | 
				
			||||||
vn 0.369900 0.027700 0.928600
 | 
					 | 
				
			||||||
vn 0.360300 0.084000 0.929000
 | 
					 | 
				
			||||||
vn -0.391600 0.105700 0.914000
 | 
					 | 
				
			||||||
vn -0.402500 0.040600 0.914500
 | 
					 | 
				
			||||||
vn -0.914200 0.156600 0.373800
 | 
					 | 
				
			||||||
vn -0.927200 0.012400 0.374500
 | 
					 | 
				
			||||||
vn -0.914200 0.156600 -0.373800
 | 
					 | 
				
			||||||
vn -0.927200 0.012400 -0.374500
 | 
					 | 
				
			||||||
vn -0.391600 0.105700 -0.914000
 | 
					 | 
				
			||||||
vn 0.774400 -0.552100 -0.309000
 | 
					 | 
				
			||||||
vn 0.774400 -0.552100 0.309000
 | 
					 | 
				
			||||||
vn 0.335600 -0.581700 0.740900
 | 
					 | 
				
			||||||
vn -0.273500 -0.626100 0.730200
 | 
					 | 
				
			||||||
vn -0.690800 -0.658600 0.298100
 | 
					 | 
				
			||||||
vn -0.690800 -0.658600 -0.298100
 | 
					 | 
				
			||||||
vn 0.416700 -0.004500 -0.909100
 | 
					 | 
				
			||||||
vn 0.925800 -0.089300 -0.367400
 | 
					 | 
				
			||||||
vn 0.925800 -0.089300 0.367400
 | 
					 | 
				
			||||||
vn 0.416700 -0.004500 0.909100
 | 
					 | 
				
			||||||
vn -0.344300 0.121400 0.931000
 | 
					 | 
				
			||||||
vn -0.896600 0.212200 0.388700
 | 
					 | 
				
			||||||
vn -0.896600 0.212200 -0.388700
 | 
					 | 
				
			||||||
vn -0.344300 0.121400 -0.931000
 | 
					 | 
				
			||||||
s 1
 | 
					 | 
				
			||||||
f 23/1/1 24/2/2 20/3/3 19/4/4
 | 
					 | 
				
			||||||
f 29/5/5 1/6/6 45/7/7 46/8/8
 | 
					 | 
				
			||||||
f 12/9/9 8/5/10 7/10/11 11/11/12
 | 
					 | 
				
			||||||
f 24/12/2 28/13/13 25/14/14 21/15/15
 | 
					 | 
				
			||||||
f 12/16/9 16/17/16 13/18/17 9/19/18
 | 
					 | 
				
			||||||
f 4/20/19 8/15/10 5/21/20 1/22/6
 | 
					 | 
				
			||||||
f 16/23/16 12/9/9 11/11/12 15/24/21
 | 
					 | 
				
			||||||
f 28/25/13 24/2/2 23/1/1 27/26/22
 | 
					 | 
				
			||||||
f 13/2/17 17/3/23 47/27/24 48/28/25
 | 
					 | 
				
			||||||
f 10/29/26 11/11/12 7/10/11 6/30/27
 | 
					 | 
				
			||||||
f 18/31/28 19/4/4 15/24/21 14/32/29
 | 
					 | 
				
			||||||
f 4/6/19 32/33/30 31/34/31 3/35/32
 | 
					 | 
				
			||||||
f 17/3/23 21/23/15 44/36/33 47/27/24
 | 
					 | 
				
			||||||
f 32/18/30 4/20/19 1/22/6 29/37/5
 | 
					 | 
				
			||||||
f 8/5/10 4/6/19 3/35/32 7/10/11
 | 
					 | 
				
			||||||
f 8/15/10 12/14/9 9/38/18 5/21/20
 | 
					 | 
				
			||||||
f 25/9/14 29/5/5 46/8/8 43/39/34
 | 
					 | 
				
			||||||
f 6/30/27 7/10/11 3/35/32 2/40/35
 | 
					 | 
				
			||||||
f 16/17/16 20/41/3 17/20/23 13/18/17
 | 
					 | 
				
			||||||
f 31/34/31 32/33/30 28/25/13 27/26/22
 | 
					 | 
				
			||||||
f 5/33/20 9/25/18 41/42/36 42/43/37
 | 
					 | 
				
			||||||
f 41/42/36 35/44/38 34/45/39 42/43/37
 | 
					 | 
				
			||||||
f 15/24/21 11/11/12 10/29/26 14/32/29
 | 
					 | 
				
			||||||
f 20/41/3 24/12/2 21/15/15 17/20/23
 | 
					 | 
				
			||||||
f 1/6/6 5/33/20 42/43/37 45/7/7
 | 
					 | 
				
			||||||
f 19/4/4 20/3/3 16/23/16 15/24/21
 | 
					 | 
				
			||||||
f 28/19/13 32/18/30 29/37/5 25/46/14
 | 
					 | 
				
			||||||
f 26/47/40 27/26/22 23/1/1 22/48/41
 | 
					 | 
				
			||||||
f 21/23/15 25/9/14 43/39/34 44/36/33
 | 
					 | 
				
			||||||
f 9/25/18 13/2/17 48/28/25 41/42/36
 | 
					 | 
				
			||||||
f 23/1/1 19/4/4 18/31/28 22/48/41
 | 
					 | 
				
			||||||
f 2/40/35 3/35/32 31/34/31 30/49/42
 | 
					 | 
				
			||||||
f 43/39/34 39/50/43 38/51/44 44/36/33
 | 
					 | 
				
			||||||
f 45/7/7 33/52/45 40/53/46 46/8/8
 | 
					 | 
				
			||||||
f 42/43/37 34/45/39 33/52/45 45/7/7
 | 
					 | 
				
			||||||
f 46/8/8 40/53/46 39/50/43 43/39/34
 | 
					 | 
				
			||||||
f 44/36/33 38/51/44 37/54/47 47/27/24
 | 
					 | 
				
			||||||
f 47/27/24 37/54/47 36/55/48 48/28/25
 | 
					 | 
				
			||||||
f 48/28/25 36/55/48 35/44/38 41/42/36
 | 
					 | 
				
			||||||
f 35/44/38 36/55/48 37/54/47 38/51/44 39/50/43 40/53/46 33/52/45 34/45/39
 | 
					 | 
				
			||||||
f 6/56/27 2/57/35 30/58/42 26/59/40 22/60/41 18/61/28 14/62/29 10/63/26
 | 
					 | 
				
			||||||
f 63/64/49 80/65/50 66/66/51 49/67/52
 | 
					 | 
				
			||||||
f 65/66/53 67/68/54 68/69/55 66/67/51
 | 
					 | 
				
			||||||
f 67/68/54 69/70/56 70/71/57 68/69/55
 | 
					 | 
				
			||||||
f 69/70/56 71/72/58 72/73/59 70/71/57
 | 
					 | 
				
			||||||
f 71/72/58 73/74/60 74/75/61 72/73/59
 | 
					 | 
				
			||||||
f 73/76/60 75/77/62 76/78/63 74/79/61
 | 
					 | 
				
			||||||
f 75/77/62 77/80/64 78/81/65 76/78/63
 | 
					 | 
				
			||||||
f 77/80/64 79/65/66 80/64/50 78/81/65
 | 
					 | 
				
			||||||
f 49/82/52 51/83/67 53/84/68 55/85/69 57/86/70 59/87/71 61/88/72 63/89/49
 | 
					 | 
				
			||||||
f 50/66/73 52/68/74 67/90/54 65/91/53
 | 
					 | 
				
			||||||
f 52/68/74 54/70/75 69/92/56 67/90/54
 | 
					 | 
				
			||||||
f 66/66/51 68/68/55 51/69/67 49/67/52
 | 
					 | 
				
			||||||
f 54/70/75 56/72/76 71/93/58 69/92/56
 | 
					 | 
				
			||||||
f 68/68/55 70/70/57 53/71/68 51/69/67
 | 
					 | 
				
			||||||
f 56/72/76 58/74/77 73/94/60 71/93/58
 | 
					 | 
				
			||||||
f 70/70/57 72/72/59 55/73/69 53/71/68
 | 
					 | 
				
			||||||
f 58/76/77 60/77/78 75/95/62 73/96/60
 | 
					 | 
				
			||||||
f 72/72/59 74/74/61 57/75/70 55/73/69
 | 
					 | 
				
			||||||
f 60/77/78 62/80/79 77/97/64 75/95/62
 | 
					 | 
				
			||||||
f 74/76/61 76/77/63 59/78/71 57/79/70
 | 
					 | 
				
			||||||
f 62/80/79 64/65/80 79/98/66 77/97/64
 | 
					 | 
				
			||||||
f 76/77/63 78/80/65 61/81/72 59/78/71
 | 
					 | 
				
			||||||
f 31/34/31 27/26/22 26/47/40 30/49/42
 | 
					 | 
				
			||||||
f 78/80/65 80/65/50 63/64/49 61/81/72
 | 
					 | 
				
			||||||
f 79/98/66 64/65/80 50/66/73 65/91/53
 | 
					 | 
				
			||||||
f 79/65/66 65/66/53 66/67/51 80/64/50
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 3.8 KiB  | 
| 
		 Before Width: | Height: | Size: 4.2 KiB  | 
| 
		 Before Width: | Height: | Size: 2.1 KiB  | 
| 
		 Before Width: | Height: | Size: 5.0 KiB  | 
							
								
								
									
										612
									
								
								API.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,612 @@
 | 
				
			|||||||
 | 
					This document describes the Plantlife mod API.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Last revision: 2014-05-24
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=========
 | 
				
			||||||
 | 
					Functions
 | 
				
			||||||
 | 
					=========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are three main functions defined by the main "plants_lib" mod:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					spawn_on_surfaces()
 | 
				
			||||||
 | 
					register_generate_plant()
 | 
				
			||||||
 | 
					grow_plants()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are also several internal, helper functions that can be called if so
 | 
				
			||||||
 | 
					desired, but they are not really intended for use by other mods and may change
 | 
				
			||||||
 | 
					at any time.  They are briefly described below these main functions, but see
 | 
				
			||||||
 | 
					init.lua for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Most functions in plants lib are declared locally to avoid namespace
 | 
				
			||||||
 | 
					collisions with other mods.  They are accessible via the "plantslib" method,
 | 
				
			||||||
 | 
					e.g. plantslib:spawn_on_surfaces() and so forth.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					spawn_on_surfaces(biome)
 | 
				
			||||||
 | 
					spawn_on_surfaces(sdelay, splant, sradius, schance, ssurface, savoid)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This first function is an ABM-based spawner function originally created as
 | 
				
			||||||
 | 
					part of Ironzorg's flowers mod.  It has since been largely extended and
 | 
				
			||||||
 | 
					expanded.  There are two ways to call this function:  You can either pass it 
 | 
				
			||||||
 | 
					several individual string and number parameters to use the legacy interface,
 | 
				
			||||||
 | 
					or you can pass a single biome definition as a table, with all of your options
 | 
				
			||||||
 | 
					spelled out nicely.  This is the preferred method.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When used with the legacy interface, you must specify the parameters exactly
 | 
				
			||||||
 | 
					in order, with the first five being mandatory (even if some are set to nil),
 | 
				
			||||||
 | 
					and the last one being optional:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sdelay:		The value passed to the ABM's interval parameter, in seconds.
 | 
				
			||||||
 | 
					splant:		The node name of the item to spawn (e.g.
 | 
				
			||||||
 | 
							"flowers:flower_rose").  A plant will of course only be
 | 
				
			||||||
 | 
							spawned if the node about to be replaced is air.
 | 
				
			||||||
 | 
					sradius:	Don't spawn within this many nodes of the avoid items
 | 
				
			||||||
 | 
							mentioned below.  If set to nil, this check is skipped.
 | 
				
			||||||
 | 
					schance:	The value passed to the ABM's chance parameter, normally in
 | 
				
			||||||
 | 
							the 10-100 range (1-in-X chance of operating on a given node)
 | 
				
			||||||
 | 
					ssurface:	String with the name of the node on which to spawn the plant
 | 
				
			||||||
 | 
							in question, such as "default:sand" or
 | 
				
			||||||
 | 
							"default:dirt_with_grass".  It is not recommended to put air,
 | 
				
			||||||
 | 
							stone, or plain dirt here if you can use some other node, as
 | 
				
			||||||
 | 
							doing so will cause the engine to process potentially large
 | 
				
			||||||
 | 
							numbers of such nodes when deciding when to execute the ABM
 | 
				
			||||||
 | 
							and where it should operate.
 | 
				
			||||||
 | 
					savoid:		Table with a list of groups and/or node names to avoid when
 | 
				
			||||||
 | 
							spawning the plant, such as {"group:flowers", "default:tree"}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When passed a table as the argument, and thus using the modern calling method,
 | 
				
			||||||
 | 
					you must pass a number of arguments in the form of an ordinary keyed-value
 | 
				
			||||||
 | 
					table.  Below is a list of everything supported by this function:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					biome = {
 | 
				
			||||||
 | 
						spawn_plants = something, -- [*] String or table; see below.
 | 
				
			||||||
 | 
						spawn_delay = number,	-- same as sdelay, above.
 | 
				
			||||||
 | 
						spawn_chance = number,	-- same as schance, above.
 | 
				
			||||||
 | 
						spawn_surfaces = {table}, -- List of node names on which the plants
 | 
				
			||||||
 | 
									-- should be spawned.  As with the single-
 | 
				
			||||||
 | 
									-- node "ssurface" option in the legacy API,
 | 
				
			||||||
 | 
									-- you should not put stone, air, etc. here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						---- From here down are a number of optional parameters.  You will
 | 
				
			||||||
 | 
						---- most likely want to use at least some of these to limit how and
 | 
				
			||||||
 | 
						---- where your objects are spawned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						avoid_nodes = {table},	-- same meaning as savoid, above
 | 
				
			||||||
 | 
						avoid_radius = num,	-- same as sradius
 | 
				
			||||||
 | 
						seed_diff = num,	-- The Perlin seed difference value passed to
 | 
				
			||||||
 | 
									-- the minetest.get_perlin() function.
 | 
				
			||||||
 | 
									-- Used along with the global Perlin controls
 | 
				
			||||||
 | 
									-- below to create the "biome" in which the
 | 
				
			||||||
 | 
									-- plants will spawn.  Defaults to 0 if not
 | 
				
			||||||
 | 
									-- provided.
 | 
				
			||||||
 | 
						light_min = num,	-- Minimum amount of light necessary to make a
 | 
				
			||||||
 | 
									-- plant spawn.  Defaults to 0.
 | 
				
			||||||
 | 
						light_max = num,	-- Maximum amount of light needed to spawn. 
 | 
				
			||||||
 | 
									-- Defaults to the engine's MAX_LIGHT value of
 | 
				
			||||||
 | 
									-- 14.
 | 
				
			||||||
 | 
						neighbors = {table},	-- List of neighboring nodes that need to be
 | 
				
			||||||
 | 
									-- immediately next to the node the plant is
 | 
				
			||||||
 | 
									-- about to spawn on. Can also be a string
 | 
				
			||||||
 | 
									-- with a single node name.  It is both passed
 | 
				
			||||||
 | 
									-- to the ABM as the "neighbors" parameter,
 | 
				
			||||||
 | 
									-- and is used to manually check the 
 | 
				
			||||||
 | 
									-- adjacent nodes.  It only takes one of these
 | 
				
			||||||
 | 
									-- for the spawn routine to mark the target as
 | 
				
			||||||
 | 
									-- spawnable.  Defaults to nil (ignored).
 | 
				
			||||||
 | 
						ncount = num,		-- There must be at least this many of the
 | 
				
			||||||
 | 
									-- above neighbors in the eight spaces
 | 
				
			||||||
 | 
									-- immediately surrounding the node the plant
 | 
				
			||||||
 | 
									-- is about to spawn on for it to happen.  If
 | 
				
			||||||
 | 
									-- not provided, this check is disabled.
 | 
				
			||||||
 | 
						facedir = num,		-- The value passed to the param2 variable
 | 
				
			||||||
 | 
									-- when adding the node to the map.  Defaults
 | 
				
			||||||
 | 
									-- to 0.  Be sure that the value you use here
 | 
				
			||||||
 | 
									-- (and the range thereof) is appropriate for
 | 
				
			||||||
 | 
									-- the type of node you're spawning.
 | 
				
			||||||
 | 
						random_facedir = {table}, -- If set, the table should contain two
 | 
				
			||||||
 | 
									-- values. If they're both provided, the
 | 
				
			||||||
 | 
									-- spawned plant will be given a random
 | 
				
			||||||
 | 
									-- facedir value in the range specified by
 | 
				
			||||||
 | 
									-- these two numbers.  Overrides the facedir
 | 
				
			||||||
 | 
									-- parameter above, if it exists.  Use {0,3}
 | 
				
			||||||
 | 
									-- if you want the full range for wallmounted
 | 
				
			||||||
 | 
									-- nodes, or {2,5} for most everything else,
 | 
				
			||||||
 | 
									-- or any other pair of numbers in the 0 to 5 
 | 
				
			||||||
 | 
									-- range, as appropriate for the node you want
 | 
				
			||||||
 | 
									-- to spawn.
 | 
				
			||||||
 | 
						verticals_list = {table}, -- List of nodes that should be considered
 | 
				
			||||||
 | 
									-- to be natural walls.
 | 
				
			||||||
 | 
						alt_wallnode = "string", -- If specified, this node will be 
 | 
				
			||||||
 | 
									-- substituted in place of the plant(s)
 | 
				
			||||||
 | 
									-- defined by spawn_plants above, if the spawn
 | 
				
			||||||
 | 
									-- target has one or more adjacent walls.  In
 | 
				
			||||||
 | 
									-- such a case, the two above facedir
 | 
				
			||||||
 | 
									-- parameters will be ignored.
 | 
				
			||||||
 | 
						depth_max = num,	-- If the object spawns on top of a water
 | 
				
			||||||
 | 
									-- source, the water must be at most this
 | 
				
			||||||
 | 
									-- deep.  Defaults to 1 node.
 | 
				
			||||||
 | 
						min_elevation = num,	-- Surface must be at this altitude or higher
 | 
				
			||||||
 | 
									-- to spawn at all.  Defaults to -31000...
 | 
				
			||||||
 | 
						max_elevation = num,	-- ...but must be no higher than this
 | 
				
			||||||
 | 
									-- altitude.  Defaults to +31000.
 | 
				
			||||||
 | 
						near_nodes = {table},	-- List of nodes that must be somewhere in the
 | 
				
			||||||
 | 
									-- vicinity in order for the plant to spawn.
 | 
				
			||||||
 | 
									-- Can also be a string with a single node
 | 
				
			||||||
 | 
									-- name.  If not provided, this check is
 | 
				
			||||||
 | 
									-- disabled.
 | 
				
			||||||
 | 
						near_nodes_size = num,	-- How large of an area to check for the above
 | 
				
			||||||
 | 
									-- node.  Specifically, this checks a flat
 | 
				
			||||||
 | 
									-- horizontal area centered on the node to be
 | 
				
			||||||
 | 
									-- spawned on.  Defaults to 0, but is ignored
 | 
				
			||||||
 | 
									-- if the above near_nodes value is not set.
 | 
				
			||||||
 | 
						near_nodes_vertical = num, -- Used with the size value above, this
 | 
				
			||||||
 | 
									-- extends the vertical range of the near 
 | 
				
			||||||
 | 
									-- nodes search.  Basically, this turns the
 | 
				
			||||||
 | 
									-- flat region described above into a cuboid
 | 
				
			||||||
 | 
									-- region.  The area to be checked will extend
 | 
				
			||||||
 | 
									-- this high AND this low above/below the
 | 
				
			||||||
 | 
									-- target node, centered thereon.  Defaults to
 | 
				
			||||||
 | 
									-- 1 (check only the layer above, the layer
 | 
				
			||||||
 | 
									-- at, and the layer below the target node),
 | 
				
			||||||
 | 
									-- but is ignored if near_nodes is not set.
 | 
				
			||||||
 | 
						near_nodes_count = num,	-- How many of the above nodes must be within
 | 
				
			||||||
 | 
									-- that radius.	Defaults to 1 but is ignored
 | 
				
			||||||
 | 
									-- if near_nodes isn't set.  Bear in mind that
 | 
				
			||||||
 | 
									-- the total area to be checked is equal to
 | 
				
			||||||
 | 
									-- (near_nodes_size^2)*near_nodes_vertical*2.
 | 
				
			||||||
 | 
									-- so for example, if size is 10 and vertical
 | 
				
			||||||
 | 
									-- is 4 then the area is (10^2)*8 = 800 nodes
 | 
				
			||||||
 | 
									-- in size, so you'll want to make sure you
 | 
				
			||||||
 | 
									-- specify a value appropriate for the amount
 | 
				
			||||||
 | 
									-- in question.
 | 
				
			||||||
 | 
						air_size = num,		-- How large of an area to check for air
 | 
				
			||||||
 | 
									-- above and around the target.  If omitted,
 | 
				
			||||||
 | 
									-- only the space above the target is checked.
 | 
				
			||||||
 | 
									-- This does not check for air at the sides or
 | 
				
			||||||
 | 
									-- below the target.
 | 
				
			||||||
 | 
						air_count = num,	-- How many of the surrounding nodes need to
 | 
				
			||||||
 | 
									-- be air for the above check to return true.
 | 
				
			||||||
 | 
									-- If omitted, only the space above the target
 | 
				
			||||||
 | 
									-- is checked.
 | 
				
			||||||
 | 
						plantlife_limit = num,	-- The value compared against the generic
 | 
				
			||||||
 | 
									-- "plants can grow here" Perlin noise layer.
 | 
				
			||||||
 | 
									-- Smaller numbers result in more abundant
 | 
				
			||||||
 | 
									-- plants.  Range of -1 to +1, with values in 
 | 
				
			||||||
 | 
									-- the range of about 0 to 0.5 being most
 | 
				
			||||||
 | 
									-- useful.  Defaults to 0.1.
 | 
				
			||||||
 | 
						temp_min = num,		-- Minimum temperature needed for the desired
 | 
				
			||||||
 | 
									-- object to spawn.  This is a 2d Perlin
 | 
				
			||||||
 | 
									-- value, which has an inverted range of +1 to
 | 
				
			||||||
 | 
									-- -1.  Larger values represent *colder*
 | 
				
			||||||
 | 
									-- temperatures, so this value is actually the
 | 
				
			||||||
 | 
									-- upper end of the desired Perlin range.  See
 | 
				
			||||||
 | 
									-- the temperature map section at the bottom
 | 
				
			||||||
 | 
									-- of this document for details on how these
 | 
				
			||||||
 | 
									-- values work.  Defaults to +1 (unlimited
 | 
				
			||||||
 | 
									-- coldness).
 | 
				
			||||||
 | 
						temp_max = num,		-- Maximum temperature/lower end of the Perlin
 | 
				
			||||||
 | 
									-- range.  Defaults to -1 (unlimited heat).
 | 
				
			||||||
 | 
						humidity_min = num,	-- Minimum humidity for the plant to spawn in.
 | 
				
			||||||
 | 
									-- Like the temperature map, this is a Perlin
 | 
				
			||||||
 | 
									-- value where lower numbers mean more
 | 
				
			||||||
 | 
									-- humidity in the area.  Defaults to +1 (0%
 | 
				
			||||||
 | 
									-- relative humidity).
 | 
				
			||||||
 | 
						humidity_max = num,	-- Maximum humidity for the plant to spawn at.
 | 
				
			||||||
 | 
									-- Defaults to -1 (100% humidity).
 | 
				
			||||||
 | 
						spawn_on_side = bool,	-- Set this to true to spawn the node on one
 | 
				
			||||||
 | 
									-- side of the target node rather than the
 | 
				
			||||||
 | 
									-- top.  The code will search for an airspace
 | 
				
			||||||
 | 
									-- to the side of the target, then spawn the
 | 
				
			||||||
 | 
									-- plant at the first one found.  The above
 | 
				
			||||||
 | 
									-- facedir and random_facedir parameters are
 | 
				
			||||||
 | 
									-- ignored in this case.  If the above
 | 
				
			||||||
 | 
									-- parameters for selecting generic wall nodes
 | 
				
			||||||
 | 
									-- are provided, this option is ignored.
 | 
				
			||||||
 | 
									-- Important note: the facedir values assigned
 | 
				
			||||||
 | 
									-- by this option only make sense with
 | 
				
			||||||
 | 
									-- wallmounted nodes (nodes which don't use
 | 
				
			||||||
 | 
									-- facedir won't be affected).
 | 
				
			||||||
 | 
						spawn_on_bottom = bool,	-- If set to true, spawn the object below the
 | 
				
			||||||
 | 
									-- target node instead of above it.  The above
 | 
				
			||||||
 | 
									-- spawn_on_side variable takes precedence
 | 
				
			||||||
 | 
									-- over this one if both happen to be true.
 | 
				
			||||||
 | 
									-- When using this option with the random
 | 
				
			||||||
 | 
									-- facedir function above, the values given to
 | 
				
			||||||
 | 
									-- the facedir parameter are for regular
 | 
				
			||||||
 | 
									-- nodes, not wallmounted.
 | 
				
			||||||
 | 
						spawn_replace_node = bool, -- If set to true, the target node itself
 | 
				
			||||||
 | 
									-- is replaced by the spawned object.
 | 
				
			||||||
 | 
									-- Overrides the spawn_on_bottom and
 | 
				
			||||||
 | 
									-- spawn_on_side settings.
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[*] spawn_plants must be either a table or a string.  If it's a table, the
 | 
				
			||||||
 | 
					values therein are treated as a list of nodenames to pick from randomly on 
 | 
				
			||||||
 | 
					each application of the ABM code. The more nodes you can pack into this
 | 
				
			||||||
 | 
					parameter to avoid making too many calls to this function, the lower the CPU
 | 
				
			||||||
 | 
					load will likely be.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can also specify a string containing the name of a function to execute.
 | 
				
			||||||
 | 
					In this case, the function will be passed a single position parameter
 | 
				
			||||||
 | 
					indicating where the function should place the desired object, and the checks
 | 
				
			||||||
 | 
					for spawning on top vs. sides vs. bottom vs. replacing the target node will be
 | 
				
			||||||
 | 
					skipped.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					By default, if a biome node, size, and count are not defined, the biome
 | 
				
			||||||
 | 
					checking is disabled.  Same holds true for the nneighbors bit above that.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					plantslib:register_generate_plant(biome, nodes_or_function_or_treedef)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To register an object to be spawned at mapgen time rather than via an ABM,
 | 
				
			||||||
 | 
					call this function with two parameters:  a table with your object's biome
 | 
				
			||||||
 | 
					information, and a string, function, or table describing what to do if the
 | 
				
			||||||
 | 
					engine finds a suitable surface node (see below).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The biome table contains quite a number of options, though there are fewer 
 | 
				
			||||||
 | 
					here than are available in the ABM-based spawner, as some stuff doesn't make
 | 
				
			||||||
 | 
					sense at map-generation time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					biome = {
 | 
				
			||||||
 | 
						surface = something,	-- What node(s).  May be a string such as
 | 
				
			||||||
 | 
									-- "default:dirt_with_grass" or a table with
 | 
				
			||||||
 | 
									-- multiple such entries.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						---- Everything else is optional, but you'll definitely want to use
 | 
				
			||||||
 | 
						---- some of these other fields to limit where and under what
 | 
				
			||||||
 | 
						---- conditions the objects are spawned.
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						below_nodes = {table},	-- List of nodes that must be below the target
 | 
				
			||||||
 | 
									-- node.  Useful in snow biomes to keep
 | 
				
			||||||
 | 
									-- objects from spawning in snow that's on the
 | 
				
			||||||
 | 
									-- wrong surface for that object.
 | 
				
			||||||
 | 
						avoid_nodes = {table},	-- List of nodes or groups to avoid when
 | 
				
			||||||
 | 
									-- spawning.
 | 
				
			||||||
 | 
						avoid_radius = num,	-- how much distance to leave between the
 | 
				
			||||||
 | 
									-- object to be added and the objects to be
 | 
				
			||||||
 | 
									-- avoided.  If this or the avoid_nodes value
 | 
				
			||||||
 | 
									-- is nil or omitted, this check is skipped.
 | 
				
			||||||
 | 
									-- Avoid using excessively large radii or you
 | 
				
			||||||
 | 
									-- will slow down the map generator.
 | 
				
			||||||
 | 
						rarity = num,		-- how rare should this object be in its
 | 
				
			||||||
 | 
									-- biome? Larger values make objects more
 | 
				
			||||||
 | 
									-- rare, via:  math.random(1,100) > this
 | 
				
			||||||
 | 
						max_count = num,	-- The absolute maximum number of your object
 | 
				
			||||||
 | 
									-- that should be allowed to spawn in a 5x5x5
 | 
				
			||||||
 | 
									-- mapblock area (80x80x80 nodes).  Defaults
 | 
				
			||||||
 | 
									-- to 5, but be sure you set this to some 
 | 
				
			||||||
 | 
									-- reasonable value depending on your object
 | 
				
			||||||
 | 
									-- and its size if 5 is insufficient.
 | 
				
			||||||
 | 
						seed_diff = num,	-- perlin seed-diff value.  Defaults to 0, 
 | 
				
			||||||
 | 
									-- which causes the function to inherit the
 | 
				
			||||||
 | 
									-- global value of 329.
 | 
				
			||||||
 | 
						neighbors = {table},	-- What ground nodes must be right next to and
 | 
				
			||||||
 | 
									-- at the same elevation as the node to be
 | 
				
			||||||
 | 
									-- spawned on.
 | 
				
			||||||
 | 
						ncount = num,		-- at least this many of the above nodes must
 | 
				
			||||||
 | 
									-- be next to the node to spawn on.  Any value
 | 
				
			||||||
 | 
									-- greater than 8 will probably cause the code
 | 
				
			||||||
 | 
									-- to never spawn anything.  Defaults to 0.
 | 
				
			||||||
 | 
						depth = num,		-- how deep/thick of a layer the spawned-on
 | 
				
			||||||
 | 
									-- node must be.  Typically used for water.
 | 
				
			||||||
 | 
						min_elevation = num,	-- minimum elevation in meters/nodes.
 | 
				
			||||||
 | 
									-- Defaults to -31000 (unlimited).
 | 
				
			||||||
 | 
						max_elevation = num,	-- maximum elevation.  Defaults to +31000
 | 
				
			||||||
 | 
									-- (unlimited).
 | 
				
			||||||
 | 
						near_nodes = {table},	-- what nodes must be in the general vicinity
 | 
				
			||||||
 | 
									-- of the object being spawned.
 | 
				
			||||||
 | 
						near_nodes_size = num,	-- how wide of a search area to look for 
 | 
				
			||||||
 | 
									-- the nodes in that list.
 | 
				
			||||||
 | 
						near_nodes_vertical = num, -- How high/low of an area to search from
 | 
				
			||||||
 | 
									-- the target node.
 | 
				
			||||||
 | 
						near_nodes_count = num,	-- at least this many of those nodes must be
 | 
				
			||||||
 | 
									-- in the area.
 | 
				
			||||||
 | 
						plantlife_limit = num,	-- The value compared against the generic
 | 
				
			||||||
 | 
									-- "plants can grow here" Perlin noise layer.
 | 
				
			||||||
 | 
									-- Smaller numbers result in more abundant
 | 
				
			||||||
 | 
									-- plants.  Range of -1 to +1, with values in 
 | 
				
			||||||
 | 
									-- the range of about 0 to 0.5 being most
 | 
				
			||||||
 | 
									-- useful.  Defaults to 0.1.
 | 
				
			||||||
 | 
						temp_min = num,		-- coldest allowable temperature for a plant
 | 
				
			||||||
 | 
									-- to spawn (that is, the highest Perlin
 | 
				
			||||||
 | 
									-- temperature map value).
 | 
				
			||||||
 | 
						temp_max = num,		-- warmest allowable temperature to spawn a
 | 
				
			||||||
 | 
									-- plant (lowest Perlin temperature value).
 | 
				
			||||||
 | 
						verticals_list = {table}, -- Same as with the spawn_on_surfaces
 | 
				
			||||||
 | 
									-- function.
 | 
				
			||||||
 | 
						check_air = bool,	-- Flag to tell the mapgen code to check for
 | 
				
			||||||
 | 
									-- air above the spawn target.  Defaults to
 | 
				
			||||||
 | 
									-- true if not explicitly set to false.
 | 
				
			||||||
 | 
						delete_above = bool,	-- Flag to tell the mapgen code to delete the
 | 
				
			||||||
 | 
									-- two nodes directly above the spawn target
 | 
				
			||||||
 | 
									-- just before adding the plant or tree.
 | 
				
			||||||
 | 
									-- Useful when generating in snow biomes.
 | 
				
			||||||
 | 
									-- Defaults to false.
 | 
				
			||||||
 | 
						delete_above_surround = bool, -- Flag to tell the mapgen code to also
 | 
				
			||||||
 | 
									-- delete the four nodes surrounding the above
 | 
				
			||||||
 | 
									-- space, and the four nodes above those,
 | 
				
			||||||
 | 
									-- resulting in a two-node-deep cross-shaped
 | 
				
			||||||
 | 
									-- empty region above the spawn target.
 | 
				
			||||||
 | 
									-- Useful when adding trees to snow biomes.
 | 
				
			||||||
 | 
									-- Defaults to false.
 | 
				
			||||||
 | 
						spawn_replace_node = bool, -- same as with the ABM spawner.
 | 
				
			||||||
 | 
						random_facedir = {table}, -- same as with the ABM spawner.
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Regarding nodes_or_function_or_treedef, this must either be a string naming
 | 
				
			||||||
 | 
					a node to spawn, a table with a list of nodes to choose from, a table with an
 | 
				
			||||||
 | 
					L-Systems tree definition, or a function.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you specified a string, the code will attempt to determine whether that
 | 
				
			||||||
 | 
					string specifies a valid node name.  If it does, that node will be placed on
 | 
				
			||||||
 | 
					top of the target position directly (unless one of the other mapgen options
 | 
				
			||||||
 | 
					directs the code to do otherwise).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you specified a table and there is no "axiom" field, the code assumes that
 | 
				
			||||||
 | 
					it is a list of nodes.  Simply name one node per entry in the list, e.g.
 | 
				
			||||||
 | 
					{"default:junglegrass", "default:dry_shrub"} and so on, for as many nodes as
 | 
				
			||||||
 | 
					you want to list.  A random node from the list will be chosen each time the
 | 
				
			||||||
 | 
					code goes to place a node.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you specified a table, and there *is* an "axiom" field, the code assumes
 | 
				
			||||||
 | 
					that this table contains an L-Systems tree definition, which will be passed
 | 
				
			||||||
 | 
					directly to the engine's spawn_tree() function along with the position on
 | 
				
			||||||
 | 
					which to spawn the tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can also supply a function to be directly executed, which is given the
 | 
				
			||||||
 | 
					current node position (the usual "pos" table format) as its sole argument.  It
 | 
				
			||||||
 | 
					will be called in the form:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						somefunction(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					plantslib:grow_plants(options)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The third function, grow_plants() is used to turn the spawned nodes above
 | 
				
			||||||
 | 
					into something else over time.  This function has no return value, and accepts
 | 
				
			||||||
 | 
					a biome definition table as the only parameter.  These are defined like so:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					options = {
 | 
				
			||||||
 | 
						grow_plant = "string",	-- Name of the node to be grown into something
 | 
				
			||||||
 | 
									-- else.  This value is passed to the ABM as
 | 
				
			||||||
 | 
									-- the "nodenames" parameter, so it is the
 | 
				
			||||||
 | 
									-- plants themselves that are the ABM trigger,
 | 
				
			||||||
 | 
									-- rather than the ground they spawned on.  A
 | 
				
			||||||
 | 
									-- plant will only grow if the node above it
 | 
				
			||||||
 | 
									-- is air.  Can also be a table, but note that
 | 
				
			||||||
 | 
									-- all nodes referenced therein will be grown
 | 
				
			||||||
 | 
									-- into the same object.
 | 
				
			||||||
 | 
						grow_delay = num,	-- Passed as the ABM "interval" parameter, as
 | 
				
			||||||
 | 
									-- with spawning.
 | 
				
			||||||
 | 
						grow_chance = num,	-- Passed as the ABM "chance" parameter.
 | 
				
			||||||
 | 
						grow_result = "string",	-- Name of the node into which the grow_plant
 | 
				
			||||||
 | 
									-- node(s) should transform when the ABM
 | 
				
			||||||
 | 
									-- executes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						---- Everything from here down is optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dry_early_node = "string", -- This value is ignored except for jungle
 | 
				
			||||||
 | 
									-- grass (a corner case needed by that mod),
 | 
				
			||||||
 | 
									-- where it indicates which node the grass
 | 
				
			||||||
 | 
									-- must be on in order for it to turn from
 | 
				
			||||||
 | 
									-- the short size to "default:dry_shrub"
 | 
				
			||||||
 | 
									-- instead of the medium size.
 | 
				
			||||||
 | 
						grow_nodes = {table},	-- One of these nodes must be under the plant
 | 
				
			||||||
 | 
									-- in order for it to grow at all.  Normally
 | 
				
			||||||
 | 
									-- this should be the same as the list of 
 | 
				
			||||||
 | 
									-- surfaces passed to the spawning ABM as the
 | 
				
			||||||
 | 
									-- "nodenames" parameter.  This is so that the
 | 
				
			||||||
 | 
									-- plant can be manually placed on something
 | 
				
			||||||
 | 
									-- like a flower pot or something without it
 | 
				
			||||||
 | 
									-- growing and eventually dieing.  Defaults to
 | 
				
			||||||
 | 
									-- "default:dirt_with_grass".
 | 
				
			||||||
 | 
						facedir = num,		-- Same as with spawning a plant.
 | 
				
			||||||
 | 
						need_wall = bool,	-- Set this to true if you the plant needs to
 | 
				
			||||||
 | 
									-- grow against a wall.  Defaults to false.
 | 
				
			||||||
 | 
						verticals_list = {table}, -- List of nodes that should be considered
 | 
				
			||||||
 | 
									-- to be wall surfaces when growing the plant
 | 
				
			||||||
 | 
									-- vertically.  If not provided, the walls
 | 
				
			||||||
 | 
									-- check is skipped.
 | 
				
			||||||
 | 
						grow_vertically = bool,	-- Set this to true if the plant needs to grow
 | 
				
			||||||
 | 
									-- vertically, as in climbing poison ivy.
 | 
				
			||||||
 | 
									-- Defaults to false.
 | 
				
			||||||
 | 
						height_limit = num,	-- Set this to limit how tall the desired node
 | 
				
			||||||
 | 
									-- can grow.  The mod will search straight
 | 
				
			||||||
 | 
									-- down from the position being spawned at to
 | 
				
			||||||
 | 
									-- find a ground node, set via the parameter
 | 
				
			||||||
 | 
									-- below. Defaults to 5 nodes.
 | 
				
			||||||
 | 
						ground_nodes = {table},	-- What nodes should be treated as "the
 | 
				
			||||||
 | 
									-- ground" below a vertically-growing plant.
 | 
				
			||||||
 | 
									-- Usually this should be the same as the
 | 
				
			||||||
 | 
									-- grow_nodes table, but might also include,
 | 
				
			||||||
 | 
									-- for example, water or some other
 | 
				
			||||||
 | 
									-- surrounding material.  Defaults to
 | 
				
			||||||
 | 
									-- "default:dirt_with_grass".
 | 
				
			||||||
 | 
						grow_function = something, -- [*] see below.
 | 
				
			||||||
 | 
						seed_diff = num,	-- [*] see below.
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[*] grow_function can take one of three possible settings:  it can be nil (or
 | 
				
			||||||
 | 
					    not provided), a string, or a table.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If it is not provided or it's set to nil, all of the regular growing code is
 | 
				
			||||||
 | 
					executed normally, the value of seed_diff, if any, is ignored, and the node to
 | 
				
			||||||
 | 
					be placed is assumed to be specified in the grow_result variable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If this value is set to a simple string, this is treated as the name of the
 | 
				
			||||||
 | 
					function to use to grow the plant.  In this case, all of the usual growing
 | 
				
			||||||
 | 
					code is executeed, but then instead of a plant being simply added to the
 | 
				
			||||||
 | 
					world, grow_result is ignored and the named function is executed and passed a
 | 
				
			||||||
 | 
					few parmeters in the following general form: 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						somefunction(pos, perlin1, perlin2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These values represent the current position (the usual table), the Perlin
 | 
				
			||||||
 | 
					noise value for that spot in the generic "plants can grow here" map for the
 | 
				
			||||||
 | 
					seed_diff value above, the Perlin value for that same spot from the
 | 
				
			||||||
 | 
					temperature map, and the detected neighboring wall face, if there was one (or
 | 
				
			||||||
 | 
					nil if not).  If seed_diff is not provided, it defaults to 0.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If this variable is instead set to a table, it is treated an an L-Systems tree
 | 
				
			||||||
 | 
					definition.  All of the growing code is executed in the usual manner, then the
 | 
				
			||||||
 | 
					tree described by that definition is spawned at the current position instead,
 | 
				
			||||||
 | 
					and grow_result is ignored.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					find_adjacent_wall(pos, verticals)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Of the few helper functions, this one expects a position parameter and a table
 | 
				
			||||||
 | 
					with the list of nodes that should be considered as walls.  The code will
 | 
				
			||||||
 | 
					search around the given position for a neighboring wall, returning the first
 | 
				
			||||||
 | 
					one it finds as a facedir value, or nil if there are no adjacent walls.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					is_node_loaded(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This acts as a wrapper for the minetest.get_node_or_nil(node_pos)
 | 
				
			||||||
 | 
					function and accepts a single position parameter.  Returns true if the node in
 | 
				
			||||||
 | 
					question is already loaded, or false if not.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					dbg(string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is a simple debug output function which takes one string parameter.  It
 | 
				
			||||||
 | 
					just checks if DEBUG is true and outputs the phrase "[Plantlife] " followed by
 | 
				
			||||||
 | 
					the supplied string, via the print() function, if so.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					plantslib:generate_tree(pos, treemodel)
 | 
				
			||||||
 | 
					plantslib:grow_tree(pos, treemodel)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In the case of the growing code and the mapgen-based tree generator code, 
 | 
				
			||||||
 | 
					generating a tree is done via the above two calls, which in turn immediately
 | 
				
			||||||
 | 
					call the usual spawn_tree() functions.  This rerouting exists as a way for
 | 
				
			||||||
 | 
					other mods to hook into plants_lib's tree-growing functions in general,
 | 
				
			||||||
 | 
					perhaps to execute something extra whenever a tree is spawned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					plantslib:generate_tree(pos, treemodel) is called any time a
 | 
				
			||||||
 | 
					tree is spawned at map generation time.  'pos' is the position of the block on
 | 
				
			||||||
 | 
					which the tree is to be placed.  'treemodel' is the standard L-Systems tree
 | 
				
			||||||
 | 
					definition table expected by the spawn_tree() function.  Refer to the 'trunk'
 | 
				
			||||||
 | 
					field in that table to derive the name of the tree being spawned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					plantslib:grow_tree(pos, treemodel) does the same sort of thing whenever a 
 | 
				
			||||||
 | 
					tree is spawned within the abm-based growing code, for example when growing a
 | 
				
			||||||
 | 
					sapling into a tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					=====
 | 
				
			||||||
 | 
					There are other, internal helper functions that are not meant for use by other
 | 
				
			||||||
 | 
					mods.  Don't rely on them, as they are subject to change without notice.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					===============
 | 
				
			||||||
 | 
					Global Settings
 | 
				
			||||||
 | 
					===============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Set this to true if you want the mod to spam your console with debug info :-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						plantlife_debug = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					======================
 | 
				
			||||||
 | 
					Fertile Ground Mapping
 | 
				
			||||||
 | 
					======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The mod uses Perlin noise to create "biomes" of the various plants, via the
 | 
				
			||||||
 | 
					minetest.get_perlin() function.  At present, there are three layers of
 | 
				
			||||||
 | 
					Perlin noise used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The first one is for a "fertile ground" layer, which I tend to refer to as the
 | 
				
			||||||
 | 
					generic "stuff can potentially grow here" layer.  Its values are hard-coded:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						plantslib.plantlife_seed_diff = 329
 | 
				
			||||||
 | 
						perlin_octaves = 3
 | 
				
			||||||
 | 
						perlin_persistence = 0.6
 | 
				
			||||||
 | 
						perlin_scale = 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For more information on how Perlin noise is generated, you will need to search
 | 
				
			||||||
 | 
					the web, as these default values were from that which is used by minetest_game
 | 
				
			||||||
 | 
					to spawn jungle grass at mapgen time, and I'm still learning how Perlin noise
 | 
				
			||||||
 | 
					works.  ;-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					===================
 | 
				
			||||||
 | 
					Temperature Mapping
 | 
				
			||||||
 | 
					===================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The second Perlin layer is a temperature map, with values taken from
 | 
				
			||||||
 | 
					SPlizard's Snow Biomes mod so that the two will be compatible, since that mod
 | 
				
			||||||
 | 
					appears to be the standard now.  Those values are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						temperature_seeddiff = 112
 | 
				
			||||||
 | 
						temperature_octaves = 3
 | 
				
			||||||
 | 
						temperature_persistence = 0.5
 | 
				
			||||||
 | 
						temperature_scale = 150
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The way Perlin values are used by this mod, in keeping with the snow mod's 
 | 
				
			||||||
 | 
					apparent methods, larger values returned by the Perlin function represent
 | 
				
			||||||
 | 
					*colder* temperatures.  In this mod, the following table gives a rough
 | 
				
			||||||
 | 
					approximation of how temperature maps to these values, normalized to
 | 
				
			||||||
 | 
					0.53 = 0 °C and +1.0 = -25 °C.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Perlin		Approx. Temperature
 | 
				
			||||||
 | 
					-1.0		 81 °C	( 178 °F)
 | 
				
			||||||
 | 
					-0.75		 68 °C	( 155 °F)
 | 
				
			||||||
 | 
					-0.56		 58 °C	( 136 °F)
 | 
				
			||||||
 | 
					-0.5		 55 °C	( 131 °F)
 | 
				
			||||||
 | 
					-0.25		 41 °C	( 107 °F)
 | 
				
			||||||
 | 
					-0.18		 38 °C	( 100 °F)
 | 
				
			||||||
 | 
					 0		 28 °C	(  83 °F)
 | 
				
			||||||
 | 
					 0.13		 21 °C	(  70 °F)
 | 
				
			||||||
 | 
					 0.25		 15 °C	(  59 °F)
 | 
				
			||||||
 | 
					 0.5		  2 °C	(  35 °F)
 | 
				
			||||||
 | 
					 0.53		  0 °C	(  32 °F)
 | 
				
			||||||
 | 
					 0.75		-12 °C	(  11 °F)
 | 
				
			||||||
 | 
					 0.86		-18 °C	(   0 °F)
 | 
				
			||||||
 | 
					 1.0		-25 °C	(- 13 °F)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Included in this table are even 0.25 steps in Perlin values along with some
 | 
				
			||||||
 | 
					common temperatures on both the Centigrade and Fahrenheit scales.  Note that
 | 
				
			||||||
 | 
					unless you're trying to model the Moon or perhaps Mercury in your mods/maps, 
 | 
				
			||||||
 | 
					you probably won't need to bother with Perlin values of less than -0.56 or so.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					================
 | 
				
			||||||
 | 
					Humidity Mapping
 | 
				
			||||||
 | 
					================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Last but not least is a moisture/humidity map.  Like the temperature map
 | 
				
			||||||
 | 
					above, Perlin values can be tested to determine the approximate humidity of
 | 
				
			||||||
 | 
					the *air* in the area.  This humidity map is basically the perlin layer used
 | 
				
			||||||
 | 
					for deserts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A value of -1.0 is very moist (basically a thick fog, if it could be seen), a
 | 
				
			||||||
 | 
					value of +0.4 represents the edge of a desert as usually seen in the game, and
 | 
				
			||||||
 | 
					a value of +1.0 is as dry as a bone.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This does not check for nearby water, just general air humidity, and that
 | 
				
			||||||
 | 
					being the case, nearby ground does not affect the reported humidity of a
 | 
				
			||||||
 | 
					region (because this isn't yet possible to calculate yet).  Use the near_nodes
 | 
				
			||||||
 | 
					and avoid_nodes parameters and their related options to check for water and
 | 
				
			||||||
 | 
					such.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The Perlin values use for this layer are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						humidity_seeddiff = 9130
 | 
				
			||||||
 | 
						humidity_octaves = 3
 | 
				
			||||||
 | 
						humidity_persistence = 0.5
 | 
				
			||||||
 | 
						humidity_scale = 250
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					And this particular one is mapped slightly differently from the others:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						noise3 = perlin3:get2d({x=p_top.x+150, y=p_top.z+50})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(Note the +150 and +50 offsets)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										934
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						@@ -1,603 +1,335 @@
 | 
				
			|||||||
License for code: LGPL 3.0
 | 
					 | 
				
			||||||
License for media and all other assets:  CC-by-SA 4.0
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
These licenses apply to all modules and components in this modpack,
 | 
					For the code, Ironzorg's textures, and everything else:  WTFPL
 | 
				
			||||||
unless otherwise stated.
 | 
					
 | 
				
			||||||
 | 
					For Mossmanikin's mods (Ferns, Dryplans, and the components
 | 
				
			||||||
 | 
					from the Undergrowth modpack), and all of my own textures: 
 | 
				
			||||||
 | 
					CC-By-SA 3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					----------
 | 
				
			||||||
 | 
					            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
				
			||||||
 | 
					                    Version 2, December 2004
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Everyone is permitted to copy and distribute verbatim or modified
 | 
				
			||||||
 | 
					 copies of this license document, and changing it is allowed as long
 | 
				
			||||||
 | 
					 as the name is changed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
				
			||||||
 | 
					   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  0. You just DO WHAT THE FUCK YOU WANT TO.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 This license is also known as "WTFPL"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS 
 | 
				
			||||||
 | 
					CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS 
 | 
				
			||||||
 | 
					PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE 
 | 
				
			||||||
 | 
					WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW 
 | 
				
			||||||
 | 
					IS PROHIBITED.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND 
 | 
				
			||||||
 | 
					AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS 
 | 
				
			||||||
 | 
					LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS 
 | 
				
			||||||
 | 
					YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE 
 | 
				
			||||||
 | 
					OF SUCH TERMS AND CONDITIONS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Definitions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    "Collective Work" means a work, such as a periodical issue, 
 | 
				
			||||||
 | 
					anthology or encyclopedia, in which the Work in its entirety in 
 | 
				
			||||||
 | 
					unmodified form, along with one or more other contributions, 
 | 
				
			||||||
 | 
					constituting separate and independent works in themselves, are 
 | 
				
			||||||
 | 
					assembled into a collective whole. A work that constitutes a 
 | 
				
			||||||
 | 
					Collective Work will not be considered a Derivative Work (as 
 | 
				
			||||||
 | 
					defined below) for the purposes of this License.
 | 
				
			||||||
 | 
					    "Creative Commons Compatible License" means a license that is 
 | 
				
			||||||
 | 
					listed at http://creativecommons.org/compatiblelicenses that has 
 | 
				
			||||||
 | 
					been approved by Creative Commons as being essentially equivalent 
 | 
				
			||||||
 | 
					to this License, including, at a minimum, because that license: 
 | 
				
			||||||
 | 
					(i) contains terms that have the same purpose, meaning and effect 
 | 
				
			||||||
 | 
					as the License Elements of this License; and, (ii) explicitly 
 | 
				
			||||||
 | 
					permits the relicensing of derivatives of works made available 
 | 
				
			||||||
 | 
					under that license under this License or either a Creative Commons 
 | 
				
			||||||
 | 
					unported license or a Creative Commons jurisdiction license with 
 | 
				
			||||||
 | 
					the same License Elements as this License.
 | 
				
			||||||
 | 
					    "Derivative Work" means a work based upon the Work or upon the 
 | 
				
			||||||
 | 
					Work and other pre-existing works, such as a translation, musical 
 | 
				
			||||||
 | 
					arrangement, dramatization, fictionalization, motion picture 
 | 
				
			||||||
 | 
					version, sound recording, art reproduction, abridgment, 
 | 
				
			||||||
 | 
					condensation, or any other form in which the Work may be recast, 
 | 
				
			||||||
 | 
					transformed, or adapted, except that a work that constitutes a 
 | 
				
			||||||
 | 
					Collective Work will not be considered a Derivative Work for the 
 | 
				
			||||||
 | 
					purpose of this License. For the avoidance of doubt, where the 
 | 
				
			||||||
 | 
					Work is a musical composition or sound recording, the 
 | 
				
			||||||
 | 
					synchronization of the Work in timed-relation with a moving image 
 | 
				
			||||||
 | 
					("synching") will be considered a Derivative Work for the purpose 
 | 
				
			||||||
 | 
					of this License.
 | 
				
			||||||
 | 
					    "License Elements" means the following high-level license 
 | 
				
			||||||
 | 
					attributes as selected by Licensor and indicated in the title of 
 | 
				
			||||||
 | 
					this License: Attribution, ShareAlike.
 | 
				
			||||||
 | 
					    "Licensor" means the individual, individuals, entity or 
 | 
				
			||||||
 | 
					entities that offers the Work under the terms of this License.
 | 
				
			||||||
 | 
					    "Original Author" means the individual, individuals, entity or 
 | 
				
			||||||
 | 
					entities who created the Work.
 | 
				
			||||||
 | 
					    "Work" means the copyrightable work of authorship offered 
 | 
				
			||||||
 | 
					under the terms of this License.
 | 
				
			||||||
 | 
					    "You" means an individual or entity exercising rights under 
 | 
				
			||||||
 | 
					this License who has not previously violated the terms of this 
 | 
				
			||||||
 | 
					License with respect to the Work, or who has received express 
 | 
				
			||||||
 | 
					permission from the Licensor to exercise rights under this License 
 | 
				
			||||||
 | 
					despite a previous violation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2. Fair Use Rights. Nothing in this license is intended to reduce, 
 | 
				
			||||||
 | 
					limit, or restrict any rights arising from fair use, first sale or 
 | 
				
			||||||
 | 
					other limitations on the exclusive rights of the copyright owner 
 | 
				
			||||||
 | 
					under copyright law or other applicable laws.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3. License Grant. Subject to the terms and conditions of this 
 | 
				
			||||||
 | 
					License, Licensor hereby grants You a worldwide, royalty-free, 
 | 
				
			||||||
 | 
					non-exclusive, perpetual (for the duration of the applicable 
 | 
				
			||||||
 | 
					copyright) license to exercise the rights in the Work as stated 
 | 
				
			||||||
 | 
					below:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    to reproduce the Work, to incorporate the Work into one or 
 | 
				
			||||||
 | 
					more Collective Works, and to reproduce the Work as incorporated 
 | 
				
			||||||
 | 
					in the Collective Works;
 | 
				
			||||||
 | 
					    to create and reproduce Derivative Works provided that any 
 | 
				
			||||||
 | 
					such Derivative Work, including any translation in any medium, 
 | 
				
			||||||
 | 
					takes reasonable steps to clearly label, demarcate or otherwise 
 | 
				
			||||||
 | 
					identify that changes were made to the original Work. For example, 
 | 
				
			||||||
 | 
					a translation could be marked "The original work was translated 
 | 
				
			||||||
 | 
					from English to Spanish," or a modification could indicate "The 
 | 
				
			||||||
 | 
					original work has been modified.";
 | 
				
			||||||
 | 
					    to distribute copies or phonorecords of, display publicly, 
 | 
				
			||||||
 | 
					perform publicly, and perform publicly by means of a digital audio 
 | 
				
			||||||
 | 
					transmission the Work including as incorporated in Collective 
 | 
				
			||||||
 | 
					Works;
 | 
				
			||||||
 | 
					    to distribute copies or phonorecords of, display publicly, 
 | 
				
			||||||
 | 
					perform publicly, and perform publicly by means of a digital audio 
 | 
				
			||||||
 | 
					transmission Derivative Works.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    For the avoidance of doubt, where the Work is a musical 
 | 
				
			||||||
 | 
					composition:
 | 
				
			||||||
 | 
					        Performance Royalties Under Blanket Licenses. Licensor 
 | 
				
			||||||
 | 
					waives the exclusive right to collect, whether individually or, in 
 | 
				
			||||||
 | 
					the event that Licensor is a member of a performance rights 
 | 
				
			||||||
 | 
					society (e.g. ASCAP, BMI, SESAC), via that society, royalties for 
 | 
				
			||||||
 | 
					the public performance or public digital performance (e.g. 
 | 
				
			||||||
 | 
					webcast) of the Work.
 | 
				
			||||||
 | 
					        Mechanical Rights and Statutory Royalties. Licensor waives 
 | 
				
			||||||
 | 
					the exclusive right to collect, whether individually or via a 
 | 
				
			||||||
 | 
					music rights agency or designated agent (e.g. Harry Fox Agency), 
 | 
				
			||||||
 | 
					royalties for any phonorecord You create from the Work ("cover 
 | 
				
			||||||
 | 
					version") and distribute, subject to the compulsory license 
 | 
				
			||||||
 | 
					created by 17 USC Section 115 of the US Copyright Act (or the 
 | 
				
			||||||
 | 
					equivalent in other jurisdictions).
 | 
				
			||||||
 | 
					    Webcasting Rights and Statutory Royalties. For the avoidance 
 | 
				
			||||||
 | 
					of doubt, where the Work is a sound recording, Licensor waives the 
 | 
				
			||||||
 | 
					exclusive right to collect, whether individually or via a 
 | 
				
			||||||
 | 
					performance-rights society (e.g. SoundExchange), royalties for the 
 | 
				
			||||||
 | 
					public digital performance (e.g. webcast) of the Work, subject to 
 | 
				
			||||||
 | 
					the compulsory license created by 17 USC Section 114 of the US 
 | 
				
			||||||
 | 
					Copyright Act (or the equivalent in other jurisdictions).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above rights may be exercised in all media and formats whether 
 | 
				
			||||||
 | 
					now known or hereafter devised. The above rights include the right 
 | 
				
			||||||
 | 
					to make such modifications as are technically necessary to 
 | 
				
			||||||
 | 
					exercise the rights in other media and formats. All rights not 
 | 
				
			||||||
 | 
					expressly granted by Licensor are hereby reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					4. Restrictions. The license granted in Section 3 above is 
 | 
				
			||||||
 | 
					expressly made subject to and limited by the following 
 | 
				
			||||||
 | 
					restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    You may distribute, publicly display, publicly perform, or 
 | 
				
			||||||
 | 
					publicly digitally perform the Work only under the terms of this 
 | 
				
			||||||
 | 
					License, and You must include a copy of, or the Uniform Resource 
 | 
				
			||||||
 | 
					Identifier for, this License with every copy or phonorecord of the 
 | 
				
			||||||
 | 
					Work You distribute, publicly display, publicly perform, or 
 | 
				
			||||||
 | 
					publicly digitally perform. You may not offer or impose any terms 
 | 
				
			||||||
 | 
					on the Work that restrict the terms of this License or the ability 
 | 
				
			||||||
 | 
					of a recipient of the Work to exercise of the rights granted to 
 | 
				
			||||||
 | 
					that recipient under the terms of the License. You may not 
 | 
				
			||||||
 | 
					sublicense the Work. You must keep intact all notices that refer 
 | 
				
			||||||
 | 
					to this License and to the disclaimer of warranties. When You 
 | 
				
			||||||
 | 
					distribute, publicly display, publicly perform, or publicly 
 | 
				
			||||||
 | 
					digitally perform the Work, You may not impose any technological 
 | 
				
			||||||
 | 
					measures on the Work that restrict the ability of a recipient of 
 | 
				
			||||||
 | 
					the Work from You to exercise of the rights granted to that 
 | 
				
			||||||
 | 
					recipient under the terms of the License. This Section 4(a) 
 | 
				
			||||||
 | 
					applies to the Work as incorporated in a Collective Work, but this 
 | 
				
			||||||
 | 
					does not require the Collective Work apart from the Work itself to 
 | 
				
			||||||
 | 
					be made subject to the terms of this License. If You create a 
 | 
				
			||||||
 | 
					Collective Work, upon notice from any Licensor You must, to the 
 | 
				
			||||||
 | 
					extent practicable, remove from the Collective Work any credit as 
 | 
				
			||||||
 | 
					required by Section 4(c), as requested. If You create a Derivative 
 | 
				
			||||||
 | 
					Work, upon notice from any Licensor You must, to the extent 
 | 
				
			||||||
 | 
					practicable, remove from the Derivative Work any credit as 
 | 
				
			||||||
 | 
					required by Section 4(c), as requested.
 | 
				
			||||||
 | 
					    You may distribute, publicly display, publicly perform, or 
 | 
				
			||||||
 | 
					publicly digitally perform a Derivative Work only under: (i) the 
 | 
				
			||||||
 | 
					terms of this License; (ii) a later version of this License with 
 | 
				
			||||||
 | 
					the same License Elements as this License; (iii) either the 
 | 
				
			||||||
 | 
					Creative Commons (Unported) license or a Creative Commons 
 | 
				
			||||||
 | 
					jurisdiction license (either this or a later license version) that 
 | 
				
			||||||
 | 
					contains the same License Elements as this License (e.g. 
 | 
				
			||||||
 | 
					Attribution-ShareAlike 3.0 (Unported)); (iv) a Creative Commons 
 | 
				
			||||||
 | 
					Compatible License. If you license the Derivative Work under one 
 | 
				
			||||||
 | 
					of the licenses mentioned in (iv), you must comply with the terms 
 | 
				
			||||||
 | 
					of that license. If you license the Derivative Work under the 
 | 
				
			||||||
 | 
					terms of any of the licenses mentioned in (i), (ii) or (iii) (the 
 | 
				
			||||||
 | 
					"Applicable License"), you must comply with the terms of the 
 | 
				
			||||||
 | 
					Applicable License generally and with the following provisions: 
 | 
				
			||||||
 | 
					(I) You must include a copy of, or the Uniform Resource Identifier 
 | 
				
			||||||
 | 
					for, the Applicable License with every copy or phonorecord of each 
 | 
				
			||||||
 | 
					Derivative Work You distribute, publicly display, publicly 
 | 
				
			||||||
 | 
					perform, or publicly digitally perform; (II) You may not offer or 
 | 
				
			||||||
 | 
					impose any terms on the Derivative Works that restrict the terms 
 | 
				
			||||||
 | 
					of the Applicable License or the ability of a recipient of the 
 | 
				
			||||||
 | 
					Work to exercise the rights granted to that recipient under the 
 | 
				
			||||||
 | 
					terms of the Applicable License; (III) You must keep intact all 
 | 
				
			||||||
 | 
					notices that refer to the Applicable License and to the disclaimer 
 | 
				
			||||||
 | 
					of warranties; and, (IV) when You distribute, publicly display, 
 | 
				
			||||||
 | 
					publicly perform, or publicly digitally perform the Work, You may 
 | 
				
			||||||
 | 
					not impose any technological measures on the Derivative Work that 
 | 
				
			||||||
 | 
					restrict the ability of a recipient of the Derivative Work from 
 | 
				
			||||||
 | 
					You to exercise the rights granted to that recipient under the 
 | 
				
			||||||
 | 
					terms of the Applicable License. This Section 4(b) applies to the 
 | 
				
			||||||
 | 
					Derivative Work as incorporated in a Collective Work, but this 
 | 
				
			||||||
 | 
					does not require the Collective Work apart from the Derivative 
 | 
				
			||||||
 | 
					Work itself to be made subject to the terms of the Applicable 
 | 
				
			||||||
 | 
					License.
 | 
				
			||||||
 | 
					    If You distribute, publicly display, publicly perform, or 
 | 
				
			||||||
 | 
					publicly digitally perform the Work (as defined in Section 1 
 | 
				
			||||||
 | 
					above) or any Derivative Works (as defined in Section 1 above) or 
 | 
				
			||||||
 | 
					Collective Works (as defined in Section 1 above), You must, unless 
 | 
				
			||||||
 | 
					a request has been made pursuant to Section 4(a), keep intact all 
 | 
				
			||||||
 | 
					copyright notices for the Work and provide, reasonable to the 
 | 
				
			||||||
 | 
					medium or means You are utilizing: (i) the name of the Original 
 | 
				
			||||||
 | 
					Author (or pseudonym, if applicable) if supplied, and/or (ii) if 
 | 
				
			||||||
 | 
					the Original Author and/or Licensor designate another party or 
 | 
				
			||||||
 | 
					parties (e.g. a sponsor institute, publishing entity, journal) for 
 | 
				
			||||||
 | 
					attribution ("Attribution Parties") in Licensor's copyright 
 | 
				
			||||||
 | 
					notice, terms of service or by other reasonable means, the name of 
 | 
				
			||||||
 | 
					such party or parties; the title of the Work if supplied; to the 
 | 
				
			||||||
 | 
					extent reasonably practicable, the Uniform Resource Identifier, if 
 | 
				
			||||||
 | 
					any, that Licensor specifies to be associated with the Work, 
 | 
				
			||||||
 | 
					unless such URI does not refer to the copyright notice or 
 | 
				
			||||||
 | 
					licensing information for the Work; and, consistent with Section 
 | 
				
			||||||
 | 
					3(b) in the case of a Derivative Work, a credit identifying the 
 | 
				
			||||||
 | 
					use of the Work in the Derivative Work (e.g., "French translation 
 | 
				
			||||||
 | 
					of the Work by Original Author," or "Screenplay based on original 
 | 
				
			||||||
 | 
					Work by Original Author"). The credit required by this Section 
 | 
				
			||||||
 | 
					4(c) may be implemented in any reasonable manner; provided, 
 | 
				
			||||||
 | 
					however, that in the case of a Derivative Work or Collective Work, 
 | 
				
			||||||
 | 
					at a minimum such credit will appear, if a credit for all 
 | 
				
			||||||
 | 
					contributing authors of the Derivative Work or Collective Work 
 | 
				
			||||||
 | 
					appears, then as part of these credits and in a manner at least as 
 | 
				
			||||||
 | 
					prominent as the credits for the other contributing authors. For 
 | 
				
			||||||
 | 
					the avoidance of doubt, You may only use the credit required by 
 | 
				
			||||||
 | 
					this Section for the purpose of attribution in the manner set out 
 | 
				
			||||||
 | 
					above and, by exercising Your rights under this License, You may 
 | 
				
			||||||
 | 
					not implicitly or explicitly assert or imply any connection with, 
 | 
				
			||||||
 | 
					sponsorship or endorsement by the Original Author, Licensor and/or 
 | 
				
			||||||
 | 
					Attribution Parties, as appropriate, of You or Your use of the 
 | 
				
			||||||
 | 
					Work, without the separate, express prior written permission of 
 | 
				
			||||||
 | 
					the Original Author, Licensor and/or Attribution Parties.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					5. Representations, Warranties and Disclaimer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, 
 | 
				
			||||||
 | 
					LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY 
 | 
				
			||||||
 | 
					RIGHTS HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR 
 | 
				
			||||||
 | 
					MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE 
 | 
				
			||||||
 | 
					WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT 
 | 
				
			||||||
 | 
					LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY, 
 | 
				
			||||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE 
 | 
				
			||||||
 | 
					OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE 
 | 
				
			||||||
 | 
					OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT 
 | 
				
			||||||
 | 
					ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY 
 | 
				
			||||||
 | 
					NOT APPLY TO YOU.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY 
 | 
				
			||||||
 | 
					APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY 
 | 
				
			||||||
 | 
					LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE 
 | 
				
			||||||
 | 
					OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE 
 | 
				
			||||||
 | 
					WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
 | 
				
			||||||
 | 
					DAMAGES.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					7. Termination
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This License and the rights granted hereunder will terminate 
 | 
				
			||||||
 | 
					automatically upon any breach by You of the terms of this License. 
 | 
				
			||||||
 | 
					Individuals or entities who have received Derivative Works or 
 | 
				
			||||||
 | 
					Collective Works from You under this License, however, will not 
 | 
				
			||||||
 | 
					have their licenses terminated provided such individuals or 
 | 
				
			||||||
 | 
					entities remain in full compliance with those licenses. Sections 
 | 
				
			||||||
 | 
					1, 2, 5, 6, 7, and 8 will survive any termination of this License.
 | 
				
			||||||
 | 
					    Subject to the above terms and conditions, the license granted 
 | 
				
			||||||
 | 
					here is perpetual (for the duration of the applicable copyright in 
 | 
				
			||||||
 | 
					the Work). Notwithstanding the above, Licensor reserves the right 
 | 
				
			||||||
 | 
					to release the Work under different license terms or to stop 
 | 
				
			||||||
 | 
					distributing the Work at any time; provided, however that any such 
 | 
				
			||||||
 | 
					election will not serve to withdraw this License (or any other 
 | 
				
			||||||
 | 
					license that has been, or is required to be, granted under the 
 | 
				
			||||||
 | 
					terms of this License), and this License will continue in full 
 | 
				
			||||||
 | 
					force and effect unless terminated as stated above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					8. Miscellaneous
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Each time You distribute or publicly digitally perform the 
 | 
				
			||||||
 | 
					Work (as defined in Section 1 above) or a Collective Work (as 
 | 
				
			||||||
 | 
					defined in Section 1 above), the Licensor offers to the recipient 
 | 
				
			||||||
 | 
					a license to the Work on the same terms and conditions as the 
 | 
				
			||||||
 | 
					license granted to You under this License.
 | 
				
			||||||
 | 
					    Each time You distribute or publicly digitally perform a 
 | 
				
			||||||
 | 
					Derivative Work, Licensor offers to the recipient a license to the 
 | 
				
			||||||
 | 
					original Work on the same terms and conditions as the license 
 | 
				
			||||||
 | 
					granted to You under this License.
 | 
				
			||||||
 | 
					    If any provision of this License is invalid or unenforceable 
 | 
				
			||||||
 | 
					under applicable law, it shall not affect the validity or 
 | 
				
			||||||
 | 
					enforceability of the remainder of the terms of this License, and 
 | 
				
			||||||
 | 
					without further action by the parties to this agreement, such 
 | 
				
			||||||
 | 
					provision shall be reformed to the minimum extent necessary to 
 | 
				
			||||||
 | 
					make such provision valid and enforceable.
 | 
				
			||||||
 | 
					    No term or provision of this License shall be deemed waived 
 | 
				
			||||||
 | 
					and no breach consented to unless such waiver or consent shall be 
 | 
				
			||||||
 | 
					in writing and signed by the party to be charged with such waiver 
 | 
				
			||||||
 | 
					or consent.
 | 
				
			||||||
 | 
					    This License constitutes the entire agreement between the 
 | 
				
			||||||
 | 
					parties with respect to the Work licensed here. There are no 
 | 
				
			||||||
 | 
					understandings, agreements or representations with respect to the 
 | 
				
			||||||
 | 
					Work not specified here. Licensor shall not be bound by any 
 | 
				
			||||||
 | 
					additional provisions that may appear in any communication from 
 | 
				
			||||||
 | 
					You. This License may not be modified without the mutual written 
 | 
				
			||||||
 | 
					agreement of the Licensor and You.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Creative Commons Notice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Creative Commons is not a party to this License, and makes no 
 | 
				
			||||||
 | 
					warranty whatsoever in connection with the Work. Creative Commons 
 | 
				
			||||||
 | 
					will not be liable to You or any party on any legal theory for any 
 | 
				
			||||||
 | 
					damages whatsoever, including without limitation any general, 
 | 
				
			||||||
 | 
					special, incidental or consequential damages arising in connection 
 | 
				
			||||||
 | 
					to this license. Notwithstanding the foregoing two (2) sentences, 
 | 
				
			||||||
 | 
					if Creative Commons has expressly identified itself as the 
 | 
				
			||||||
 | 
					Licensor hereunder, it shall have all rights and obligations of 
 | 
				
			||||||
 | 
					Licensor.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Except for the limited purpose of indicating to the public 
 | 
				
			||||||
 | 
					that the Work is licensed under the CCPL, Creative Commons does 
 | 
				
			||||||
 | 
					not authorize the use by either party of the trademark "Creative 
 | 
				
			||||||
 | 
					Commons" or any related trademark or logo of Creative Commons 
 | 
				
			||||||
 | 
					without the prior written consent of Creative Commons. Any 
 | 
				
			||||||
 | 
					permitted use will be in compliance with Creative Commons' 
 | 
				
			||||||
 | 
					then-current trademark usage guidelines, as may be published on 
 | 
				
			||||||
 | 
					its website or otherwise made available upon request from time to 
 | 
				
			||||||
 | 
					time. For the avoidance of doubt, this trademark restriction does 
 | 
				
			||||||
 | 
					not form part of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Creative Commons may be contacted at 
 | 
				
			||||||
 | 
					http://creativecommons.org/.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
###############################################################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                   GNU LESSER GENERAL PUBLIC LICENSE
 | 
					 | 
				
			||||||
                       Version 3, 29 June 2007
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 | 
					 | 
				
			||||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
					 | 
				
			||||||
 of this license document, but changing it is not allowed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  This version of the GNU Lesser General Public License incorporates
 | 
					 | 
				
			||||||
the terms and conditions of version 3 of the GNU General Public
 | 
					 | 
				
			||||||
License, supplemented by the additional permissions listed below.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  0. Additional Definitions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  As used herein, "this License" refers to version 3 of the GNU Lesser
 | 
					 | 
				
			||||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
 | 
					 | 
				
			||||||
General Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  "The Library" refers to a covered work governed by this License,
 | 
					 | 
				
			||||||
other than an Application or a Combined Work as defined below.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  An "Application" is any work that makes use of an interface provided
 | 
					 | 
				
			||||||
by the Library, but which is not otherwise based on the Library.
 | 
					 | 
				
			||||||
Defining a subclass of a class defined by the Library is deemed a mode
 | 
					 | 
				
			||||||
of using an interface provided by the Library.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A "Combined Work" is a work produced by combining or linking an
 | 
					 | 
				
			||||||
Application with the Library.  The particular version of the Library
 | 
					 | 
				
			||||||
with which the Combined Work was made is also called the "Linked
 | 
					 | 
				
			||||||
Version".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The "Minimal Corresponding Source" for a Combined Work means the
 | 
					 | 
				
			||||||
Corresponding Source for the Combined Work, excluding any source code
 | 
					 | 
				
			||||||
for portions of the Combined Work that, considered in isolation, are
 | 
					 | 
				
			||||||
based on the Application, and not on the Linked Version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The "Corresponding Application Code" for a Combined Work means the
 | 
					 | 
				
			||||||
object code and/or source code for the Application, including any data
 | 
					 | 
				
			||||||
and utility programs needed for reproducing the Combined Work from the
 | 
					 | 
				
			||||||
Application, but excluding the System Libraries of the Combined Work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  1. Exception to Section 3 of the GNU GPL.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may convey a covered work under sections 3 and 4 of this License
 | 
					 | 
				
			||||||
without being bound by section 3 of the GNU GPL.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  2. Conveying Modified Versions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If you modify a copy of the Library, and, in your modifications, a
 | 
					 | 
				
			||||||
facility refers to a function or data to be supplied by an Application
 | 
					 | 
				
			||||||
that uses the facility (other than as an argument passed when the
 | 
					 | 
				
			||||||
facility is invoked), then you may convey a copy of the modified
 | 
					 | 
				
			||||||
version:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   a) under this License, provided that you make a good faith effort to
 | 
					 | 
				
			||||||
   ensure that, in the event an Application does not supply the
 | 
					 | 
				
			||||||
   function or data, the facility still operates, and performs
 | 
					 | 
				
			||||||
   whatever part of its purpose remains meaningful, or
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   b) under the GNU GPL, with none of the additional permissions of
 | 
					 | 
				
			||||||
   this License applicable to that copy.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  3. Object Code Incorporating Material from Library Header Files.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The object code form of an Application may incorporate material from
 | 
					 | 
				
			||||||
a header file that is part of the Library.  You may convey such object
 | 
					 | 
				
			||||||
code under terms of your choice, provided that, if the incorporated
 | 
					 | 
				
			||||||
material is not limited to numerical parameters, data structure
 | 
					 | 
				
			||||||
layouts and accessors, or small macros, inline functions and templates
 | 
					 | 
				
			||||||
(ten or fewer lines in length), you do both of the following:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   a) Give prominent notice with each copy of the object code that the
 | 
					 | 
				
			||||||
   Library is used in it and that the Library and its use are
 | 
					 | 
				
			||||||
   covered by this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   b) Accompany the object code with a copy of the GNU GPL and this license
 | 
					 | 
				
			||||||
   document.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  4. Combined Works.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may convey a Combined Work under terms of your choice that,
 | 
					 | 
				
			||||||
taken together, effectively do not restrict modification of the
 | 
					 | 
				
			||||||
portions of the Library contained in the Combined Work and reverse
 | 
					 | 
				
			||||||
engineering for debugging such modifications, if you also do each of
 | 
					 | 
				
			||||||
the following:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   a) Give prominent notice with each copy of the Combined Work that
 | 
					 | 
				
			||||||
   the Library is used in it and that the Library and its use are
 | 
					 | 
				
			||||||
   covered by this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   b) Accompany the Combined Work with a copy of the GNU GPL and this license
 | 
					 | 
				
			||||||
   document.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   c) For a Combined Work that displays copyright notices during
 | 
					 | 
				
			||||||
   execution, include the copyright notice for the Library among
 | 
					 | 
				
			||||||
   these notices, as well as a reference directing the user to the
 | 
					 | 
				
			||||||
   copies of the GNU GPL and this license document.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   d) Do one of the following:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       0) Convey the Minimal Corresponding Source under the terms of this
 | 
					 | 
				
			||||||
       License, and the Corresponding Application Code in a form
 | 
					 | 
				
			||||||
       suitable for, and under terms that permit, the user to
 | 
					 | 
				
			||||||
       recombine or relink the Application with a modified version of
 | 
					 | 
				
			||||||
       the Linked Version to produce a modified Combined Work, in the
 | 
					 | 
				
			||||||
       manner specified by section 6 of the GNU GPL for conveying
 | 
					 | 
				
			||||||
       Corresponding Source.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       1) Use a suitable shared library mechanism for linking with the
 | 
					 | 
				
			||||||
       Library.  A suitable mechanism is one that (a) uses at run time
 | 
					 | 
				
			||||||
       a copy of the Library already present on the user's computer
 | 
					 | 
				
			||||||
       system, and (b) will operate properly with a modified version
 | 
					 | 
				
			||||||
       of the Library that is interface-compatible with the Linked
 | 
					 | 
				
			||||||
       Version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   e) Provide Installation Information, but only if you would otherwise
 | 
					 | 
				
			||||||
   be required to provide such information under section 6 of the
 | 
					 | 
				
			||||||
   GNU GPL, and only to the extent that such information is
 | 
					 | 
				
			||||||
   necessary to install and execute a modified version of the
 | 
					 | 
				
			||||||
   Combined Work produced by recombining or relinking the
 | 
					 | 
				
			||||||
   Application with a modified version of the Linked Version. (If
 | 
					 | 
				
			||||||
   you use option 4d0, the Installation Information must accompany
 | 
					 | 
				
			||||||
   the Minimal Corresponding Source and Corresponding Application
 | 
					 | 
				
			||||||
   Code. If you use option 4d1, you must provide the Installation
 | 
					 | 
				
			||||||
   Information in the manner specified by section 6 of the GNU GPL
 | 
					 | 
				
			||||||
   for conveying Corresponding Source.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  5. Combined Libraries.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may place library facilities that are a work based on the
 | 
					 | 
				
			||||||
Library side by side in a single library together with other library
 | 
					 | 
				
			||||||
facilities that are not Applications and are not covered by this
 | 
					 | 
				
			||||||
License, and convey such a combined library under terms of your
 | 
					 | 
				
			||||||
choice, if you do both of the following:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   a) Accompany the combined library with a copy of the same work based
 | 
					 | 
				
			||||||
   on the Library, uncombined with any other library facilities,
 | 
					 | 
				
			||||||
   conveyed under the terms of this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   b) Give prominent notice with the combined library that part of it
 | 
					 | 
				
			||||||
   is a work based on the Library, and explaining where to find the
 | 
					 | 
				
			||||||
   accompanying uncombined form of the same work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  6. Revised Versions of the GNU Lesser General Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The Free Software Foundation may publish revised and/or new versions
 | 
					 | 
				
			||||||
of the GNU Lesser General Public License from time to time. Such new
 | 
					 | 
				
			||||||
versions will be similar in spirit to the present version, but may
 | 
					 | 
				
			||||||
differ in detail to address new problems or concerns.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Each version is given a distinguishing version number. If the
 | 
					 | 
				
			||||||
Library as you received it specifies that a certain numbered version
 | 
					 | 
				
			||||||
of the GNU Lesser General Public License "or any later version"
 | 
					 | 
				
			||||||
applies to it, you have the option of following the terms and
 | 
					 | 
				
			||||||
conditions either of that published version or of any later version
 | 
					 | 
				
			||||||
published by the Free Software Foundation. If the Library as you
 | 
					 | 
				
			||||||
received it does not specify a version number of the GNU Lesser
 | 
					 | 
				
			||||||
General Public License, you may choose any version of the GNU Lesser
 | 
					 | 
				
			||||||
General Public License ever published by the Free Software Foundation.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If the Library as you received it specifies that a proxy can decide
 | 
					 | 
				
			||||||
whether future versions of the GNU Lesser General Public License shall
 | 
					 | 
				
			||||||
apply, that proxy's public statement of acceptance of any version is
 | 
					 | 
				
			||||||
permanent authorization for you to choose that version for the
 | 
					 | 
				
			||||||
Library.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
###############################################################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Attribution-ShareAlike 4.0 International
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=======================================================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
 | 
					 | 
				
			||||||
does not provide legal services or legal advice. Distribution of
 | 
					 | 
				
			||||||
Creative Commons public licenses does not create a lawyer-client or
 | 
					 | 
				
			||||||
other relationship. Creative Commons makes its licenses and related
 | 
					 | 
				
			||||||
information available on an "as-is" basis. Creative Commons gives no
 | 
					 | 
				
			||||||
warranties regarding its licenses, any material licensed under their
 | 
					 | 
				
			||||||
terms and conditions, or any related information. Creative Commons
 | 
					 | 
				
			||||||
disclaims all liability for damages resulting from their use to the
 | 
					 | 
				
			||||||
fullest extent possible.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Using Creative Commons Public Licenses
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Creative Commons public licenses provide a standard set of terms and
 | 
					 | 
				
			||||||
conditions that creators and other rights holders may use to share
 | 
					 | 
				
			||||||
original works of authorship and other material subject to copyright
 | 
					 | 
				
			||||||
and certain other rights specified in the public license below. The
 | 
					 | 
				
			||||||
following considerations are for informational purposes only, are not
 | 
					 | 
				
			||||||
exhaustive, and do not form part of our licenses.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     Considerations for licensors: Our public licenses are
 | 
					 | 
				
			||||||
     intended for use by those authorized to give the public
 | 
					 | 
				
			||||||
     permission to use material in ways otherwise restricted by
 | 
					 | 
				
			||||||
     copyright and certain other rights. Our licenses are
 | 
					 | 
				
			||||||
     irrevocable. Licensors should read and understand the terms
 | 
					 | 
				
			||||||
     and conditions of the license they choose before applying it.
 | 
					 | 
				
			||||||
     Licensors should also secure all rights necessary before
 | 
					 | 
				
			||||||
     applying our licenses so that the public can reuse the
 | 
					 | 
				
			||||||
     material as expected. Licensors should clearly mark any
 | 
					 | 
				
			||||||
     material not subject to the license. This includes other CC-
 | 
					 | 
				
			||||||
     licensed material, or material used under an exception or
 | 
					 | 
				
			||||||
     limitation to copyright. More considerations for licensors:
 | 
					 | 
				
			||||||
	wiki.creativecommons.org/Considerations_for_licensors
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     Considerations for the public: By using one of our public
 | 
					 | 
				
			||||||
     licenses, a licensor grants the public permission to use the
 | 
					 | 
				
			||||||
     licensed material under specified terms and conditions. If
 | 
					 | 
				
			||||||
     the licensor's permission is not necessary for any reason--for
 | 
					 | 
				
			||||||
     example, because of any applicable exception or limitation to
 | 
					 | 
				
			||||||
     copyright--then that use is not regulated by the license. Our
 | 
					 | 
				
			||||||
     licenses grant only permissions under copyright and certain
 | 
					 | 
				
			||||||
     other rights that a licensor has authority to grant. Use of
 | 
					 | 
				
			||||||
     the licensed material may still be restricted for other
 | 
					 | 
				
			||||||
     reasons, including because others have copyright or other
 | 
					 | 
				
			||||||
     rights in the material. A licensor may make special requests,
 | 
					 | 
				
			||||||
     such as asking that all changes be marked or described.
 | 
					 | 
				
			||||||
     Although not required by our licenses, you are encouraged to
 | 
					 | 
				
			||||||
     respect those requests where reasonable. More considerations
 | 
					 | 
				
			||||||
     for the public: 
 | 
					 | 
				
			||||||
	wiki.creativecommons.org/Considerations_for_licensees
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=======================================================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Creative Commons Attribution-ShareAlike 4.0 International Public
 | 
					 | 
				
			||||||
License
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
By exercising the Licensed Rights (defined below), You accept and agree
 | 
					 | 
				
			||||||
to be bound by the terms and conditions of this Creative Commons
 | 
					 | 
				
			||||||
Attribution-ShareAlike 4.0 International Public License ("Public
 | 
					 | 
				
			||||||
License"). To the extent this Public License may be interpreted as a
 | 
					 | 
				
			||||||
contract, You are granted the Licensed Rights in consideration of Your
 | 
					 | 
				
			||||||
acceptance of these terms and conditions, and the Licensor grants You
 | 
					 | 
				
			||||||
such rights in consideration of benefits the Licensor receives from
 | 
					 | 
				
			||||||
making the Licensed Material available under these terms and
 | 
					 | 
				
			||||||
conditions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Section 1 -- Definitions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  a. Adapted Material means material subject to Copyright and Similar
 | 
					 | 
				
			||||||
     Rights that is derived from or based upon the Licensed Material
 | 
					 | 
				
			||||||
     and in which the Licensed Material is translated, altered,
 | 
					 | 
				
			||||||
     arranged, transformed, or otherwise modified in a manner requiring
 | 
					 | 
				
			||||||
     permission under the Copyright and Similar Rights held by the
 | 
					 | 
				
			||||||
     Licensor. For purposes of this Public License, where the Licensed
 | 
					 | 
				
			||||||
     Material is a musical work, performance, or sound recording,
 | 
					 | 
				
			||||||
     Adapted Material is always produced where the Licensed Material is
 | 
					 | 
				
			||||||
     synched in timed relation with a moving image.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  b. Adapter's License means the license You apply to Your Copyright
 | 
					 | 
				
			||||||
     and Similar Rights in Your contributions to Adapted Material in
 | 
					 | 
				
			||||||
     accordance with the terms and conditions of this Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  c. BY-SA Compatible License means a license listed at
 | 
					 | 
				
			||||||
     creativecommons.org/compatiblelicenses, approved by Creative
 | 
					 | 
				
			||||||
     Commons as essentially the equivalent of this Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  d. Copyright and Similar Rights means copyright and/or similar rights
 | 
					 | 
				
			||||||
     closely related to copyright including, without limitation,
 | 
					 | 
				
			||||||
     performance, broadcast, sound recording, and Sui Generis Database
 | 
					 | 
				
			||||||
     Rights, without regard to how the rights are labeled or
 | 
					 | 
				
			||||||
     categorized. For purposes of this Public License, the rights
 | 
					 | 
				
			||||||
     specified in Section 2(b)(1)-(2) are not Copyright and Similar
 | 
					 | 
				
			||||||
     Rights.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  e. Effective Technological Measures means those measures that, in the
 | 
					 | 
				
			||||||
     absence of proper authority, may not be circumvented under laws
 | 
					 | 
				
			||||||
     fulfilling obligations under Article 11 of the WIPO Copyright
 | 
					 | 
				
			||||||
     Treaty adopted on December 20, 1996, and/or similar international
 | 
					 | 
				
			||||||
     agreements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  f. Exceptions and Limitations means fair use, fair dealing, and/or
 | 
					 | 
				
			||||||
     any other exception or limitation to Copyright and Similar Rights
 | 
					 | 
				
			||||||
     that applies to Your use of the Licensed Material.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  g. License Elements means the license attributes listed in the name
 | 
					 | 
				
			||||||
     of a Creative Commons Public License. The License Elements of this
 | 
					 | 
				
			||||||
     Public License are Attribution and ShareAlike.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  h. Licensed Material means the artistic or literary work, database,
 | 
					 | 
				
			||||||
     or other material to which the Licensor applied this Public
 | 
					 | 
				
			||||||
     License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  i. Licensed Rights means the rights granted to You subject to the
 | 
					 | 
				
			||||||
     terms and conditions of this Public License, which are limited to
 | 
					 | 
				
			||||||
     all Copyright and Similar Rights that apply to Your use of the
 | 
					 | 
				
			||||||
     Licensed Material and that the Licensor has authority to license.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  j. Licensor means the individual(s) or entity(ies) granting rights
 | 
					 | 
				
			||||||
     under this Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  k. Share means to provide material to the public by any means or
 | 
					 | 
				
			||||||
     process that requires permission under the Licensed Rights, such
 | 
					 | 
				
			||||||
     as reproduction, public display, public performance, distribution,
 | 
					 | 
				
			||||||
     dissemination, communication, or importation, and to make material
 | 
					 | 
				
			||||||
     available to the public including in ways that members of the
 | 
					 | 
				
			||||||
     public may access the material from a place and at a time
 | 
					 | 
				
			||||||
     individually chosen by them.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  l. Sui Generis Database Rights means rights other than copyright
 | 
					 | 
				
			||||||
     resulting from Directive 96/9/EC of the European Parliament and of
 | 
					 | 
				
			||||||
     the Council of 11 March 1996 on the legal protection of databases,
 | 
					 | 
				
			||||||
     as amended and/or succeeded, as well as other essentially
 | 
					 | 
				
			||||||
     equivalent rights anywhere in the world.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  m. You means the individual or entity exercising the Licensed Rights
 | 
					 | 
				
			||||||
     under this Public License. Your has a corresponding meaning.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Section 2 -- Scope.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  a. License grant.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       1. Subject to the terms and conditions of this Public License,
 | 
					 | 
				
			||||||
          the Licensor hereby grants You a worldwide, royalty-free,
 | 
					 | 
				
			||||||
          non-sublicensable, non-exclusive, irrevocable license to
 | 
					 | 
				
			||||||
          exercise the Licensed Rights in the Licensed Material to:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            a. reproduce and Share the Licensed Material, in whole or
 | 
					 | 
				
			||||||
               in part; and
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            b. produce, reproduce, and Share Adapted Material.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       2. Exceptions and Limitations. For the avoidance of doubt, where
 | 
					 | 
				
			||||||
          Exceptions and Limitations apply to Your use, this Public
 | 
					 | 
				
			||||||
          License does not apply, and You do not need to comply with
 | 
					 | 
				
			||||||
          its terms and conditions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       3. Term. The term of this Public License is specified in Section
 | 
					 | 
				
			||||||
          6(a).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       4. Media and formats; technical modifications allowed. The
 | 
					 | 
				
			||||||
          Licensor authorizes You to exercise the Licensed Rights in
 | 
					 | 
				
			||||||
          all media and formats whether now known or hereafter created,
 | 
					 | 
				
			||||||
          and to make technical modifications necessary to do so. The
 | 
					 | 
				
			||||||
          Licensor waives and/or agrees not to assert any right or
 | 
					 | 
				
			||||||
          authority to forbid You from making technical modifications
 | 
					 | 
				
			||||||
          necessary to exercise the Licensed Rights, including
 | 
					 | 
				
			||||||
          technical modifications necessary to circumvent Effective
 | 
					 | 
				
			||||||
          Technological Measures. For purposes of this Public License,
 | 
					 | 
				
			||||||
          simply making modifications authorized by this Section 2(a)
 | 
					 | 
				
			||||||
          (4) never produces Adapted Material.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       5. Downstream recipients.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            a. Offer from the Licensor -- Licensed Material. Every
 | 
					 | 
				
			||||||
               recipient of the Licensed Material automatically
 | 
					 | 
				
			||||||
               receives an offer from the Licensor to exercise the
 | 
					 | 
				
			||||||
               Licensed Rights under the terms and conditions of this
 | 
					 | 
				
			||||||
               Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            b. Additional offer from the Licensor -- Adapted Material.
 | 
					 | 
				
			||||||
               Every recipient of Adapted Material from You
 | 
					 | 
				
			||||||
               automatically receives an offer from the Licensor to
 | 
					 | 
				
			||||||
               exercise the Licensed Rights in the Adapted Material
 | 
					 | 
				
			||||||
               under the conditions of the Adapter's License You apply.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            c. No downstream restrictions. You may not offer or impose
 | 
					 | 
				
			||||||
               any additional or different terms or conditions on, or
 | 
					 | 
				
			||||||
               apply any Effective Technological Measures to, the
 | 
					 | 
				
			||||||
               Licensed Material if doing so restricts exercise of the
 | 
					 | 
				
			||||||
               Licensed Rights by any recipient of the Licensed
 | 
					 | 
				
			||||||
               Material.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       6. No endorsement. Nothing in this Public License constitutes or
 | 
					 | 
				
			||||||
          may be construed as permission to assert or imply that You
 | 
					 | 
				
			||||||
          are, or that Your use of the Licensed Material is, connected
 | 
					 | 
				
			||||||
          with, or sponsored, endorsed, or granted official status by,
 | 
					 | 
				
			||||||
          the Licensor or others designated to receive attribution as
 | 
					 | 
				
			||||||
          provided in Section 3(a)(1)(A)(i).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  b. Other rights.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       1. Moral rights, such as the right of integrity, are not
 | 
					 | 
				
			||||||
          licensed under this Public License, nor are publicity,
 | 
					 | 
				
			||||||
          privacy, and/or other similar personality rights; however, to
 | 
					 | 
				
			||||||
          the extent possible, the Licensor waives and/or agrees not to
 | 
					 | 
				
			||||||
          assert any such rights held by the Licensor to the limited
 | 
					 | 
				
			||||||
          extent necessary to allow You to exercise the Licensed
 | 
					 | 
				
			||||||
          Rights, but not otherwise.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       2. Patent and trademark rights are not licensed under this
 | 
					 | 
				
			||||||
          Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       3. To the extent possible, the Licensor waives any right to
 | 
					 | 
				
			||||||
          collect royalties from You for the exercise of the Licensed
 | 
					 | 
				
			||||||
          Rights, whether directly or through a collecting society
 | 
					 | 
				
			||||||
          under any voluntary or waivable statutory or compulsory
 | 
					 | 
				
			||||||
          licensing scheme. In all other cases the Licensor expressly
 | 
					 | 
				
			||||||
          reserves any right to collect such royalties.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Section 3 -- License Conditions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Your exercise of the Licensed Rights is expressly made subject to the
 | 
					 | 
				
			||||||
following conditions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  a. Attribution.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       1. If You Share the Licensed Material (including in modified
 | 
					 | 
				
			||||||
          form), You must:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            a. retain the following if it is supplied by the Licensor
 | 
					 | 
				
			||||||
               with the Licensed Material:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                 i. identification of the creator(s) of the Licensed
 | 
					 | 
				
			||||||
                    Material and any others designated to receive
 | 
					 | 
				
			||||||
                    attribution, in any reasonable manner requested by
 | 
					 | 
				
			||||||
                    the Licensor (including by pseudonym if
 | 
					 | 
				
			||||||
                    designated);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ii. a copyright notice;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
               iii. a notice that refers to this Public License;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                iv. a notice that refers to the disclaimer of
 | 
					 | 
				
			||||||
                    warranties;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                 v. a URI or hyperlink to the Licensed Material to the
 | 
					 | 
				
			||||||
                    extent reasonably practicable;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            b. indicate if You modified the Licensed Material and
 | 
					 | 
				
			||||||
               retain an indication of any previous modifications; and
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            c. indicate the Licensed Material is licensed under this
 | 
					 | 
				
			||||||
               Public License, and include the text of, or the URI or
 | 
					 | 
				
			||||||
               hyperlink to, this Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       2. You may satisfy the conditions in Section 3(a)(1) in any
 | 
					 | 
				
			||||||
          reasonable manner based on the medium, means, and context in
 | 
					 | 
				
			||||||
          which You Share the Licensed Material. For example, it may be
 | 
					 | 
				
			||||||
          reasonable to satisfy the conditions by providing a URI or
 | 
					 | 
				
			||||||
          hyperlink to a resource that includes the required
 | 
					 | 
				
			||||||
          information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       3. If requested by the Licensor, You must remove any of the
 | 
					 | 
				
			||||||
          information required by Section 3(a)(1)(A) to the extent
 | 
					 | 
				
			||||||
          reasonably practicable.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  b. ShareAlike.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     In addition to the conditions in Section 3(a), if You Share
 | 
					 | 
				
			||||||
     Adapted Material You produce, the following conditions also apply.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       1. The Adapter's License You apply must be a Creative Commons
 | 
					 | 
				
			||||||
          license with the same License Elements, this version or
 | 
					 | 
				
			||||||
          later, or a BY-SA Compatible License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       2. You must include the text of, or the URI or hyperlink to, the
 | 
					 | 
				
			||||||
          Adapter's License You apply. You may satisfy this condition
 | 
					 | 
				
			||||||
          in any reasonable manner based on the medium, means, and
 | 
					 | 
				
			||||||
          context in which You Share Adapted Material.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       3. You may not offer or impose any additional or different terms
 | 
					 | 
				
			||||||
          or conditions on, or apply any Effective Technological
 | 
					 | 
				
			||||||
          Measures to, Adapted Material that restrict exercise of the
 | 
					 | 
				
			||||||
          rights granted under the Adapter's License You apply.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Section 4 -- Sui Generis Database Rights.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Where the Licensed Rights include Sui Generis Database Rights that
 | 
					 | 
				
			||||||
apply to Your use of the Licensed Material:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  a. for the avoidance of doubt, Section 2(a)(1) grants You the right
 | 
					 | 
				
			||||||
     to extract, reuse, reproduce, and Share all or a substantial
 | 
					 | 
				
			||||||
     portion of the contents of the database;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  b. if You include all or a substantial portion of the database
 | 
					 | 
				
			||||||
     contents in a database in which You have Sui Generis Database
 | 
					 | 
				
			||||||
     Rights, then the database in which You have Sui Generis Database
 | 
					 | 
				
			||||||
     Rights (but not its individual contents) is Adapted Material,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     including for purposes of Section 3(b); and
 | 
					 | 
				
			||||||
  c. You must comply with the conditions in Section 3(a) if You Share
 | 
					 | 
				
			||||||
     all or a substantial portion of the contents of the database.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For the avoidance of doubt, this Section 4 supplements and does not
 | 
					 | 
				
			||||||
replace Your obligations under this Public License where the Licensed
 | 
					 | 
				
			||||||
Rights include other Copyright and Similar Rights.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
 | 
					 | 
				
			||||||
     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
 | 
					 | 
				
			||||||
     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
 | 
					 | 
				
			||||||
     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
 | 
					 | 
				
			||||||
     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
 | 
					 | 
				
			||||||
     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
 | 
					 | 
				
			||||||
     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
 | 
					 | 
				
			||||||
     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
 | 
					 | 
				
			||||||
     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
 | 
					 | 
				
			||||||
     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
 | 
					 | 
				
			||||||
     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
 | 
					 | 
				
			||||||
     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
 | 
					 | 
				
			||||||
     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
 | 
					 | 
				
			||||||
     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
 | 
					 | 
				
			||||||
     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
 | 
					 | 
				
			||||||
     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
 | 
					 | 
				
			||||||
     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
 | 
					 | 
				
			||||||
     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  c. The disclaimer of warranties and limitation of liability provided
 | 
					 | 
				
			||||||
     above shall be interpreted in a manner that, to the extent
 | 
					 | 
				
			||||||
     possible, most closely approximates an absolute disclaimer and
 | 
					 | 
				
			||||||
     waiver of all liability.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Section 6 -- Term and Termination.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  a. This Public License applies for the term of the Copyright and
 | 
					 | 
				
			||||||
     Similar Rights licensed here. However, if You fail to comply with
 | 
					 | 
				
			||||||
     this Public License, then Your rights under this Public License
 | 
					 | 
				
			||||||
     terminate automatically.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  b. Where Your right to use the Licensed Material has terminated under
 | 
					 | 
				
			||||||
     Section 6(a), it reinstates:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       1. automatically as of the date the violation is cured, provided
 | 
					 | 
				
			||||||
          it is cured within 30 days of Your discovery of the
 | 
					 | 
				
			||||||
          violation; or
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       2. upon express reinstatement by the Licensor.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     For the avoidance of doubt, this Section 6(b) does not affect any
 | 
					 | 
				
			||||||
     right the Licensor may have to seek remedies for Your violations
 | 
					 | 
				
			||||||
     of this Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  c. For the avoidance of doubt, the Licensor may also offer the
 | 
					 | 
				
			||||||
     Licensed Material under separate terms or conditions or stop
 | 
					 | 
				
			||||||
     distributing the Licensed Material at any time; however, doing so
 | 
					 | 
				
			||||||
     will not terminate this Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
 | 
					 | 
				
			||||||
     License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Section 7 -- Other Terms and Conditions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  a. The Licensor shall not be bound by any additional or different
 | 
					 | 
				
			||||||
     terms or conditions communicated by You unless expressly agreed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  b. Any arrangements, understandings, or agreements regarding the
 | 
					 | 
				
			||||||
     Licensed Material not stated herein are separate from and
 | 
					 | 
				
			||||||
     independent of the terms and conditions of this Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Section 8 -- Interpretation.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  a. For the avoidance of doubt, this Public License does not, and
 | 
					 | 
				
			||||||
     shall not be interpreted to, reduce, limit, restrict, or impose
 | 
					 | 
				
			||||||
     conditions on any use of the Licensed Material that could lawfully
 | 
					 | 
				
			||||||
     be made without permission under this Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  b. To the extent possible, if any provision of this Public License is
 | 
					 | 
				
			||||||
     deemed unenforceable, it shall be automatically reformed to the
 | 
					 | 
				
			||||||
     minimum extent necessary to make it enforceable. If the provision
 | 
					 | 
				
			||||||
     cannot be reformed, it shall be severed from this Public License
 | 
					 | 
				
			||||||
     without affecting the enforceability of the remaining terms and
 | 
					 | 
				
			||||||
     conditions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  c. No term or condition of this Public License will be waived and no
 | 
					 | 
				
			||||||
     failure to comply consented to unless expressly agreed to by the
 | 
					 | 
				
			||||||
     Licensor.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  d. Nothing in this Public License constitutes or may be interpreted
 | 
					 | 
				
			||||||
     as a limitation upon, or waiver of, any privileges and immunities
 | 
					 | 
				
			||||||
     that apply to the Licensor or You, including from the legal
 | 
					 | 
				
			||||||
     processes of any jurisdiction or authority.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=======================================================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Creative Commons is not a party to its public
 | 
					 | 
				
			||||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
 | 
					 | 
				
			||||||
its public licenses to material it publishes and in those instances
 | 
					 | 
				
			||||||
will be considered the “Licensor.” The text of the Creative Commons
 | 
					 | 
				
			||||||
public licenses is dedicated to the public domain under the CC0 Public
 | 
					 | 
				
			||||||
Domain Dedication. Except for the limited purpose of indicating that
 | 
					 | 
				
			||||||
material is shared under a Creative Commons public license or as
 | 
					 | 
				
			||||||
otherwise permitted by the Creative Commons policies published at
 | 
					 | 
				
			||||||
creativecommons.org/policies, Creative Commons does not authorize the
 | 
					 | 
				
			||||||
use of the trademark "Creative Commons" or any other trademark or logo
 | 
					 | 
				
			||||||
of Creative Commons without its prior written consent including,
 | 
					 | 
				
			||||||
without limitation, in connection with any unauthorized modifications
 | 
					 | 
				
			||||||
to any of its public licenses or any other arrangements,
 | 
					 | 
				
			||||||
understandings, or agreements concerning use of licensed material. For
 | 
					 | 
				
			||||||
the avoidance of doubt, this paragraph does not form part of the
 | 
					 | 
				
			||||||
public licenses.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Creative Commons may be contacted at creativecommons.org.
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								README
									
									
									
									
									
								
							
							
						
						@@ -22,7 +22,7 @@ that is necessary for them to spawn on, so they won't grow if placed on e.g.
 | 
				
			|||||||
cobble or homedecor flower pot, etc.  This doesn't affect wall-climbing poison
 | 
					cobble or homedecor flower pot, etc.  This doesn't affect wall-climbing poison
 | 
				
			||||||
ivy, since it uses a different growth pattern.
 | 
					ivy, since it uses a different growth pattern.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
All plants use multiple controls provided by biome_lib, to keep where they
 | 
					All plants use multiple controls provided by plants_lib, to keep where they
 | 
				
			||||||
grow under control - no more random spread of plants!  In addition, the density
 | 
					grow under control - no more random spread of plants!  In addition, the density
 | 
				
			||||||
of the plants in any region they appear in has been fixed and brought under
 | 
					of the plants in any region they appear in has been fixed and brought under
 | 
				
			||||||
control.
 | 
					control.
 | 
				
			||||||
@@ -47,7 +47,7 @@ either as previously supplied with this modpack, or in its standalone form,
 | 
				
			|||||||
you'll want to delete the "junglegrass" directory from this modpack to get rid
 | 
					you'll want to delete the "junglegrass" directory from this modpack to get rid
 | 
				
			||||||
of the aliases-to-air that it supplies.
 | 
					of the aliases-to-air that it supplies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Software Requirements: This mod requires Minetest 0.4.11 or later.  It is 
 | 
					Software Requirements: This mod requires Minetest 0.4.9 or later.  It is 
 | 
				
			||||||
unlikely to work with old versions.
 | 
					unlikely to work with old versions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
------------------------------------------------------------------------------
 | 
					------------------------------------------------------------------------------
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								along_shore/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					default
 | 
				
			||||||
 | 
					plants_lib
 | 
				
			||||||
 | 
					flowers_plus?
 | 
				
			||||||
							
								
								
									
										9
									
								
								along_shore/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					-----------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					local title		= "Along the Shore"
 | 
				
			||||||
 | 
					local version 	= "0.0.4"
 | 
				
			||||||
 | 
					local mname		= "along_shore"
 | 
				
			||||||
 | 
					-----------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-----------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
 | 
				
			||||||
 | 
					-----------------------------------------------------------------------------------------------
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/along_shore_seaweed_1Darker.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 377 B  | 
							
								
								
									
										30
									
								
								along_shore/textures/credit_textures.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					-------------------------------------------------------------
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/LillyPad3x16.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 589 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/MultiLilly16x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 462 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_empty.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 153 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_lilypads_1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 499 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_lilypads_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 568 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_lilypads_3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 509 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_lilypads_4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 347 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_pondscum_1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 703 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_seaweed_1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 358 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_seaweed_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 364 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_seaweed_3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 383 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/along_shore_seaweed_4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 301 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/flowers_seaweed.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 358 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/flowers_waterlily.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 491 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/flowers_waterlily_22.5.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 519 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/flowers_waterlily_45.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 507 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/flowers_waterlily_67.5.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 512 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/lillyPad5x16.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 460 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/lillypad3Flower16x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 556 B  | 
							
								
								
									
										
											BIN
										
									
								
								along_shore/textures/old/pondscum16xc.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 703 B  | 
							
								
								
									
										2
									
								
								bushes/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					default
 | 
				
			||||||
 | 
					plants_lib
 | 
				
			||||||
							
								
								
									
										341
									
								
								bushes/init.lua
									
									
									
									
									
								
							
							
						
						@@ -1,49 +1,44 @@
 | 
				
			|||||||
-- Bushes Mod by Mossmanikin, Evergreen, & Neuromancer
 | 
					-- Bushes Mod by Mossmanikin, Evergreen, & Neuromancer
 | 
				
			||||||
-- The initial code for this was taken from Mossmanikin's Grasses Mod,
 | 
					-- The initial code for this was taken from Mossmanikin's Grasses Mod, then heavilly modified by Neuromancer for this mod.
 | 
				
			||||||
-- then heavilly modified by Neuromancer for this mod.
 | 
					 | 
				
			||||||
-- Mossmanikin also greatly helped with providing samples for coding.
 | 
					-- Mossmanikin also greatly helped with providing samples for coding.
 | 
				
			||||||
-- bush leaf textures are from VannessaE's moretrees mod.
 | 
					-- bush leaf textures are cc-by-sa 3.0.  from VannessaE's moretrees mod.  (Leaf texture created by RealBadAngel or VanessaE)
 | 
				
			||||||
-- (Leaf texture created by RealBadAngel or VanessaE)
 | 
					 | 
				
			||||||
-- Branch textures created by Neuromancer.
 | 
					-- Branch textures created by Neuromancer.
 | 
				
			||||||
 | 
					-- Licence for Code and Non-Bush leaf code is WTFPL.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  abstract_bushes = {} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- support for i18n
 | 
					  minetest.register_node("bushes:youngtree2_bottom", {
 | 
				
			||||||
local S = minetest.get_translator("bushes")
 | 
						description = "Young Tree 2 (bottom)", 
 | 
				
			||||||
 | 
					 drawtype="nodebox",
 | 
				
			||||||
local bush_rarity = minetest.settings:get("bushes.bush_rarity") or 0.008
 | 
					 tiles = {"bushes_youngtree2trunk.png"},
 | 
				
			||||||
local youngtree_rarity = minetest.settings:get("youngtree.bush_rarity") or 0.006
 | 
					 	inventory_image = "bushes_youngtree2trunk_inv.png",
 | 
				
			||||||
 | 
						wield_image = "bushes_youngtree2trunk_inv.png", 
 | 
				
			||||||
minetest.register_node("bushes:youngtree2_bottom", {
 | 
					paramtype = "light",
 | 
				
			||||||
	description = S("Young Tree 2 (bottom)"),
 | 
					 | 
				
			||||||
	drawtype="nodebox",
 | 
					 | 
				
			||||||
	tiles = {"bushes_youngtree2trunk.png"},
 | 
					 | 
				
			||||||
	inventory_image = "bushes_youngtree2trunk_inv.png",
 | 
					 | 
				
			||||||
	wield_image = "bushes_youngtree2trunk_inv.png",
 | 
					 | 
				
			||||||
	paramtype = "light",
 | 
					 | 
				
			||||||
	walkable = false,
 | 
						walkable = false,
 | 
				
			||||||
	is_ground_content = true,
 | 
						is_ground_content = true,
 | 
				
			||||||
	node_box = {
 | 
					node_box = {
 | 
				
			||||||
		type = "fixed",
 | 
						type = "fixed",
 | 
				
			||||||
		fixed = {
 | 
						fixed = {
 | 
				
			||||||
			{-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
 | 
							--{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,attached_node=1},
 | 
					},
 | 
				
			||||||
 | 
						groups = {snappy=3,flammable=2},
 | 
				
			||||||
	sounds = default.node_sound_leaves_defaults(),
 | 
						sounds = default.node_sound_leaves_defaults(),
 | 
				
			||||||
	drop = 'default:stick'
 | 
						drop = 'default:stick'
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
local BushBranchCenter = { {1,1}, {3,2} }
 | 
					  local BushBranchCenter 			= { {1,1}, {3,2} }
 | 
				
			||||||
for i in pairs(BushBranchCenter) do
 | 
					for i in pairs(BushBranchCenter) do
 | 
				
			||||||
	local Num = BushBranchCenter[i][1]
 | 
						local Num 		= BushBranchCenter[i][1]
 | 
				
			||||||
	local TexNum = BushBranchCenter[i][2]
 | 
						local TexNum 	= BushBranchCenter[i][2]
 | 
				
			||||||
	minetest.register_node("bushes:bushbranches"..Num, {
 | 
						minetest.register_node("bushes:bushbranches"..Num, {
 | 
				
			||||||
		description = S("Bush Branches @1", Num),
 | 
							description = "Bush Branches "..Num,
 | 
				
			||||||
		drawtype = "nodebox",
 | 
							drawtype = "nodebox",
 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
			"bushes_leaves_"..TexNum..".png",
 | 
								"bushes_leaves_"..TexNum..".png",
 | 
				
			||||||
			"bushes_branches_center_"..TexNum..".png"
 | 
								"bushes_branches_center_"..TexNum..".png"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		use_texture_alpha = "clip",
 | 
					 | 
				
			||||||
		node_box = {
 | 
							node_box = {
 | 
				
			||||||
			type = "fixed",
 | 
								type = "fixed",
 | 
				
			||||||
			fixed = {
 | 
								fixed = {
 | 
				
			||||||
@@ -57,43 +52,41 @@ for i in pairs(BushBranchCenter) do
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		inventory_image = "bushes_branches_center_"..TexNum..".png",
 | 
							inventory_image = "bushes_branches_center_"..TexNum..".png",
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
								paramtype2 = "facedir",
 | 
				
			||||||
		sunlight_propagates = true,
 | 
									sunlight_propagates = true,
 | 
				
			||||||
		groups = {
 | 
							groups = {
 | 
				
			||||||
		--	tree=1, -- MM: disabled because some recipes use group:tree for trunks
 | 
							--	tree=1, -- MM: disabled because some recipes use group:tree for trunks
 | 
				
			||||||
			snappy=3,
 | 
								snappy=3, 
 | 
				
			||||||
			flammable=2,
 | 
								flammable=2, 
 | 
				
			||||||
			leaves=1,
 | 
								leaves=1
 | 
				
			||||||
			attached_node=1
 | 
					 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		sounds = default.node_sound_leaves_defaults(),
 | 
							sounds = default.node_sound_leaves_defaults(),
 | 
				
			||||||
		drop = 'default:stick 4'
 | 
							drop = 'default:stick 4'
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local BushBranchSide = { {2,1}, {4,2} }
 | 
					local BushBranchSide 			= { {2,1}, {4,2} }
 | 
				
			||||||
for i in pairs(BushBranchSide) do
 | 
					for i in pairs(BushBranchSide) do
 | 
				
			||||||
	local Num = BushBranchSide[i][1]
 | 
						local Num 		= BushBranchSide[i][1]
 | 
				
			||||||
	local TexNum = BushBranchSide[i][2]
 | 
						local TexNum 	= BushBranchSide[i][2]
 | 
				
			||||||
	minetest.register_node("bushes:bushbranches"..Num, {
 | 
						minetest.register_node("bushes:bushbranches"..Num, {
 | 
				
			||||||
		description = S("Bush Branches @1", Num),
 | 
							description = "Bush Branches "..Num,
 | 
				
			||||||
		drawtype = "nodebox",
 | 
							drawtype = "nodebox",
 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
--[[top]]	"bushes_leaves_"..TexNum..".png",
 | 
					--[[top]] 	"bushes_leaves_"..TexNum..".png",
 | 
				
			||||||
--[[bottom]]"bushes_branches_center_"..TexNum..".png",
 | 
					--[[bottom]]"bushes_branches_center_"..TexNum..".png",
 | 
				
			||||||
--[[right]]	"bushes_branches_left_"..TexNum..".png",
 | 
					--[[right]]	"bushes_branches_left_"..TexNum..".png",
 | 
				
			||||||
--[[left]]	"bushes_branches_right_"..TexNum..".png", -- MM: We could also mirror the previous here,
 | 
					--[[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"
 | 
					--[[front]]	"bushes_branches_right_"..TexNum..".png"  
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		use_texture_alpha = "clip",
 | 
					 | 
				
			||||||
		node_box = {
 | 
							node_box = {
 | 
				
			||||||
			type = "fixed",
 | 
								type = "fixed",
 | 
				
			||||||
			fixed = {
 | 
								fixed = {
 | 
				
			||||||
--				{ left	 , bottom	, front, right	 , top		 , back		}
 | 
					--				{ left	 , bottom  , front, right   , top     , back    }
 | 
				
			||||||
				{0.137748,-0.491944, 0.5	,-0.125000,-0.179444,-0.007790}, --NodeBox 1
 | 
									{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.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
 | 
									{0.500000, 0.125000, 0.5  ,-0.500000, 0.500000,-0.500000}, --NodeBox 3
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		selection_box = {
 | 
							selection_box = {
 | 
				
			||||||
@@ -102,45 +95,76 @@ for i in pairs(BushBranchSide) do
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		inventory_image = "bushes_branches_right_"..TexNum..".png",
 | 
							inventory_image = "bushes_branches_right_"..TexNum..".png",
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
								paramtype2 = "facedir",
 | 
				
			||||||
		sunlight_propagates = true,
 | 
									sunlight_propagates = true,
 | 
				
			||||||
		groups = {
 | 
							groups = {
 | 
				
			||||||
		--	tree=1, -- MM: disabled because some recipes use group:tree for trunks
 | 
							--	tree=1, -- MM: disabled because some recipes use group:tree for trunks
 | 
				
			||||||
			snappy=3,
 | 
								snappy=3, 
 | 
				
			||||||
			flammable=2,
 | 
								flammable=2, 
 | 
				
			||||||
			leaves=1,
 | 
								leaves=1
 | 
				
			||||||
			attached_node=1
 | 
					 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		sounds = default.node_sound_leaves_defaults(),
 | 
							sounds = default.node_sound_leaves_defaults(),
 | 
				
			||||||
		drop = 'default:stick 3'
 | 
							drop = 'default:stick 3'
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local BushLeafNode = { {1}, {2}}
 | 
					local BushLeafNode 			= { {1}, {2}}
 | 
				
			||||||
for i in pairs(BushLeafNode) do
 | 
					for i in pairs(BushLeafNode) do
 | 
				
			||||||
	local Num = BushLeafNode[i][1]
 | 
						local Num = BushLeafNode[i][1]	
 | 
				
			||||||
	minetest.register_node("bushes:BushLeaves"..Num, {
 | 
						minetest.register_node("bushes:BushLeaves"..Num, {
 | 
				
			||||||
		description = S("Bush Leaves @1", Num),
 | 
							description = "Bush Leaves "..Num,
 | 
				
			||||||
		drawtype = "allfaces_optional",
 | 
							drawtype = "allfaces_optional",
 | 
				
			||||||
		tiles = {"bushes_leaves_"..Num..".png"},
 | 
							tiles = {"bushes_leaves_"..Num..".png"},
 | 
				
			||||||
		use_texture_alpha = "clip",
 | 
					 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		groups = {	-- MM: Should we add leafdecay?
 | 
							groups = {	-- MM: Should we add leafdecay?	
 | 
				
			||||||
			snappy=3,
 | 
								snappy=3,
 | 
				
			||||||
			flammable=2,
 | 
								flammable=2,
 | 
				
			||||||
			attached_node=1,
 | 
								attached_node=1
 | 
				
			||||||
			leaves=1
 | 
					 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		sounds = default.node_sound_leaves_defaults(),
 | 
							sounds = default.node_sound_leaves_defaults(),    
 | 
				
			||||||
	})
 | 
						})	
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function grow_bush_node(pos, dir, leaf_type)
 | 
					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 right_here = {x=pos.x, y=pos.y+1, z=pos.z}
 | 
						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 above_right_here = {x=pos.x, y=pos.y+2, z=pos.z}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	local bush_branch_type = 2
 | 
						--local bush_branch_type = math.random(1,3)
 | 
				
			||||||
 | 
						--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
 | 
						if dir ~= 5 and leaf_type == 1 then
 | 
				
			||||||
		bush_branch_type = 2
 | 
							bush_branch_type = 2
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -155,163 +179,80 @@ local function grow_bush_node(pos, dir, leaf_type)
 | 
				
			|||||||
		bush_branch_type = 3
 | 
							bush_branch_type = 3
 | 
				
			||||||
		dir = 1
 | 
							dir = 1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	local nodename = minetest.get_node(right_here).name
 | 
						if minetest.get_node(right_here).name == "air"  -- instead of check_air = true,
 | 
				
			||||||
	if nodename == "air" or nodename == "default:junglegrass" then -- instead of check_air = true,
 | 
						or minetest.get_node(right_here).name == "default:junglegrass" then
 | 
				
			||||||
		minetest.swap_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir})
 | 
							minetest.set_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir})
 | 
				
			||||||
		minetest.swap_node(above_right_here, {name="bushes:BushLeaves"..leaf_type})
 | 
											--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")")
 | 
				
			||||||
 | 
							minetest.set_node(above_right_here, {name="bushes:BushLeaves"..leaf_type})
 | 
				
			||||||
		local chance_of_high_leaves = math.random(1,10)
 | 
							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}
 | 
								local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
 | 
				
			||||||
			minetest.swap_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type})
 | 
												--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")")
 | 
				
			||||||
 | 
								minetest.set_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type})
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						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"})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local leaf_type = math.random(1,2)
 | 
					plantslib:register_generate_plant({
 | 
				
			||||||
	local bush_side_height = math.random(0,1)
 | 
					    surface = {
 | 
				
			||||||
 | 
							"default:dirt_with_grass", 
 | 
				
			||||||
	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",
 | 
							"stoneage:grass_with_silex",
 | 
				
			||||||
		"sumpf:peat",
 | 
							"sumpf:peat",
 | 
				
			||||||
		"sumpf:sumpf"
 | 
							"sumpf:sumpf"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	deco_type = "simple",
 | 
					    max_count = 15,  --10,15
 | 
				
			||||||
	flags = "all_floors",
 | 
					    rarity = 101 - 4,  --3,4
 | 
				
			||||||
})
 | 
					    min_elevation = 1, -- above sea level
 | 
				
			||||||
 | 
						plantlife_limit = -0.9,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  abstract_bushes.grow_bush
 | 
				
			||||||
 | 
					)		
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--[[
 | 
					 abstract_bushes.grow_youngtree2 = function(pos)
 | 
				
			||||||
	this is purposefully wrapped in a on mods loaded callback to that it gets the proper ids
 | 
						local height = math.random(4,5)	
 | 
				
			||||||
	if other mods clear the registered decorations
 | 
						abstract_bushes.grow_youngtree_node2(pos,height)
 | 
				
			||||||
]]
 | 
					end
 | 
				
			||||||
local did
 | 
					 | 
				
			||||||
minetest.register_on_mods_loaded(function()
 | 
					 | 
				
			||||||
	did = minetest.get_decoration_id("bushes:bush")
 | 
					 | 
				
			||||||
	minetest.set_gen_notify("decoration", {did})
 | 
					 | 
				
			||||||
end)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_on_generated(function(minp, maxp, blockseed)
 | 
					abstract_bushes.grow_youngtree_node2 = function(pos, height)
 | 
				
			||||||
	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 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 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 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}
 | 
						local three_above_right_here = {x=pos.x, y=pos.y+4, z=pos.z}
 | 
				
			||||||
 | 
						 
 | 
				
			||||||
	local nodename = minetest.get_node(right_here).name
 | 
						if minetest.get_node(right_here).name == "air"  -- instead of check_air = true,
 | 
				
			||||||
	if nodename == "air" or nodename == "default:junglegrass" then -- instead of check_air = true,
 | 
						or minetest.get_node(right_here).name == "default:junglegrass" then
 | 
				
			||||||
		if height == 4 then
 | 
							if height == 4 then
 | 
				
			||||||
			local two_above_right_here_south = {x=pos.x, y=pos.y+3, z=pos.z-1}
 | 
									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}
 | 
									local three_above_right_here_south = {x=pos.x, y=pos.y+4, z=pos.z-1}
 | 
				
			||||||
 | 
									minetest.set_node(right_here, {name="bushes:youngtree2_bottom"})
 | 
				
			||||||
			minetest.swap_node(right_here, {name="bushes:youngtree2_bottom"})
 | 
									minetest.set_node(above_right_here, {name="bushes:youngtree2_bottom"})
 | 
				
			||||||
			minetest.swap_node(above_right_here, {name="bushes:youngtree2_bottom"})
 | 
									minetest.set_node(two_above_right_here, {name="bushes:bushbranches2"  , param2=2})
 | 
				
			||||||
			minetest.swap_node(two_above_right_here, {name="bushes:bushbranches2"	, param2=2})
 | 
									minetest.set_node(two_above_right_here_south, {name="bushes:bushbranches2"  , param2=0})
 | 
				
			||||||
			minetest.swap_node(two_above_right_here_south, {name="bushes:bushbranches2"	, param2=0})
 | 
									minetest.set_node(three_above_right_here, {name="bushes:BushLeaves1" })
 | 
				
			||||||
			minetest.swap_node(three_above_right_here, {name="bushes:BushLeaves1" })
 | 
									minetest.set_node(three_above_right_here_south, {name="bushes:BushLeaves1" })
 | 
				
			||||||
			minetest.swap_node(three_above_right_here_south, {name="bushes:BushLeaves1" })
 | 
					 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
							 
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function grow_youngtree2(pos)
 | 
					 | 
				
			||||||
	local height = math.random(4,5)
 | 
					 | 
				
			||||||
	grow_youngtree_node2(pos,height)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_decoration({
 | 
					plantslib:register_generate_plant({
 | 
				
			||||||
	name = "bushes:youngtree",
 | 
					    surface = {
 | 
				
			||||||
	decoration = {
 | 
							"default:dirt_with_grass", 
 | 
				
			||||||
		"air"
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	fill_ratio = youngtree_rarity,
 | 
					 | 
				
			||||||
	y_min = 1,
 | 
					 | 
				
			||||||
	y_max = 40,
 | 
					 | 
				
			||||||
	place_on = {
 | 
					 | 
				
			||||||
		"default:dirt_with_grass",
 | 
					 | 
				
			||||||
		"stoneage:grass_with_silex",
 | 
							"stoneage:grass_with_silex",
 | 
				
			||||||
		"sumpf:peat",
 | 
							"sumpf:peat",
 | 
				
			||||||
		"sumpf:sumpf"
 | 
							"sumpf:sumpf"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	deco_type = "simple",
 | 
					    max_count = 55,  --10,15
 | 
				
			||||||
	flags = "all_floors",
 | 
					    rarity = 101 - 4,  --3,4
 | 
				
			||||||
})
 | 
					    min_elevation = 1, -- above sea level
 | 
				
			||||||
 | 
						plantlife_limit = -0.9,
 | 
				
			||||||
--[[
 | 
					  },
 | 
				
			||||||
	this is purposefully wrapped in a on mods loaded callback to that it gets the proper ids
 | 
					  abstract_bushes.grow_youngtree2
 | 
				
			||||||
	if other mods clear the registered decorations
 | 
					)	
 | 
				
			||||||
]]
 | 
						 
 | 
				
			||||||
local did2
 | 
							--http://dev.minetest.net/Node_Drawtypes
 | 
				
			||||||
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)
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
# textdomain: bushes
 | 
					 | 
				
			||||||
Young Tree 2 (bottom)=Strauch 2 (Ansatz)
 | 
					 | 
				
			||||||
Bush Branches @1=Buschäste @1
 | 
					 | 
				
			||||||
Bush Leaves @1=Buschblätter @1
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
# textdomain: bushes
 | 
					 | 
				
			||||||
Young Tree 2 (bottom)=Juna Arbo 2 (malsupro)
 | 
					 | 
				
			||||||
Bush Branches @1=Arbustaj Branĉoj @1
 | 
					 | 
				
			||||||
Bush Leaves @1=Arbustaj Folioj @1
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
# textdomain: bushes
 | 
					 | 
				
			||||||
Young Tree 2 (bottom)=Arbuste 2 (bas)
 | 
					 | 
				
			||||||
Bush Branches @1=Branches de buisson @1
 | 
					 | 
				
			||||||
Bush Leaves @1=Feuilles de buisson @1
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
# textdomain: bushes
 | 
					 | 
				
			||||||
Young Tree 2 (bottom)=
 | 
					 | 
				
			||||||
Bush Branches @1=
 | 
					 | 
				
			||||||
Bush Leaves @1=
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
name = bushes
 | 
					 | 
				
			||||||
title = Bushes
 | 
					 | 
				
			||||||
depends = default
 | 
					 | 
				
			||||||
optional_depends = stoneage, sumpf, ebiomes
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
# 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: 305 B After Width: | Height: | Size: 473 B  | 
| 
		 Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 487 B  | 
| 
		 Before Width: | Height: | Size: 577 B After Width: | Height: | Size: 695 B  | 
| 
		 Before Width: | Height: | Size: 598 B After Width: | Height: | Size: 689 B  | 
| 
		 Before Width: | Height: | Size: 592 B After Width: | Height: | Size: 712 B  | 
| 
		 Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 719 B  | 
| 
		 Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 225 B  | 
| 
		 Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 225 B  | 
| 
		 Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 872 B After Width: | Height: | Size: 918 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BlockBranch1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 90 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BlockBranch1L.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 42 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BlockBranch1R.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 49 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BushBranches1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 60 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BushBranches1sm.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 702 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BushBranches1sm2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 714 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BushBranches1sm3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 536 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BushBranches1sm4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 649 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BushBranchesCenter.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 445 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BushBranchesSide1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 770 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/BushBranchesSide2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 801 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/blank.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 199 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes/textures/old & unused/moretrees_pine_leaves3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 647 B  | 
@@ -1,95 +1,82 @@
 | 
				
			|||||||
-- support for i18n
 | 
					-- Boilerplate to support localized strings if intllib mod is installed.
 | 
				
			||||||
local S = minetest.get_translator("bushes_classic")
 | 
					local S
 | 
				
			||||||
 | 
					if (minetest.get_modpath("intllib")) then
 | 
				
			||||||
 | 
					  dofile(minetest.get_modpath("intllib").."/intllib.lua")
 | 
				
			||||||
 | 
					  S = intllib.Getter(minetest.get_current_modname())
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  S = function ( s ) return s end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Basket
 | 
					-- Basket
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft({
 | 
					minetest.register_craft({
 | 
				
			||||||
	output = "bushes:basket_empty",
 | 
					    output = "bushes:basket_empty",
 | 
				
			||||||
	recipe = {
 | 
					    recipe = {
 | 
				
			||||||
		{ "default:stick", "default:stick", "default:stick" },
 | 
						{ "default:stick", "default:stick", "default:stick" },
 | 
				
			||||||
		{ "", "default:stick", "" },
 | 
						{ "", "default:stick", "" },
 | 
				
			||||||
	},
 | 
					    },
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Sugar
 | 
					-- Sugar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if not minetest.registered_items["farming:sugar"] then
 | 
					minetest.register_craftitem(":bushes:sugar", {
 | 
				
			||||||
	minetest.register_craftitem(":bushes:sugar", {
 | 
					    description = S("Sugar"),
 | 
				
			||||||
		description = S("Sugar"),
 | 
					    inventory_image = "bushes_sugar.png",
 | 
				
			||||||
		inventory_image = "bushes_sugar.png",
 | 
					    on_use = minetest.item_eat(1),
 | 
				
			||||||
		on_use = minetest.item_eat(1),
 | 
						groups = {food_sugar=1}
 | 
				
			||||||
		groups = {food_sugar=1, flammable = 2}
 | 
					})
 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craft({
 | 
					 | 
				
			||||||
		output = "bushes:sugar 1",
 | 
					 | 
				
			||||||
		recipe = {
 | 
					 | 
				
			||||||
			{ "default:papyrus", "default:papyrus" },
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
	minetest.register_alias("bushes:sugar", "farming:sugar")
 | 
					 | 
				
			||||||
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 = groups,
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
					    output = "bushes:sugar 1",
 | 
				
			||||||
 | 
					    recipe = {
 | 
				
			||||||
 | 
						{ "default:papyrus", "default:papyrus" },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for i, berry in ipairs(bushes_classic.bushes) do
 | 
					for i, berry in ipairs(bushes_classic.bushes) do
 | 
				
			||||||
 | 
						local desc = bushes_classic.bushes_descriptions[i]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local groups = {food_berry = 1, flammable = 2}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if berry ~= "mixed_berry" then
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		groups["food_" .. berry] = 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		-- Berry
 | 
					 | 
				
			||||||
		minetest.register_craftitem(":bushes:"..berry, {
 | 
					 | 
				
			||||||
			description = bushes_classic.bushes_descriptions[i][1],
 | 
					 | 
				
			||||||
			inventory_image = "bushes_"..berry..".png",
 | 
					 | 
				
			||||||
			groups = groups,
 | 
					 | 
				
			||||||
			on_use = minetest.item_eat(1),
 | 
					 | 
				
			||||||
		})
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	-- Raw pie
 | 
					 | 
				
			||||||
	minetest.register_craftitem(":bushes:"..berry.."_pie_raw", {
 | 
						minetest.register_craftitem(":bushes:"..berry.."_pie_raw", {
 | 
				
			||||||
		description = bushes_classic.bushes_descriptions[i][2],
 | 
							description = S("Raw "..desc.." pie"),
 | 
				
			||||||
		inventory_image = "bushes_"..berry.."_pie_raw.png",
 | 
							inventory_image = "bushes_"..berry.."_pie_raw.png",
 | 
				
			||||||
		on_use = minetest.item_eat(4),
 | 
							on_use = minetest.item_eat(4),
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if berry ~= "mixed_berry" then
 | 
						if berry ~= "mixed_berry" then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if berry == "strawberry" and minetest.registered_nodes["farming_plus:strawberry"] then
 | 
				
			||||||
 | 
								-- Special case for strawberries, when farming_plus is in use. Use
 | 
				
			||||||
 | 
								-- the item from that mod, but redefine it so it has the right
 | 
				
			||||||
 | 
								-- groups and does't look so ugly!
 | 
				
			||||||
 | 
								minetest.register_craftitem(":farming_plus:strawberry_item", {
 | 
				
			||||||
 | 
									description = S("Strawberry"),
 | 
				
			||||||
 | 
									inventory_image = "bushes_"..berry..".png",
 | 
				
			||||||
 | 
									on_use = minetest.item_eat(2),
 | 
				
			||||||
 | 
									groups = {berry=1, strawberry=1}
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								minetest.register_alias("bushes:strawberry", "farming_plus:strawberry_item")
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								minetest.register_craftitem(":bushes:"..berry, {
 | 
				
			||||||
 | 
									description = desc,
 | 
				
			||||||
 | 
									inventory_image = "bushes_"..berry..".png",
 | 
				
			||||||
 | 
									groups = {berry = 1, [berry] = 1},
 | 
				
			||||||
 | 
									on_use = minetest.item_eat(1),
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
		minetest.register_craft({
 | 
							minetest.register_craft({
 | 
				
			||||||
			output = "bushes:"..berry.."_pie_raw 1",
 | 
								output = "bushes:"..berry.."_pie_raw 1",
 | 
				
			||||||
			recipe = {
 | 
								recipe = {
 | 
				
			||||||
			{ "group:food_sugar", "farming:flour", "group:food_sugar" },
 | 
								{ "group:food_sugar", "farming:flour", "group:food_sugar" },
 | 
				
			||||||
			{ "group:food_"..berry, "group:food_"..berry, "group:food_"..berry },
 | 
								{ "group:"..berry, "group:"..berry, "group:"..berry },
 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		})
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		minetest.register_craft({
 | 
					 | 
				
			||||||
			output = "bushes:mixed_berry_pie_raw 2",
 | 
					 | 
				
			||||||
			recipe = {
 | 
					 | 
				
			||||||
			{ "group:food_sugar", "farming:flour", "group:food_sugar" },
 | 
					 | 
				
			||||||
			{ "group:food_berry", "group:food_berry", "group:food_berry" },
 | 
					 | 
				
			||||||
			{ "group:food_berry", "group:food_berry", "group:food_berry" },
 | 
					 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Cooked pie
 | 
						-- Cooked pie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craftitem(":bushes:"..berry.."_pie_cooked", {
 | 
						minetest.register_craftitem(":bushes:"..berry.."_pie_cooked", {
 | 
				
			||||||
		description = bushes_classic.bushes_descriptions[i][3],
 | 
							description = S("Cooked "..desc.." pie"),
 | 
				
			||||||
		inventory_image = "bushes_"..berry.."_pie_cooked.png",
 | 
							inventory_image = "bushes_"..berry.."_pie_cooked.png",
 | 
				
			||||||
		on_use = minetest.item_eat(6),
 | 
							on_use = minetest.item_eat(6),
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -101,9 +88,10 @@ for i, berry in ipairs(bushes_classic.bushes) do
 | 
				
			|||||||
		cooktime = 30,
 | 
							cooktime = 30,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Slice of pie
 | 
						-- slice of pie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craftitem(":bushes:"..berry.."_pie_slice", {
 | 
						minetest.register_craftitem(":bushes:"..berry.."_pie_slice", {
 | 
				
			||||||
		description = bushes_classic.bushes_descriptions[i][4],
 | 
							description = S("Slice of "..desc.." pie"),
 | 
				
			||||||
		inventory_image = "bushes_"..berry.."_pie_slice.png",
 | 
							inventory_image = "bushes_"..berry.."_pie_slice.png",
 | 
				
			||||||
		on_use = minetest.item_eat(1),
 | 
							on_use = minetest.item_eat(1),
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -116,6 +104,7 @@ for i, berry in ipairs(bushes_classic.bushes) do
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Basket with pies
 | 
						-- Basket with pies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft({
 | 
						minetest.register_craft({
 | 
				
			||||||
		output = "bushes:basket_"..berry.." 1",
 | 
							output = "bushes:basket_"..berry.." 1",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
@@ -124,3 +113,14 @@ for i, berry in ipairs(bushes_classic.bushes) do
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
						output = "bushes:mixed_berry_pie_raw 2",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
						{ "group:food_sugar", "farming:flour", "group:food_sugar" },
 | 
				
			||||||
 | 
						{ "group:berry", "group:berry", "group:berry" },
 | 
				
			||||||
 | 
						{ "group:berry", "group:berry", "group:berry" },
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								bushes_classic/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					plants_lib
 | 
				
			||||||
 | 
					farming?
 | 
				
			||||||
 | 
					farming_plus?
 | 
				
			||||||
@@ -1,13 +1,20 @@
 | 
				
			|||||||
-- Bushes classic mod originally by unknown
 | 
					-- Bushes classic mod originally by unknown
 | 
				
			||||||
-- now maintained by VanessaE
 | 
					-- now maintained by VanessaE
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					-- License:  WTFPL
 | 
				
			||||||
 | 
					-- Boilerplate to support localized strings if intllib mod is installed.
 | 
				
			||||||
 | 
					local S
 | 
				
			||||||
 | 
					if (minetest.get_modpath("intllib")) then
 | 
				
			||||||
 | 
					  dofile(minetest.get_modpath("intllib").."/intllib.lua")
 | 
				
			||||||
 | 
					  S = intllib.Getter(minetest.get_current_modname())
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  S = function ( s ) return s end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bushes_classic = {}
 | 
					bushes_classic = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- support for i18n
 | 
					 | 
				
			||||||
local S = minetest.get_translator("bushes_classic")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bushes_classic.bushes = {
 | 
					bushes_classic.bushes = {
 | 
				
			||||||
	"strawberry",
 | 
					    "strawberry",
 | 
				
			||||||
	"blackberry",
 | 
						"blackberry",
 | 
				
			||||||
	"blueberry",
 | 
						"blueberry",
 | 
				
			||||||
	"raspberry",
 | 
						"raspberry",
 | 
				
			||||||
@@ -16,33 +23,25 @@ bushes_classic.bushes = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bushes_classic.bushes_descriptions = {
 | 
					bushes_classic.bushes_descriptions = {
 | 
				
			||||||
	{S("Strawberry"),  S("Raw Strawberry pie"),  S("Cooked Strawberry pie"),  S("Slice of Strawberry pie"),  S("Basket with Strawberry pies"),  S("Strawberry Bush")},
 | 
					    "Strawberry",
 | 
				
			||||||
	{S("Blackberry"),  S("Raw Blackberry pie"),  S("Cooked Blackberry pie"),  S("Slice of Blackberry pie"),  S("Basket with Blackberry pies"),  S("Blackberry Bush")},
 | 
						"Blackberry",
 | 
				
			||||||
	{S("Blueberry"),   S("Raw Blueberry pie"),   S("Cooked Blueberry pie"),   S("Slice of Blueberry pie"),   S("Basket with Blueberry pies"),   S("Blueberry Bush")},
 | 
						"Blueberry",
 | 
				
			||||||
	{S("Raspberry"),   S("Raw Raspberry pie"),   S("Cooked Raspberry pie"),   S("Slice of Raspberry pie"),   S("Basket with Raspberry pies"),   S("Raspberry Bush")},
 | 
						"Raspberry",
 | 
				
			||||||
	{S("Gooseberry"),  S("Raw Gooseberry pie"),  S("Cooked Gooseberry pie"),  S("Slice of Gooseberry pie"),  S("Basket with Gooseberry pies"),  S("Gooseberry Bush")},
 | 
						"Gooseberry",
 | 
				
			||||||
	{S("Mixed Berry"), S("Raw Mixed Berry pie"), S("Cooked Mixed Berry pie"), S("Slice of Mixed Berry pie"), S("Basket with Mixed Berry pies"), S("Currently fruitless Bush")}
 | 
						"Mixed Berry"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bushes_classic.spawn_list = {}
 | 
					bushes_classic.spawn_list = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local modpath = minetest.get_modpath('bushes_classic')
 | 
					dofile(minetest.get_modpath('bushes_classic') .. '/cooking.lua')
 | 
				
			||||||
dofile(modpath..'/cooking.lua')
 | 
					dofile(minetest.get_modpath('bushes_classic') .. '/nodes.lua')
 | 
				
			||||||
dofile(modpath..'/nodes.lua')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
local spawn_plants = bushes_classic.spawn_list
 | 
					plantslib:spawn_on_surfaces({
 | 
				
			||||||
 | 
						spawn_delay = 3600,
 | 
				
			||||||
local function get_biome_data(pos, perlin_fertile)
 | 
						spawn_plants = bushes_classic.spawn_list,
 | 
				
			||||||
	local fertility = perlin_fertile:get_2d({x=pos.x, y=pos.z})
 | 
						avoid_radius = 10,
 | 
				
			||||||
 | 
						spawn_chance = 100,
 | 
				
			||||||
	local data = minetest.get_biome_data(pos)
 | 
						spawn_surfaces = {
 | 
				
			||||||
	-- 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",
 | 
							"default:dirt_with_grass",
 | 
				
			||||||
		"woodsoils:dirt_with_leaves_1",
 | 
							"woodsoils:dirt_with_leaves_1",
 | 
				
			||||||
		"woodsoils:grass_with_leaves_1",
 | 
							"woodsoils:grass_with_leaves_1",
 | 
				
			||||||
@@ -50,31 +49,16 @@ minetest.register_abm({
 | 
				
			|||||||
		"farming:soil",
 | 
							"farming:soil",
 | 
				
			||||||
		"farming:soil_wet"
 | 
							"farming:soil_wet"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	interval = 3600,
 | 
						avoid_nodes = {"group:bush"},
 | 
				
			||||||
	chance = 100,
 | 
						seed_diff = 545342534, -- chosen by a fair mashing of the keyboard - guaranteed to be random :P
 | 
				
			||||||
	label = "[bushes_classic] spawn bushes",
 | 
						plantlife_limit = -0.1,
 | 
				
			||||||
	min_y = -16,
 | 
						light_min = 10,
 | 
				
			||||||
	max_y = 48,
 | 
						temp_min = 0.15, -- approx 20C
 | 
				
			||||||
	action = function(pos, node)
 | 
						temp_max = -0.15, -- approx 35C
 | 
				
			||||||
		local p_top = {x = pos.x, y = pos.y + 1, z = pos.z}
 | 
						humidity_min = 0, -- 50% RH
 | 
				
			||||||
		local n_top = minetest.get_node_or_nil(p_top)
 | 
						humidity_max = -1, -- 100% RH
 | 
				
			||||||
		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")
 | 
					minetest.register_alias("bushes:basket_pies", "bushes:basket_strawberry")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print(S("[Bushes] Loaded."))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
# 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
 | 
					 | 
				
			||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
# 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
 | 
					 | 
				
			||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
# 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
 | 
					 | 
				
			||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
# 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
 | 
					 | 
				
			||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
# 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
 | 
					 | 
				
			||||||
							
								
								
									
										43
									
								
								bushes_classic/locale/de.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					# Translation by Xanthin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Strawberry = Erdbeere
 | 
				
			||||||
 | 
					Blackberry = Brombeere
 | 
				
			||||||
 | 
					Blueberry = Blaubeere
 | 
				
			||||||
 | 
					Raspberry = Himbeere
 | 
				
			||||||
 | 
					Gooseberry = Stachelbeere
 | 
				
			||||||
 | 
					Mixed Berry = Beerenmix
 | 
				
			||||||
 | 
					Basket with Strawberry Pies = Korb mit Erdbeertorten
 | 
				
			||||||
 | 
					Basket with Blackberry Pies = Korb mit Brombeertorten
 | 
				
			||||||
 | 
					Basket with Blueberry Pies = Korb mit Blaubeertorten
 | 
				
			||||||
 | 
					Basket with Raspberry Pies = Korb mit Himbeertorten
 | 
				
			||||||
 | 
					Basket with Gooseberry Pies = Korb mit Stachelbeertorten
 | 
				
			||||||
 | 
					Basket with Mixed Berry Pies = Korb mit Beerenmixtorten
 | 
				
			||||||
 | 
					currently fruitless = zur Zeit fruechteloser
 | 
				
			||||||
 | 
					Strawberry Bush = Erdbeerbusch
 | 
				
			||||||
 | 
					Blackberry Bush = Brombeerbusch
 | 
				
			||||||
 | 
					Blueberry Bush = Blaubeerbusch
 | 
				
			||||||
 | 
					Raspberry Bush = Himbeerbusch
 | 
				
			||||||
 | 
					Gooseberry Bush = Stachelbeerbusch
 | 
				
			||||||
 | 
					Mixed Berry Bush = Beerenmixbusch
 | 
				
			||||||
 | 
					Basket = Korb
 | 
				
			||||||
 | 
					Sugar = Zucker
 | 
				
			||||||
 | 
					Raw Strawberry pie = Rohe Erdbeertorte
 | 
				
			||||||
 | 
					Raw Blackberry pie = Rohe Brombeertorte
 | 
				
			||||||
 | 
					Raw Blueberry pie = Rohe Blaubeertorte
 | 
				
			||||||
 | 
					Raw Raspberry pie = Rohe Himbeertorte
 | 
				
			||||||
 | 
					Raw Gooseberry pie = Rohe Stachelbeertorte
 | 
				
			||||||
 | 
					Raw Mixed Berry pie = Rohe Beerenmixtorte
 | 
				
			||||||
 | 
					Cooked Strawberry pie = Erdbeertorte
 | 
				
			||||||
 | 
					Cooked Blackberry pie = Brombeertorte
 | 
				
			||||||
 | 
					Cooked Blueberry pie = Blaubeertorte
 | 
				
			||||||
 | 
					Cooked Raspberry pie = Himbeertorte
 | 
				
			||||||
 | 
					Cooked Gooseberry pie = Stachelbeertorte
 | 
				
			||||||
 | 
					Cooked Mixed Berry pie = Beerenmixtorte
 | 
				
			||||||
 | 
					Slice of Strawberry pie = Erdbeertortenstueck
 | 
				
			||||||
 | 
					Slice of Blackberry pie = Brombeertortenstueck
 | 
				
			||||||
 | 
					Slice of Blueberry pie = Blaubeertortenstueck
 | 
				
			||||||
 | 
					Slice of Raspberry pie = Himbeertortenstueck
 | 
				
			||||||
 | 
					Slice of Gooseberry pie = Stachelbeertortenstueck
 | 
				
			||||||
 | 
					Slice of Mixed Berry pie = Beerenmixtortenstueck
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Bushes] Loaded. = [Bushes] Geladen.
 | 
				
			||||||
@@ -1,39 +1,43 @@
 | 
				
			|||||||
# textdomain: bushes_classic
 | 
					# Template
 | 
				
			||||||
Sugar=
 | 
					
 | 
				
			||||||
Strawberry=
 | 
					Strawberry = 
 | 
				
			||||||
Raw Strawberry pie=
 | 
					Blackberry = 
 | 
				
			||||||
Cooked Strawberry pie=
 | 
					Blueberry = 
 | 
				
			||||||
Slice of Strawberry pie=
 | 
					Raspberry = 
 | 
				
			||||||
Basket with Strawberry pies=
 | 
					Gooseberry = 
 | 
				
			||||||
Strawberry Bush=
 | 
					Mixed Berry = 
 | 
				
			||||||
Blackberry=
 | 
					Basket with Strawberry Pies = 
 | 
				
			||||||
Raw Blackberry pie=
 | 
					Basket with Blackberry Pies = 
 | 
				
			||||||
Cooked Blackberry pie=
 | 
					Basket with Blueberry Pies = 
 | 
				
			||||||
Slice of Blackberry pie=
 | 
					Basket with Raspberry Pies = 
 | 
				
			||||||
Basket with Blackberry pies=
 | 
					Basket with Gooseberry Pies = 
 | 
				
			||||||
Blackberry Bush=
 | 
					Basket with Mixed Berry Pies = 
 | 
				
			||||||
Blueberry=
 | 
					currently fruitless = 
 | 
				
			||||||
Raw Blueberry pie=
 | 
					Strawberry Bush = 
 | 
				
			||||||
Cooked Blueberry pie=
 | 
					Blackberry Bush = 
 | 
				
			||||||
Slice of Blueberry pie=
 | 
					Blueberry Bush = 
 | 
				
			||||||
Basket with Blueberry pies=
 | 
					Raspberry Bush = 
 | 
				
			||||||
Blueberry Bush=
 | 
					Gooseberry Bush = 
 | 
				
			||||||
Raspberry=
 | 
					Mixed Berry Bush = 
 | 
				
			||||||
Raw Raspberry pie=
 | 
					Basket = 
 | 
				
			||||||
Cooked Raspberry pie=
 | 
					Sugar = 
 | 
				
			||||||
Slice of Raspberry pie=
 | 
					Raw Strawberry pie = 
 | 
				
			||||||
Basket with Raspberry pies=
 | 
					Raw Blackberry pie = 
 | 
				
			||||||
Raspberry Bush=
 | 
					Raw Blueberry pie = 
 | 
				
			||||||
Gooseberry=
 | 
					Raw Raspberry pie = 
 | 
				
			||||||
Raw Gooseberry pie=
 | 
					Raw Gooseberry pie = 
 | 
				
			||||||
Cooked Gooseberry pie=
 | 
					Raw Mixed Berry pie = 
 | 
				
			||||||
Slice of Gooseberry pie=
 | 
					Cooked Strawberry pie = 
 | 
				
			||||||
Basket with Gooseberry pies=
 | 
					Cooked Blackberry pie = 
 | 
				
			||||||
Gooseberry Bush=
 | 
					Cooked Blueberry pie = 
 | 
				
			||||||
Mixed Berry=
 | 
					Cooked Raspberry pie = 
 | 
				
			||||||
Raw Mixed Berry pie=
 | 
					Cooked Gooseberry pie = 
 | 
				
			||||||
Cooked Mixed Berry pie=
 | 
					Cooked Mixed Berry pie = 
 | 
				
			||||||
Slice of Mixed Berry pie=
 | 
					Slice of Strawberry pie = 
 | 
				
			||||||
Basket with Mixed Berry pies=
 | 
					Slice of Blackberry pie = 
 | 
				
			||||||
Currently fruitless Bush=
 | 
					Slice of Blueberry pie = 
 | 
				
			||||||
Basket=
 | 
					Slice of Raspberry pie = 
 | 
				
			||||||
 | 
					Slice of Gooseberry pie = 
 | 
				
			||||||
 | 
					Slice of Mixed Berry pie = 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Bushes] Loaded. = 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
name = bushes_classic
 | 
					 | 
				
			||||||
optional_depends = farming, farming_plus
 | 
					 | 
				
			||||||
@@ -1,46 +0,0 @@
 | 
				
			|||||||
# Blender v2.73 (sub 0) OBJ File: 'basket-of-pies.blend'
 | 
					 | 
				
			||||||
# www.blender.org
 | 
					 | 
				
			||||||
o basket_Cube.001
 | 
					 | 
				
			||||||
v -0.500000 -0.500000 0.500000
 | 
					 | 
				
			||||||
v -0.500000 -0.500000 -0.500000
 | 
					 | 
				
			||||||
v 0.500000 -0.500000 -0.500000
 | 
					 | 
				
			||||||
v 0.500000 -0.500000 0.500000
 | 
					 | 
				
			||||||
v -0.500000 0.500000 0.500000
 | 
					 | 
				
			||||||
v -0.500000 0.500000 -0.500000
 | 
					 | 
				
			||||||
v 0.500000 0.500000 -0.500000
 | 
					 | 
				
			||||||
v 0.500000 0.500000 0.500000
 | 
					 | 
				
			||||||
v -0.437500 0.500000 0.437500
 | 
					 | 
				
			||||||
v -0.437500 0.500000 -0.437500
 | 
					 | 
				
			||||||
v 0.437500 0.500000 -0.437500
 | 
					 | 
				
			||||||
v 0.437500 0.500000 0.437500
 | 
					 | 
				
			||||||
v -0.437500 -0.437500 0.437500
 | 
					 | 
				
			||||||
v -0.437500 -0.437500 -0.437500
 | 
					 | 
				
			||||||
v 0.437500 -0.437500 -0.437500
 | 
					 | 
				
			||||||
v 0.437500 -0.437500 0.437500
 | 
					 | 
				
			||||||
vt 0.484848 0.984848
 | 
					 | 
				
			||||||
vt 0.015152 0.984848
 | 
					 | 
				
			||||||
vt 0.015152 0.515152
 | 
					 | 
				
			||||||
vt 0.484848 0.515152
 | 
					 | 
				
			||||||
vt 0.515152 0.984848
 | 
					 | 
				
			||||||
vt 0.515152 0.515152
 | 
					 | 
				
			||||||
vt 0.984848 0.515152
 | 
					 | 
				
			||||||
vt 0.984848 0.984848
 | 
					 | 
				
			||||||
vt 0.954545 0.545455
 | 
					 | 
				
			||||||
vt 0.545455 0.545455
 | 
					 | 
				
			||||||
vt 0.954545 0.954545
 | 
					 | 
				
			||||||
vt 0.545455 0.954545
 | 
					 | 
				
			||||||
s off
 | 
					 | 
				
			||||||
f 5/1 6/2 2/3 1/4
 | 
					 | 
				
			||||||
f 6/1 7/2 3/3 2/4
 | 
					 | 
				
			||||||
f 7/1 8/2 4/3 3/4
 | 
					 | 
				
			||||||
f 8/1 5/2 1/3 4/4
 | 
					 | 
				
			||||||
f 1/5 2/6 3/7 4/8
 | 
					 | 
				
			||||||
f 5/6 8/7 12/9 9/10
 | 
					 | 
				
			||||||
f 8/7 7/8 11/11 12/9
 | 
					 | 
				
			||||||
f 7/8 6/5 10/12 11/11
 | 
					 | 
				
			||||||
f 6/5 5/6 9/10 10/12
 | 
					 | 
				
			||||||
f 9/1 12/2 16/3 13/4
 | 
					 | 
				
			||||||
f 12/1 11/2 15/3 16/4
 | 
					 | 
				
			||||||
f 11/1 10/2 14/3 15/4
 | 
					 | 
				
			||||||
f 10/1 9/2 13/3 14/4
 | 
					 | 
				
			||||||
f 13/10 16/9 15/11 14/12
 | 
					 | 
				
			||||||
@@ -1,330 +0,0 @@
 | 
				
			|||||||
# Blender v2.73 (sub 0) OBJ File: 'basket-of-pies.blend'
 | 
					 | 
				
			||||||
# www.blender.org
 | 
					 | 
				
			||||||
o pies_Cylinder
 | 
					 | 
				
			||||||
v -0.089468 -0.116804 -0.438000
 | 
					 | 
				
			||||||
v -0.116691 -0.091480 -0.438000
 | 
					 | 
				
			||||||
v 0.024696 0.005921 -0.404659
 | 
					 | 
				
			||||||
v -0.002527 0.031245 -0.404659
 | 
					 | 
				
			||||||
v 0.121480 0.109962 -0.309713
 | 
					 | 
				
			||||||
v 0.094258 0.135286 -0.309713
 | 
					 | 
				
			||||||
v 0.186149 0.179480 -0.167615
 | 
					 | 
				
			||||||
v 0.158927 0.204804 -0.167615
 | 
					 | 
				
			||||||
v 0.208858 0.203891 0.000000
 | 
					 | 
				
			||||||
v 0.181635 0.229215 0.000000
 | 
					 | 
				
			||||||
v 0.186149 0.179480 0.167615
 | 
					 | 
				
			||||||
v 0.158927 0.204804 0.167615
 | 
					 | 
				
			||||||
v 0.121480 0.109962 0.309713
 | 
					 | 
				
			||||||
v 0.094258 0.135286 0.309713
 | 
					 | 
				
			||||||
v 0.024696 0.005921 0.404659
 | 
					 | 
				
			||||||
v -0.002527 0.031245 0.404659
 | 
					 | 
				
			||||||
v -0.089468 -0.116804 0.438000
 | 
					 | 
				
			||||||
v -0.116691 -0.091480 0.438000
 | 
					 | 
				
			||||||
v -0.230856 -0.214204 0.404659
 | 
					 | 
				
			||||||
v -0.327640 -0.318245 0.309713
 | 
					 | 
				
			||||||
v -0.392309 -0.387763 0.167615
 | 
					 | 
				
			||||||
v -0.415018 -0.412175 -0.000000
 | 
					 | 
				
			||||||
v -0.392309 -0.387763 -0.167615
 | 
					 | 
				
			||||||
v -0.327640 -0.318245 -0.309713
 | 
					 | 
				
			||||||
v -0.230856 -0.214204 -0.404659
 | 
					 | 
				
			||||||
v -0.135230 -0.074234 -0.383250
 | 
					 | 
				
			||||||
v -0.035336 0.033150 -0.354077
 | 
					 | 
				
			||||||
v 0.049350 0.124186 -0.270999
 | 
					 | 
				
			||||||
v 0.105936 0.185014 -0.146663
 | 
					 | 
				
			||||||
v 0.125806 0.206374 0.000000
 | 
					 | 
				
			||||||
v 0.105936 0.185014 0.146663
 | 
					 | 
				
			||||||
v 0.049350 0.124186 0.270999
 | 
					 | 
				
			||||||
v -0.035336 0.033150 0.354077
 | 
					 | 
				
			||||||
v -0.135230 -0.074234 0.383250
 | 
					 | 
				
			||||||
v -0.235124 -0.181618 0.354077
 | 
					 | 
				
			||||||
v -0.319810 -0.272654 0.270999
 | 
					 | 
				
			||||||
v -0.376395 -0.333482 0.146663
 | 
					 | 
				
			||||||
v -0.396266 -0.354842 -0.000000
 | 
					 | 
				
			||||||
v -0.376395 -0.333482 -0.146664
 | 
					 | 
				
			||||||
v -0.319810 -0.272654 -0.270999
 | 
					 | 
				
			||||||
v -0.235124 -0.181618 -0.354077
 | 
					 | 
				
			||||||
v 0.071215 -0.085999 -0.438000
 | 
					 | 
				
			||||||
v 0.041377 -0.063816 -0.438000
 | 
					 | 
				
			||||||
v 0.171221 0.048513 -0.404659
 | 
					 | 
				
			||||||
v 0.141384 0.070697 -0.404659
 | 
					 | 
				
			||||||
v 0.256002 0.162547 -0.309713
 | 
					 | 
				
			||||||
v 0.226165 0.184731 -0.309713
 | 
					 | 
				
			||||||
v 0.312652 0.238743 -0.167615
 | 
					 | 
				
			||||||
v 0.282814 0.260926 -0.167615
 | 
					 | 
				
			||||||
v 0.332544 0.265499 0.000000
 | 
					 | 
				
			||||||
v 0.302707 0.287682 0.000000
 | 
					 | 
				
			||||||
v 0.312652 0.238743 0.167615
 | 
					 | 
				
			||||||
v 0.282814 0.260926 0.167615
 | 
					 | 
				
			||||||
v 0.256002 0.162547 0.309713
 | 
					 | 
				
			||||||
v 0.226165 0.184731 0.309713
 | 
					 | 
				
			||||||
v 0.171221 0.048513 0.404659
 | 
					 | 
				
			||||||
v 0.141383 0.070697 0.404659
 | 
					 | 
				
			||||||
v 0.071215 -0.085999 0.438000
 | 
					 | 
				
			||||||
v 0.041377 -0.063816 0.438000
 | 
					 | 
				
			||||||
v -0.058629 -0.198328 0.404659
 | 
					 | 
				
			||||||
v -0.058629 -0.198328 -0.404659
 | 
					 | 
				
			||||||
v 0.021058 -0.048709 -0.383250
 | 
					 | 
				
			||||||
v 0.108564 0.068989 -0.354077
 | 
					 | 
				
			||||||
v 0.182747 0.168769 -0.270999
 | 
					 | 
				
			||||||
v 0.232315 0.235440 -0.146663
 | 
					 | 
				
			||||||
v 0.249721 0.258852 0.000000
 | 
					 | 
				
			||||||
v 0.232315 0.235440 0.146663
 | 
					 | 
				
			||||||
v 0.182747 0.168769 0.270999
 | 
					 | 
				
			||||||
v 0.108564 0.068989 0.354077
 | 
					 | 
				
			||||||
v 0.021058 -0.048709 0.383250
 | 
					 | 
				
			||||||
v -0.066448 -0.166408 0.354077
 | 
					 | 
				
			||||||
v -0.140632 -0.266188 0.270999
 | 
					 | 
				
			||||||
v -0.190200 -0.332858 0.146663
 | 
					 | 
				
			||||||
v -0.207605 -0.356270 -0.000000
 | 
					 | 
				
			||||||
v -0.190199 -0.332858 -0.146664
 | 
					 | 
				
			||||||
v -0.140631 -0.266188 -0.270999
 | 
					 | 
				
			||||||
v -0.066448 -0.166408 -0.354077
 | 
					 | 
				
			||||||
v 0.220377 -0.057101 -0.438000
 | 
					 | 
				
			||||||
v 0.188086 -0.038671 -0.438000
 | 
					 | 
				
			||||||
v 0.303465 0.088470 -0.404659
 | 
					 | 
				
			||||||
v 0.271175 0.106901 -0.404659
 | 
					 | 
				
			||||||
v 0.373905 0.211880 -0.309713
 | 
					 | 
				
			||||||
v 0.341614 0.230311 -0.309713
 | 
					 | 
				
			||||||
v 0.420971 0.294340 -0.167615
 | 
					 | 
				
			||||||
v 0.388680 0.312771 -0.167615
 | 
					 | 
				
			||||||
v 0.437498 0.323296 0.000000
 | 
					 | 
				
			||||||
v 0.405208 0.341727 0.000000
 | 
					 | 
				
			||||||
v 0.420971 0.294340 0.167615
 | 
					 | 
				
			||||||
v 0.388680 0.312771 0.167615
 | 
					 | 
				
			||||||
v 0.373905 0.211880 0.309713
 | 
					 | 
				
			||||||
v 0.341614 0.230311 0.309713
 | 
					 | 
				
			||||||
v 0.303465 0.088470 0.404659
 | 
					 | 
				
			||||||
v 0.271175 0.106901 0.404659
 | 
					 | 
				
			||||||
v 0.220377 -0.057101 0.438000
 | 
					 | 
				
			||||||
v 0.188086 -0.038671 0.438000
 | 
					 | 
				
			||||||
v 0.104997 -0.184242 0.404659
 | 
					 | 
				
			||||||
v 0.104997 -0.184242 -0.404659
 | 
					 | 
				
			||||||
v 0.166096 -0.026119 -0.383250
 | 
					 | 
				
			||||||
v 0.238799 0.101256 -0.354077
 | 
					 | 
				
			||||||
v 0.300433 0.209240 -0.270999
 | 
					 | 
				
			||||||
v 0.341616 0.281392 -0.146663
 | 
					 | 
				
			||||||
v 0.356078 0.306728 0.000000
 | 
					 | 
				
			||||||
v 0.341616 0.281392 0.146664
 | 
					 | 
				
			||||||
v 0.300433 0.209240 0.270999
 | 
					 | 
				
			||||||
v 0.238799 0.101256 0.354077
 | 
					 | 
				
			||||||
v 0.166096 -0.026119 0.383250
 | 
					 | 
				
			||||||
v 0.093393 -0.153495 0.354077
 | 
					 | 
				
			||||||
v 0.031759 -0.261478 0.270999
 | 
					 | 
				
			||||||
v -0.009424 -0.333631 0.146663
 | 
					 | 
				
			||||||
v -0.023885 -0.358967 -0.000000
 | 
					 | 
				
			||||||
v -0.009424 -0.333631 -0.146664
 | 
					 | 
				
			||||||
v 0.031759 -0.261478 -0.270999
 | 
					 | 
				
			||||||
v 0.093394 -0.153495 -0.354077
 | 
					 | 
				
			||||||
vt 0.000000 0.054054
 | 
					 | 
				
			||||||
vt 0.000000 0.000000
 | 
					 | 
				
			||||||
vt 0.062500 0.000000
 | 
					 | 
				
			||||||
vt 0.062500 0.054054
 | 
					 | 
				
			||||||
vt 0.125000 0.000000
 | 
					 | 
				
			||||||
vt 0.125000 0.054054
 | 
					 | 
				
			||||||
vt 0.187500 0.000000
 | 
					 | 
				
			||||||
vt 0.187500 0.054054
 | 
					 | 
				
			||||||
vt 0.250000 0.000000
 | 
					 | 
				
			||||||
vt 0.250000 0.054054
 | 
					 | 
				
			||||||
vt 0.312500 0.000000
 | 
					 | 
				
			||||||
vt 0.312500 0.054054
 | 
					 | 
				
			||||||
vt 0.375000 0.000000
 | 
					 | 
				
			||||||
vt 0.375000 0.054054
 | 
					 | 
				
			||||||
vt 0.437500 0.000000
 | 
					 | 
				
			||||||
vt 0.437500 0.054054
 | 
					 | 
				
			||||||
vt 0.500000 0.000000
 | 
					 | 
				
			||||||
vt 0.500000 0.054054
 | 
					 | 
				
			||||||
vt 0.055610 0.293778
 | 
					 | 
				
			||||||
vt 0.110171 0.184656
 | 
					 | 
				
			||||||
vt 0.123905 0.225763
 | 
					 | 
				
			||||||
vt 0.076165 0.321244
 | 
					 | 
				
			||||||
vt 0.316174 0.801264
 | 
					 | 
				
			||||||
vt 0.253798 0.852938
 | 
					 | 
				
			||||||
vt 0.186282 0.852938
 | 
					 | 
				
			||||||
vt 0.123905 0.801264
 | 
					 | 
				
			||||||
vt 0.076165 0.705782
 | 
					 | 
				
			||||||
vt 0.050327 0.581029
 | 
					 | 
				
			||||||
vt 0.050327 0.445997
 | 
					 | 
				
			||||||
vt 0.186282 0.174088
 | 
					 | 
				
			||||||
vt 0.253798 0.174089
 | 
					 | 
				
			||||||
vt 0.316174 0.225763
 | 
					 | 
				
			||||||
vt 0.363915 0.321245
 | 
					 | 
				
			||||||
vt 0.389752 0.445997
 | 
					 | 
				
			||||||
vt 0.389752 0.581029
 | 
					 | 
				
			||||||
vt 0.363915 0.705782
 | 
					 | 
				
			||||||
vt 0.384468 0.733249
 | 
					 | 
				
			||||||
vt 0.329907 0.842371
 | 
					 | 
				
			||||||
vt 0.055610 0.733249
 | 
					 | 
				
			||||||
vt 0.026082 0.590674
 | 
					 | 
				
			||||||
vt 0.384468 0.293778
 | 
					 | 
				
			||||||
vt 0.413996 0.436353
 | 
					 | 
				
			||||||
vt 0.258619 0.901428
 | 
					 | 
				
			||||||
vt 0.181458 0.901428
 | 
					 | 
				
			||||||
vt 0.181458 0.125599
 | 
					 | 
				
			||||||
vt 0.258619 0.125599
 | 
					 | 
				
			||||||
vt 0.026082 0.436353
 | 
					 | 
				
			||||||
vt 0.413996 0.590674
 | 
					 | 
				
			||||||
vt 0.110171 0.842371
 | 
					 | 
				
			||||||
vt 0.329907 0.184656
 | 
					 | 
				
			||||||
vt 0.076566 0.705251
 | 
					 | 
				
			||||||
vt 0.050729 0.580498
 | 
					 | 
				
			||||||
vt 0.050729 0.445466
 | 
					 | 
				
			||||||
vt 0.076566 0.320713
 | 
					 | 
				
			||||||
vt 0.124307 0.225232
 | 
					 | 
				
			||||||
vt 0.186684 0.173557
 | 
					 | 
				
			||||||
vt 0.254199 0.173557
 | 
					 | 
				
			||||||
vt 0.316576 0.225232
 | 
					 | 
				
			||||||
vt 0.364317 0.320713
 | 
					 | 
				
			||||||
vt 0.390154 0.445466
 | 
					 | 
				
			||||||
vt 0.390154 0.580498
 | 
					 | 
				
			||||||
vt 0.364317 0.705251
 | 
					 | 
				
			||||||
vt 0.316576 0.800732
 | 
					 | 
				
			||||||
vt 0.254199 0.852407
 | 
					 | 
				
			||||||
vt 0.186684 0.852407
 | 
					 | 
				
			||||||
vt 0.124307 0.800732
 | 
					 | 
				
			||||||
vt 0.110573 0.841838
 | 
					 | 
				
			||||||
vt 0.056012 0.732716
 | 
					 | 
				
			||||||
vt 0.330309 0.841838
 | 
					 | 
				
			||||||
vt 0.259022 0.900894
 | 
					 | 
				
			||||||
vt 0.026484 0.590141
 | 
					 | 
				
			||||||
vt 0.026484 0.435819
 | 
					 | 
				
			||||||
vt 0.414398 0.435819
 | 
					 | 
				
			||||||
vt 0.414398 0.590141
 | 
					 | 
				
			||||||
vt 0.181861 0.900894
 | 
					 | 
				
			||||||
vt 0.384870 0.732716
 | 
					 | 
				
			||||||
vt 0.384870 0.293245
 | 
					 | 
				
			||||||
vt 0.389637 0.582094
 | 
					 | 
				
			||||||
vt 0.363799 0.706847
 | 
					 | 
				
			||||||
vt 0.316059 0.802329
 | 
					 | 
				
			||||||
vt 0.253682 0.854003
 | 
					 | 
				
			||||||
vt 0.186166 0.854003
 | 
					 | 
				
			||||||
vt 0.123790 0.802329
 | 
					 | 
				
			||||||
vt 0.076049 0.706847
 | 
					 | 
				
			||||||
vt 0.050212 0.582094
 | 
					 | 
				
			||||||
vt 0.050212 0.447062
 | 
					 | 
				
			||||||
vt 0.076049 0.322309
 | 
					 | 
				
			||||||
vt 0.123790 0.226828
 | 
					 | 
				
			||||||
vt 0.186166 0.175153
 | 
					 | 
				
			||||||
vt 0.253682 0.175153
 | 
					 | 
				
			||||||
vt 0.316058 0.226828
 | 
					 | 
				
			||||||
vt 0.363799 0.322310
 | 
					 | 
				
			||||||
vt 0.389637 0.447062
 | 
					 | 
				
			||||||
vt 0.413881 0.437419
 | 
					 | 
				
			||||||
vt 0.413881 0.591741
 | 
					 | 
				
			||||||
vt 0.258504 0.126666
 | 
					 | 
				
			||||||
vt 0.329792 0.185722
 | 
					 | 
				
			||||||
vt 0.384353 0.734315
 | 
					 | 
				
			||||||
vt 0.329792 0.843437
 | 
					 | 
				
			||||||
vt 0.055495 0.294844
 | 
					 | 
				
			||||||
vt 0.110056 0.185722
 | 
					 | 
				
			||||||
vt 0.384353 0.294844
 | 
					 | 
				
			||||||
vt 0.181343 0.126666
 | 
					 | 
				
			||||||
vt 0.025967 0.437419
 | 
					 | 
				
			||||||
g pies_Cylinder_pie
 | 
					 | 
				
			||||||
s off
 | 
					 | 
				
			||||||
f 1/1 2/2 4/3 3/4
 | 
					 | 
				
			||||||
f 3/4 4/3 6/5 5/6
 | 
					 | 
				
			||||||
f 5/6 6/5 8/7 7/8
 | 
					 | 
				
			||||||
f 7/8 8/7 10/9 9/10
 | 
					 | 
				
			||||||
f 9/10 10/9 12/11 11/12
 | 
					 | 
				
			||||||
f 11/12 12/11 14/13 13/14
 | 
					 | 
				
			||||||
f 13/14 14/13 16/15 15/16
 | 
					 | 
				
			||||||
f 15/16 16/15 18/17 17/18
 | 
					 | 
				
			||||||
f 20/19 19/20 35/21 36/22
 | 
					 | 
				
			||||||
f 27/23 26/24 41/25 40/26 39/27 38/28 37/29 36/22 35/21 34/30 33/31 32/32 31/33 30/34 29/35 28/36
 | 
					 | 
				
			||||||
f 6/37 4/38 27/23 28/36
 | 
					 | 
				
			||||||
f 23/39 22/40 38/28 39/27
 | 
					 | 
				
			||||||
f 12/41 10/42 30/34 31/33
 | 
					 | 
				
			||||||
f 2/43 25/44 41/25 26/24
 | 
					 | 
				
			||||||
f 4/38 2/43 26/24 27/23
 | 
					 | 
				
			||||||
f 18/45 16/46 33/31 34/30
 | 
					 | 
				
			||||||
f 21/47 20/19 36/22 37/29
 | 
					 | 
				
			||||||
f 8/48 6/37 28/36 29/35
 | 
					 | 
				
			||||||
f 24/49 23/39 39/27 40/26
 | 
					 | 
				
			||||||
f 14/50 12/41 31/33 32/32
 | 
					 | 
				
			||||||
f 19/20 18/45 34/30 35/21
 | 
					 | 
				
			||||||
f 22/40 21/47 37/29 38/28
 | 
					 | 
				
			||||||
f 10/42 8/48 29/35 30/34
 | 
					 | 
				
			||||||
f 25/44 24/49 40/26 41/25
 | 
					 | 
				
			||||||
f 16/46 14/50 32/32 33/31
 | 
					 | 
				
			||||||
f 42/1 43/2 45/3 44/4
 | 
					 | 
				
			||||||
f 44/4 45/3 47/5 46/6
 | 
					 | 
				
			||||||
f 46/6 47/5 49/7 48/8
 | 
					 | 
				
			||||||
f 48/8 49/7 51/9 50/10
 | 
					 | 
				
			||||||
f 50/10 51/9 53/11 52/12
 | 
					 | 
				
			||||||
f 52/12 53/11 55/13 54/14
 | 
					 | 
				
			||||||
f 54/14 55/13 57/15 56/16
 | 
					 | 
				
			||||||
f 56/16 57/15 59/17 58/18
 | 
					 | 
				
			||||||
f 63/51 62/52 77/53 76/54 75/55 74/56 73/57 72/58 71/59 70/60 69/61 68/62 67/63 66/64 65/65 64/66
 | 
					 | 
				
			||||||
f 47/67 45/68 63/51 64/66
 | 
					 | 
				
			||||||
f 53/69 51/70 66/64 67/63
 | 
					 | 
				
			||||||
f 43/71 61/72 77/53 62/52
 | 
					 | 
				
			||||||
f 45/68 43/71 62/52 63/51
 | 
					 | 
				
			||||||
f 59/73 57/74 69/61 70/60
 | 
					 | 
				
			||||||
f 49/75 47/67 64/66 65/65
 | 
					 | 
				
			||||||
f 55/76 53/69 67/63 68/62
 | 
					 | 
				
			||||||
f 60/77 59/73 70/60 71/59
 | 
					 | 
				
			||||||
f 51/70 49/75 65/65 66/64
 | 
					 | 
				
			||||||
f 57/74 55/76 68/62 69/61
 | 
					 | 
				
			||||||
f 78/1 79/2 81/3 80/4
 | 
					 | 
				
			||||||
f 80/4 81/3 83/5 82/6
 | 
					 | 
				
			||||||
f 82/6 83/5 85/7 84/8
 | 
					 | 
				
			||||||
f 84/8 85/7 87/9 86/10
 | 
					 | 
				
			||||||
f 86/10 87/9 89/11 88/12
 | 
					 | 
				
			||||||
f 88/12 89/11 91/13 90/14
 | 
					 | 
				
			||||||
f 90/14 91/13 93/15 92/16
 | 
					 | 
				
			||||||
f 92/16 93/15 95/17 94/18
 | 
					 | 
				
			||||||
f 99/78 98/79 113/80 112/81 111/82 110/83 109/84 108/85 107/86 106/87 105/88 104/89 103/90 102/91 101/92 100/93
 | 
					 | 
				
			||||||
f 83/94 81/95 99/78 100/93
 | 
					 | 
				
			||||||
f 89/96 87/97 102/91 103/90
 | 
					 | 
				
			||||||
f 79/98 97/99 113/80 98/79
 | 
					 | 
				
			||||||
f 81/95 79/98 98/79 99/78
 | 
					 | 
				
			||||||
f 95/100 93/101 105/88 106/87
 | 
					 | 
				
			||||||
f 85/102 83/94 100/93 101/92
 | 
					 | 
				
			||||||
f 91/103 89/96 103/90 104/89
 | 
					 | 
				
			||||||
f 96/104 95/100 106/87 107/86
 | 
					 | 
				
			||||||
f 87/97 85/102 101/92 102/91
 | 
					 | 
				
			||||||
f 93/101 91/103 104/89 105/88
 | 
					 | 
				
			||||||
o basket_Cube.001
 | 
					 | 
				
			||||||
v -0.500000 -0.500000 0.500000
 | 
					 | 
				
			||||||
v -0.500000 -0.500000 -0.500000
 | 
					 | 
				
			||||||
v 0.500000 -0.500000 -0.500000
 | 
					 | 
				
			||||||
v 0.500000 -0.500000 0.500000
 | 
					 | 
				
			||||||
v -0.500000 0.500000 0.500000
 | 
					 | 
				
			||||||
v -0.500000 0.500000 -0.500000
 | 
					 | 
				
			||||||
v 0.500000 0.500000 -0.500000
 | 
					 | 
				
			||||||
v 0.500000 0.500000 0.500000
 | 
					 | 
				
			||||||
v -0.437500 0.500000 0.437500
 | 
					 | 
				
			||||||
v -0.437500 0.500000 -0.437500
 | 
					 | 
				
			||||||
v 0.437500 0.500000 -0.437500
 | 
					 | 
				
			||||||
v 0.437500 0.500000 0.437500
 | 
					 | 
				
			||||||
v -0.437500 -0.437500 0.437500
 | 
					 | 
				
			||||||
v -0.437500 -0.437500 -0.437500
 | 
					 | 
				
			||||||
v 0.437500 -0.437500 -0.437500
 | 
					 | 
				
			||||||
v 0.437500 -0.437500 0.437500
 | 
					 | 
				
			||||||
vt 0.484848 0.984848
 | 
					 | 
				
			||||||
vt 0.015152 0.984848
 | 
					 | 
				
			||||||
vt 0.015152 0.515152
 | 
					 | 
				
			||||||
vt 0.484848 0.515152
 | 
					 | 
				
			||||||
vt 0.515152 0.984848
 | 
					 | 
				
			||||||
vt 0.515152 0.515152
 | 
					 | 
				
			||||||
vt 0.984848 0.515152
 | 
					 | 
				
			||||||
vt 0.984848 0.984848
 | 
					 | 
				
			||||||
vt 0.954545 0.545455
 | 
					 | 
				
			||||||
vt 0.545455 0.545455
 | 
					 | 
				
			||||||
vt 0.954545 0.954545
 | 
					 | 
				
			||||||
vt 0.545455 0.954545
 | 
					 | 
				
			||||||
g basket_Cube.001_basket
 | 
					 | 
				
			||||||
s off
 | 
					 | 
				
			||||||
f 118/105 119/106 115/107 114/108
 | 
					 | 
				
			||||||
f 119/105 120/106 116/107 115/108
 | 
					 | 
				
			||||||
f 120/105 121/106 117/107 116/108
 | 
					 | 
				
			||||||
f 121/105 118/106 114/107 117/108
 | 
					 | 
				
			||||||
f 114/109 115/110 116/111 117/112
 | 
					 | 
				
			||||||
f 118/110 121/111 125/113 122/114
 | 
					 | 
				
			||||||
f 121/111 120/112 124/115 125/113
 | 
					 | 
				
			||||||
f 120/112 119/109 123/116 124/115
 | 
					 | 
				
			||||||
f 119/109 118/110 122/114 123/116
 | 
					 | 
				
			||||||
f 122/105 125/106 129/107 126/108
 | 
					 | 
				
			||||||
f 125/105 124/106 128/107 129/108
 | 
					 | 
				
			||||||
f 124/105 123/106 127/107 128/108
 | 
					 | 
				
			||||||
f 123/105 122/106 126/107 127/108
 | 
					 | 
				
			||||||
f 126/114 129/113 128/115 127/116
 | 
					 | 
				
			||||||
@@ -1,329 +0,0 @@
 | 
				
			|||||||
# Blender v2.73 (sub 0) OBJ File: 'bush.blend'
 | 
					 | 
				
			||||||
# www.blender.org
 | 
					 | 
				
			||||||
o nodebox-4
 | 
					 | 
				
			||||||
v 0.467076 -0.122686 -0.190481
 | 
					 | 
				
			||||||
v -0.453590 -0.119789 -0.192145
 | 
					 | 
				
			||||||
v 0.420865 -0.181680 -0.171396
 | 
					 | 
				
			||||||
v -0.429008 -0.188000 -0.182314
 | 
					 | 
				
			||||||
v -0.450977 0.041977 -0.191409
 | 
					 | 
				
			||||||
v -0.271687 -0.294075 -0.114977
 | 
					 | 
				
			||||||
v -0.096925 -0.495759 -0.044091
 | 
					 | 
				
			||||||
v -0.070286 -0.344209 -0.030750
 | 
					 | 
				
			||||||
v -0.163971 -0.173437 -0.403793
 | 
					 | 
				
			||||||
v -0.188139 -0.116431 0.446425
 | 
					 | 
				
			||||||
v 0.069865 0.462329 0.170043
 | 
					 | 
				
			||||||
v -0.175980 -0.180649 0.417932
 | 
					 | 
				
			||||||
v -0.184276 0.039248 0.437271
 | 
					 | 
				
			||||||
v -0.121692 -0.319322 0.290049
 | 
					 | 
				
			||||||
v -0.039557 -0.495759 0.097032
 | 
					 | 
				
			||||||
v -0.029307 -0.346230 0.070496
 | 
					 | 
				
			||||||
v -0.440307 0.205163 -0.203598
 | 
					 | 
				
			||||||
v -0.440281 0.206327 0.191785
 | 
					 | 
				
			||||||
v -0.339366 0.327086 -0.144329
 | 
					 | 
				
			||||||
v -0.267923 0.418413 0.108270
 | 
					 | 
				
			||||||
v -0.264994 0.405691 -0.113216
 | 
					 | 
				
			||||||
v 0.173823 0.186657 0.424935
 | 
					 | 
				
			||||||
v -0.172109 0.470396 -0.073638
 | 
					 | 
				
			||||||
v -0.090743 0.491063 -0.039539
 | 
					 | 
				
			||||||
v -0.173625 0.180559 0.412022
 | 
					 | 
				
			||||||
v 0.108534 0.404586 0.263698
 | 
					 | 
				
			||||||
v -0.137870 0.317286 0.327397
 | 
					 | 
				
			||||||
v 0.149454 0.342906 0.361857
 | 
					 | 
				
			||||||
v -0.115069 0.426252 0.274637
 | 
					 | 
				
			||||||
v 0.116858 -0.311812 0.284557
 | 
					 | 
				
			||||||
v -0.074459 0.465500 0.178311
 | 
					 | 
				
			||||||
v -0.036397 0.486640 0.094150
 | 
					 | 
				
			||||||
v 0.044199 -0.495759 -0.101459
 | 
					 | 
				
			||||||
v 0.034559 -0.377127 -0.079219
 | 
					 | 
				
			||||||
v 0.116886 -0.299764 -0.276145
 | 
					 | 
				
			||||||
v -0.172864 0.462259 0.069984
 | 
					 | 
				
			||||||
v 0.173974 -0.178414 -0.411782
 | 
					 | 
				
			||||||
v 0.191827 0.042411 -0.453422
 | 
					 | 
				
			||||||
v 0.190055 -0.117435 -0.449613
 | 
					 | 
				
			||||||
v -0.136929 0.321997 -0.339476
 | 
					 | 
				
			||||||
v 0.101567 -0.495759 0.039664
 | 
					 | 
				
			||||||
v 0.076778 -0.365788 0.030191
 | 
					 | 
				
			||||||
v 0.292232 -0.320027 0.121743
 | 
					 | 
				
			||||||
v -0.067752 0.451498 -0.167691
 | 
					 | 
				
			||||||
v 0.433751 -0.189348 0.181586
 | 
					 | 
				
			||||||
v 0.457624 0.044950 0.184732
 | 
					 | 
				
			||||||
v 0.473778 -0.128221 0.198329
 | 
					 | 
				
			||||||
v -0.113891 -0.307852 -0.282552
 | 
					 | 
				
			||||||
v 0.081961 0.458662 -0.191580
 | 
					 | 
				
			||||||
v 0.042947 0.491063 -0.093885
 | 
					 | 
				
			||||||
v 0.109202 0.397842 -0.257691
 | 
					 | 
				
			||||||
v 0.145450 0.328672 -0.343352
 | 
					 | 
				
			||||||
v 0.191241 0.038411 0.444768
 | 
					 | 
				
			||||||
v -0.184306 0.045052 -0.456452
 | 
					 | 
				
			||||||
v -0.289997 -0.318897 0.117161
 | 
					 | 
				
			||||||
v 0.182461 0.185982 -0.431178
 | 
					 | 
				
			||||||
v 0.180190 0.469152 0.074510
 | 
					 | 
				
			||||||
v 0.097292 0.491063 0.039804
 | 
					 | 
				
			||||||
v 0.264954 0.412421 0.110505
 | 
					 | 
				
			||||||
v 0.355939 0.336100 0.148277
 | 
					 | 
				
			||||||
v -0.474575 0.042725 0.191924
 | 
					 | 
				
			||||||
v -0.169486 0.185035 -0.418844
 | 
					 | 
				
			||||||
v -0.445009 -0.118527 0.180804
 | 
					 | 
				
			||||||
v 0.427054 0.187979 0.172057
 | 
					 | 
				
			||||||
v 0.350926 0.339079 -0.143384
 | 
					 | 
				
			||||||
v 0.189060 -0.125023 0.462241
 | 
					 | 
				
			||||||
v 0.269270 -0.290650 -0.109472
 | 
					 | 
				
			||||||
v 0.175816 -0.186803 0.429367
 | 
					 | 
				
			||||||
v 0.259570 0.406980 -0.105942
 | 
					 | 
				
			||||||
v -0.103158 0.398344 -0.255462
 | 
					 | 
				
			||||||
v -0.339105 0.330270 0.137302
 | 
					 | 
				
			||||||
v -0.186029 -0.123369 -0.460126
 | 
					 | 
				
			||||||
v -0.418539 -0.180131 0.169838
 | 
					 | 
				
			||||||
v 0.041492 0.491063 0.094145
 | 
					 | 
				
			||||||
v 0.487251 0.041118 -0.191308
 | 
					 | 
				
			||||||
v 0.173059 0.459504 -0.070716
 | 
					 | 
				
			||||||
v 0.460259 0.206607 -0.196213
 | 
					 | 
				
			||||||
v 0.108065 0.487446 -0.045199
 | 
					 | 
				
			||||||
v -0.103423 0.491173 0.040772
 | 
					 | 
				
			||||||
v -0.040665 0.496765 -0.107957
 | 
					 | 
				
			||||||
v -0.070153 -0.343292 0.028053
 | 
					 | 
				
			||||||
v -0.028215 -0.347521 -0.072596
 | 
					 | 
				
			||||||
v 0.028031 -0.329368 0.067986
 | 
					 | 
				
			||||||
v 0.075170 -0.358957 -0.031186
 | 
					 | 
				
			||||||
v -0.037332 -0.495759 -0.099759
 | 
					 | 
				
			||||||
v 0.099867 -0.495759 -0.041867
 | 
					 | 
				
			||||||
v -0.095225 -0.495759 0.037440
 | 
					 | 
				
			||||||
v 0.041974 -0.495759 0.095332
 | 
					 | 
				
			||||||
v 0.001777 0.503796 -0.003546
 | 
					 | 
				
			||||||
v 0.002321 -0.495758 -0.002214
 | 
					 | 
				
			||||||
vt 0.875000 0.281250
 | 
					 | 
				
			||||||
vt 1.000000 0.281250
 | 
					 | 
				
			||||||
vt 1.000000 0.421875
 | 
					 | 
				
			||||||
vt 0.875000 0.421875
 | 
					 | 
				
			||||||
vt 0.375000 0.125000
 | 
					 | 
				
			||||||
vt 0.500000 0.125000
 | 
					 | 
				
			||||||
vt 0.500000 0.234375
 | 
					 | 
				
			||||||
vt 0.375000 0.234375
 | 
					 | 
				
			||||||
vt 0.625000 0.234375
 | 
					 | 
				
			||||||
vt 0.625000 0.281250
 | 
					 | 
				
			||||||
vt 0.500000 0.281250
 | 
					 | 
				
			||||||
vt 0.500000 0.609375
 | 
					 | 
				
			||||||
vt 0.500000 0.656250
 | 
					 | 
				
			||||||
vt 0.375000 0.656250
 | 
					 | 
				
			||||||
vt 0.375000 0.609375
 | 
					 | 
				
			||||||
vt 0.625000 0.421875
 | 
					 | 
				
			||||||
vt 0.500000 0.421875
 | 
					 | 
				
			||||||
vt 0.375000 0.281250
 | 
					 | 
				
			||||||
vt 0.375000 0.421875
 | 
					 | 
				
			||||||
vt 0.125000 0.609375
 | 
					 | 
				
			||||||
vt 0.125000 0.656250
 | 
					 | 
				
			||||||
vt 0.000000 0.656250
 | 
					 | 
				
			||||||
vt 0.000000 0.609375
 | 
					 | 
				
			||||||
vt 0.846670 0.983596
 | 
					 | 
				
			||||||
vt 0.823789 0.862038
 | 
					 | 
				
			||||||
vt 0.861831 0.862038
 | 
					 | 
				
			||||||
vt 0.500000 0.531250
 | 
					 | 
				
			||||||
vt 0.375000 0.531250
 | 
					 | 
				
			||||||
vt 0.234375 0.609375
 | 
					 | 
				
			||||||
vt 0.234375 0.531250
 | 
					 | 
				
			||||||
vt 0.875000 0.234375
 | 
					 | 
				
			||||||
vt 0.750000 0.234375
 | 
					 | 
				
			||||||
vt 0.750000 0.125000
 | 
					 | 
				
			||||||
vt 0.875000 0.125000
 | 
					 | 
				
			||||||
vt 0.125000 0.234375
 | 
					 | 
				
			||||||
vt 0.125000 0.125000
 | 
					 | 
				
			||||||
vt 0.234375 0.125000
 | 
					 | 
				
			||||||
vt 0.234375 0.234375
 | 
					 | 
				
			||||||
vt 0.125000 0.281250
 | 
					 | 
				
			||||||
vt 0.234375 0.281250
 | 
					 | 
				
			||||||
vt 0.234375 0.421875
 | 
					 | 
				
			||||||
vt 0.125000 0.421875
 | 
					 | 
				
			||||||
vt 0.125000 0.703125
 | 
					 | 
				
			||||||
vt 0.000000 0.703125
 | 
					 | 
				
			||||||
vt 0.875000 0.656250
 | 
					 | 
				
			||||||
vt 0.750000 0.656250
 | 
					 | 
				
			||||||
vt 0.750000 0.609375
 | 
					 | 
				
			||||||
vt 0.875000 0.609375
 | 
					 | 
				
			||||||
vt 0.625000 0.656250
 | 
					 | 
				
			||||||
vt 0.625000 0.609375
 | 
					 | 
				
			||||||
vt 0.234375 0.656250
 | 
					 | 
				
			||||||
vt 0.375000 0.703125
 | 
					 | 
				
			||||||
vt 0.234375 0.703125
 | 
					 | 
				
			||||||
vt 0.125000 0.531250
 | 
					 | 
				
			||||||
vt 0.875000 0.531250
 | 
					 | 
				
			||||||
vt 1.000000 0.531250
 | 
					 | 
				
			||||||
vt 1.000000 0.609375
 | 
					 | 
				
			||||||
vt 0.500000 0.703125
 | 
					 | 
				
			||||||
vt 0.000000 0.421875
 | 
					 | 
				
			||||||
vt 0.000000 0.531250
 | 
					 | 
				
			||||||
vt 0.875000 0.703125
 | 
					 | 
				
			||||||
vt 0.750000 0.703125
 | 
					 | 
				
			||||||
vt 0.328125 0.812500
 | 
					 | 
				
			||||||
vt 0.328125 0.875000
 | 
					 | 
				
			||||||
vt 0.265625 0.890625
 | 
					 | 
				
			||||||
vt 0.265625 0.781250
 | 
					 | 
				
			||||||
vt 0.750000 0.531250
 | 
					 | 
				
			||||||
vt 1.000000 0.234375
 | 
					 | 
				
			||||||
vt -0.000000 0.281250
 | 
					 | 
				
			||||||
vt 0.000000 0.234375
 | 
					 | 
				
			||||||
vt 0.375000 0.921875
 | 
					 | 
				
			||||||
vt 0.328125 0.984375
 | 
					 | 
				
			||||||
vt 0.562500 0.812500
 | 
					 | 
				
			||||||
vt 0.500000 0.828125
 | 
					 | 
				
			||||||
vt 0.625000 0.125000
 | 
					 | 
				
			||||||
vt 0.625000 0.531250
 | 
					 | 
				
			||||||
vt 0.970570 0.983596
 | 
					 | 
				
			||||||
vt 0.918853 0.862038
 | 
					 | 
				
			||||||
vt 0.983390 0.862038
 | 
					 | 
				
			||||||
vt 1.000000 0.703125
 | 
					 | 
				
			||||||
vt 1.000000 0.656250
 | 
					 | 
				
			||||||
vt 0.694849 0.983596
 | 
					 | 
				
			||||||
vt 0.653099 0.862038
 | 
					 | 
				
			||||||
vt 0.703461 0.862038
 | 
					 | 
				
			||||||
vt 0.453125 1.000000
 | 
					 | 
				
			||||||
vt 0.437500 0.937500
 | 
					 | 
				
			||||||
vt 0.546875 0.937500
 | 
					 | 
				
			||||||
vt 0.375000 0.765625
 | 
					 | 
				
			||||||
vt 0.625000 0.703125
 | 
					 | 
				
			||||||
vt 0.750000 0.281250
 | 
					 | 
				
			||||||
vt 0.000000 0.125000
 | 
					 | 
				
			||||||
vt 0.781059 0.974219
 | 
					 | 
				
			||||||
vt 0.740272 0.862038
 | 
					 | 
				
			||||||
vt 0.773590 0.862038
 | 
					 | 
				
			||||||
vt 0.823762 0.862067
 | 
					 | 
				
			||||||
vt 0.773656 0.862066
 | 
					 | 
				
			||||||
vt 0.800723 0.801332
 | 
					 | 
				
			||||||
vt 0.750000 0.421875
 | 
					 | 
				
			||||||
vt 1.000000 0.125000
 | 
					 | 
				
			||||||
vt 0.881508 0.980225
 | 
					 | 
				
			||||||
vt 0.923791 0.982865
 | 
					 | 
				
			||||||
vt 0.819499 0.959318
 | 
					 | 
				
			||||||
vt 0.634200 0.973424
 | 
					 | 
				
			||||||
vt 0.659430 0.971277
 | 
					 | 
				
			||||||
vt 0.724959 0.956989
 | 
					 | 
				
			||||||
vt 0.755822 0.968617
 | 
					 | 
				
			||||||
vt 0.125000 0.000000
 | 
					 | 
				
			||||||
vt 0.234375 0.000000
 | 
					 | 
				
			||||||
vt 0.375000 0.000000
 | 
					 | 
				
			||||||
vt 0.500000 0.000000
 | 
					 | 
				
			||||||
vt 0.750000 0.000000
 | 
					 | 
				
			||||||
vt 0.875000 0.000000
 | 
					 | 
				
			||||||
vt 1.000000 0.000000
 | 
					 | 
				
			||||||
vt 0.625000 0.000000
 | 
					 | 
				
			||||||
vt 0.000000 0.000000
 | 
					 | 
				
			||||||
vt 0.618713 0.862038
 | 
					 | 
				
			||||||
vt 0.453125 0.781250
 | 
					 | 
				
			||||||
vt 0.484375 0.890625
 | 
					 | 
				
			||||||
vt 0.406250 0.859375
 | 
					 | 
				
			||||||
vt 0.738525 0.828462
 | 
					 | 
				
			||||||
vt 0.741806 0.778103
 | 
					 | 
				
			||||||
vt 0.777683 0.740596
 | 
					 | 
				
			||||||
vt 0.827789 0.740597
 | 
					 | 
				
			||||||
vt 0.862920 0.774201
 | 
					 | 
				
			||||||
vt 0.859639 0.824560
 | 
					 | 
				
			||||||
s off
 | 
					 | 
				
			||||||
f 63/1 10/2 13/3 61/4
 | 
					 | 
				
			||||||
f 67/5 35/6 37/7 3/8
 | 
					 | 
				
			||||||
f 9/9 72/10 39/11 37/7
 | 
					 | 
				
			||||||
f 52/12 51/13 69/14 65/15
 | 
					 | 
				
			||||||
f 72/10 54/16 38/17 39/11
 | 
					 | 
				
			||||||
f 1/18 39/11 38/17 75/19
 | 
					 | 
				
			||||||
f 28/20 26/21 29/22 27/23
 | 
					 | 
				
			||||||
f 82/24 33/25 85/26
 | 
					 | 
				
			||||||
f 75/19 38/17 56/27 77/28
 | 
					 | 
				
			||||||
f 77/28 65/15 60/29 64/30
 | 
					 | 
				
			||||||
f 73/31 4/32 6/33 55/34
 | 
					 | 
				
			||||||
f 68/35 30/36 43/37 45/38
 | 
					 | 
				
			||||||
f 66/39 47/40 46/41 53/42
 | 
					 | 
				
			||||||
f 11/43 31/44 29/22 26/21
 | 
					 | 
				
			||||||
f 20/45 21/46 19/47 71/48
 | 
					 | 
				
			||||||
f 70/49 40/50 19/47 21/46
 | 
					 | 
				
			||||||
f 59/51 69/14 76/52 57/53
 | 
					 | 
				
			||||||
f 3/8 37/7 39/11 1/18
 | 
					 | 
				
			||||||
f 28/20 22/54 64/30 60/29
 | 
					 | 
				
			||||||
f 71/48 18/55 25/56 27/57
 | 
					 | 
				
			||||||
f 69/14 51/13 49/58 76/52
 | 
					 | 
				
			||||||
f 13/59 53/42 22/54 25/60
 | 
					 | 
				
			||||||
f 36/61 23/62 21/46 20/45
 | 
					 | 
				
			||||||
f 58/63 74/64 11/65 57/66
 | 
					 | 
				
			||||||
f 57/53 11/43 26/21 59/51
 | 
					 | 
				
			||||||
f 19/47 17/67 18/55 71/48
 | 
					 | 
				
			||||||
f 73/31 12/68 10/2 63/1
 | 
					 | 
				
			||||||
f 68/35 66/39 10/69 12/70
 | 
					 | 
				
			||||||
f 74/64 32/71 31/72 11/65
 | 
					 | 
				
			||||||
f 53/42 46/41 64/30 22/54
 | 
					 | 
				
			||||||
f 25/56 18/55 61/4 13/3
 | 
					 | 
				
			||||||
f 49/58 44/73 80/74
 | 
					 | 
				
			||||||
f 45/38 3/8 1/18 47/40
 | 
					 | 
				
			||||||
f 9/9 48/75 6/33 4/32
 | 
					 | 
				
			||||||
f 62/76 40/50 52/12 56/27
 | 
					 | 
				
			||||||
f 81/77 7/78 87/79
 | 
					 | 
				
			||||||
f 31/80 36/61 20/45 29/81
 | 
					 | 
				
			||||||
f 83/82 15/83 88/84
 | 
					 | 
				
			||||||
f 36/85 79/86 23/87
 | 
					 | 
				
			||||||
f 78/88 58/63 57/66
 | 
					 | 
				
			||||||
f 17/67 19/47 40/50 62/76
 | 
					 | 
				
			||||||
f 45/38 47/40 66/39 68/35
 | 
					 | 
				
			||||||
f 51/13 70/49 44/89 49/58
 | 
					 | 
				
			||||||
f 4/32 73/31 63/1 2/90
 | 
					 | 
				
			||||||
f 12/70 14/91 30/36 68/35
 | 
					 | 
				
			||||||
f 84/92 41/93 86/94
 | 
					 | 
				
			||||||
f 33/95 86/96 90/97
 | 
					 | 
				
			||||||
f 70/49 21/46 23/62 44/89
 | 
					 | 
				
			||||||
f 54/16 62/76 56/27 38/17
 | 
					 | 
				
			||||||
f 29/81 20/45 71/48 27/57
 | 
					 | 
				
			||||||
f 37/7 35/6 48/75 9/9
 | 
					 | 
				
			||||||
f 5/98 17/67 62/76 54/16
 | 
					 | 
				
			||||||
f 18/55 17/67 5/98 61/4
 | 
					 | 
				
			||||||
f 10/69 66/39 53/42 13/59
 | 
					 | 
				
			||||||
f 12/68 73/31 55/34 14/99
 | 
					 | 
				
			||||||
f 51/13 52/12 40/50 70/49
 | 
					 | 
				
			||||||
f 27/23 25/60 22/54 28/20
 | 
					 | 
				
			||||||
f 65/15 69/14 59/51 60/29
 | 
					 | 
				
			||||||
f 56/27 52/12 65/15 77/28
 | 
					 | 
				
			||||||
f 46/41 75/19 77/28 64/30
 | 
					 | 
				
			||||||
f 60/29 59/51 26/21 28/20
 | 
					 | 
				
			||||||
f 47/40 1/18 75/19 46/41
 | 
					 | 
				
			||||||
f 2/90 5/98 54/16 72/10
 | 
					 | 
				
			||||||
f 4/32 2/90 72/10 9/9
 | 
					 | 
				
			||||||
f 43/37 67/5 3/8 45/38
 | 
					 | 
				
			||||||
f 2/90 63/1 61/4 5/98
 | 
					 | 
				
			||||||
f 82/100 7/78 8/101
 | 
					 | 
				
			||||||
f 82/24 34/102 33/25
 | 
					 | 
				
			||||||
f 81/103 15/83 16/104
 | 
					 | 
				
			||||||
f 81/77 8/101 7/78
 | 
					 | 
				
			||||||
f 83/82 41/93 42/105
 | 
					 | 
				
			||||||
f 83/82 16/104 15/83
 | 
					 | 
				
			||||||
f 84/92 33/25 34/102
 | 
					 | 
				
			||||||
f 84/92 42/106 41/93
 | 
					 | 
				
			||||||
f 30/36 83/107 42/108 43/37
 | 
					 | 
				
			||||||
f 42/108 84/109 67/5 43/37
 | 
					 | 
				
			||||||
f 67/5 84/109 34/110 35/6
 | 
					 | 
				
			||||||
f 55/34 6/33 8/111 81/112
 | 
					 | 
				
			||||||
f 55/34 81/112 16/113 14/99
 | 
					 | 
				
			||||||
f 34/110 82/114 48/75 35/6
 | 
					 | 
				
			||||||
f 48/75 82/114 8/111 6/33
 | 
					 | 
				
			||||||
f 30/36 14/91 16/115 83/107
 | 
					 | 
				
			||||||
f 7/78 82/100 85/26
 | 
					 | 
				
			||||||
f 15/83 81/103 87/116
 | 
					 | 
				
			||||||
f 41/93 83/82 88/84
 | 
					 | 
				
			||||||
f 33/25 84/92 86/94
 | 
					 | 
				
			||||||
f 80/74 50/117 49/58
 | 
					 | 
				
			||||||
f 23/87 24/118 80/74
 | 
					 | 
				
			||||||
f 80/74 44/73 23/87
 | 
					 | 
				
			||||||
f 79/86 36/85 31/72
 | 
					 | 
				
			||||||
f 79/86 24/118 23/87
 | 
					 | 
				
			||||||
f 31/72 32/71 79/86
 | 
					 | 
				
			||||||
f 78/88 49/58 50/117
 | 
					 | 
				
			||||||
f 78/88 57/66 76/52
 | 
					 | 
				
			||||||
f 76/52 49/58 78/88
 | 
					 | 
				
			||||||
f 24/118 79/86 89/119
 | 
					 | 
				
			||||||
f 79/86 32/71 89/119
 | 
					 | 
				
			||||||
f 32/71 74/64 89/119
 | 
					 | 
				
			||||||
f 74/64 58/63 89/119
 | 
					 | 
				
			||||||
f 58/63 78/88 89/119
 | 
					 | 
				
			||||||
f 78/88 50/117 89/119
 | 
					 | 
				
			||||||
f 50/117 80/74 89/119
 | 
					 | 
				
			||||||
f 80/74 24/118 89/119
 | 
					 | 
				
			||||||
f 86/96 41/120 90/97
 | 
					 | 
				
			||||||
f 41/120 88/121 90/97
 | 
					 | 
				
			||||||
f 88/121 15/122 90/97
 | 
					 | 
				
			||||||
f 15/122 87/123 90/97
 | 
					 | 
				
			||||||
f 87/123 7/124 90/97
 | 
					 | 
				
			||||||
f 7/124 85/125 90/97
 | 
					 | 
				
			||||||
f 85/125 33/95 90/97
 | 
					 | 
				
			||||||
@@ -1,143 +1,145 @@
 | 
				
			|||||||
-- support for i18n
 | 
					-- Boilerplate to support localized strings if intllib mod is installed.
 | 
				
			||||||
local S = minetest.get_translator("bushes_classic")
 | 
					local S
 | 
				
			||||||
 | 
					if (minetest.get_modpath("intllib")) then
 | 
				
			||||||
 | 
					  dofile(minetest.get_modpath("intllib").."/intllib.lua")
 | 
				
			||||||
 | 
					  S = intllib.Getter(minetest.get_current_modname())
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  S = function ( s ) return s end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
plantlife_bushes = {}
 | 
					plantlife_bushes = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- TODO: add support for nodebreakers? those dig like mese picks
 | 
					-- TODO: add support for nodebreakers? those dig like mese picks
 | 
				
			||||||
plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
					plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger) 
 | 
				
			||||||
	if not (digger and pos and oldnode) then
 | 
						if( not( digger ) or not( pos ) or not (oldnode )) then
 | 
				
			||||||
		return
 | 
							return nil;
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- find out which bush type we are dealing with
 | 
						-- find out which bush type we are dealing with
 | 
				
			||||||
	local bush_name   = ""
 | 
						local bush_name   = "";
 | 
				
			||||||
	local can_harvest = false
 | 
						local can_harvest = false;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	if oldnode.name == "bushes:fruitless_bush" then
 | 
						if( oldnode.name == 'bushes:fruitless_bush' ) then
 | 
				
			||||||
		-- this bush has not grown fruits yet (but will eventually)
 | 
							-- this bush has not grown fruits yet (but will eventually)
 | 
				
			||||||
		bush_name = oldmetadata.fields.bush_type
 | 
							bush_name   = oldmetadata[ 'fields' ][ 'bush_type' ];
 | 
				
			||||||
		-- no fruits to be found, so can_harvest stays false
 | 
							-- no fruits to be found, so can_harvest stays false
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		local name_parts = oldnode.name:split(":")
 | 
							local name_parts = oldnode.name:split( ":" );
 | 
				
			||||||
		if #name_parts >= 2 and name_parts[2] ~= nil then
 | 
							if( #name_parts >= 2 and name_parts[2]~=nil ) then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			name_parts = name_parts[2]:split("_")
 | 
								name_parts = name_parts[2]:split( "_" );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if #name_parts >= 2 and name_parts[1] ~= nil then
 | 
								if( #name_parts >= 2 and name_parts[1]~=nil ) then
 | 
				
			||||||
				bush_name = name_parts[1]
 | 
									bush_name   = name_parts[1];
 | 
				
			||||||
				-- this bush really carries fruits
 | 
									-- this bush really carries fruits
 | 
				
			||||||
				can_harvest = true
 | 
									can_harvest = true;
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- find out which tool the digger was wielding (if any)
 | 
						-- find out which tool the digger was wielding (if any)
 | 
				
			||||||
	local toolstack = digger:get_wielded_item()
 | 
						local toolstack    = digger:get_wielded_item();
 | 
				
			||||||
	local capabilities = toolstack:get_tool_capabilities()
 | 
						local capabilities = toolstack:get_tool_capabilities();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- what the player will get
 | 
						-- what the player will get
 | 
				
			||||||
	local harvested
 | 
						local harvested    = "";
 | 
				
			||||||
 | 
						local amount       = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- failure to find out what the tool can do: destroy the bush and return nothing
 | 
						-- failure to find out what the tool can do: destroy the bush and return nothing
 | 
				
			||||||
	local groupcaps = capabilities.groupcaps
 | 
						if( not( capabilities["groupcaps"] )) then
 | 
				
			||||||
	if not groupcaps then
 | 
							return nil;
 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- digging with the hand or something like that
 | 
						-- digging with the hand or something like that
 | 
				
			||||||
	elseif groupcaps.snappy then
 | 
						elseif(	capabilities["groupcaps"]["snappy"] ) then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- plant a new bush without fruits
 | 
							-- plant a new bush without fruits
 | 
				
			||||||
		minetest.swap_node(pos, {type = "node", name = "bushes:fruitless_bush"})
 | 
							minetest.set_node(pos,{type='node',name='bushes:fruitless_bush'})
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = minetest.get_meta( pos );
 | 
				
			||||||
		meta:set_string('bush_type', bush_name)
 | 
							meta:set_string( 'bush_type', bush_name ); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- construct the stack of fruits the player will get
 | 
							-- construct the stack of fruits the player will get
 | 
				
			||||||
		-- only bushes that have grown fruits can actually give fruits
 | 
							-- only bushes that have grown fruits can actually give fruits
 | 
				
			||||||
		if can_harvest then
 | 
							if( can_harvest == true ) then
 | 
				
			||||||
			local amount = "4"
 | 
								amount    = "4";
 | 
				
			||||||
			harvested = "bushes:" .. bush_name .. " " .. amount
 | 
								harvested = "bushes:"..bush_name.." "..amount;
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- something like a shovel
 | 
						-- something like a shovel
 | 
				
			||||||
	elseif groupcaps.crumbly then
 | 
						elseif( capabilities["groupcaps"]["crumbly"] ) then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- with a chance of 1/3, return 2 bushes
 | 
							-- 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";
 | 
				
			||||||
			amount = "2"
 | 
					 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			amount = "1"
 | 
								amount = "1";
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		-- return the bush itself
 | 
							-- return the bush itself
 | 
				
			||||||
		harvested = "bushes:" .. bush_name .. "_bush "..amount
 | 
							harvested = "bushes:" .. bush_name .. "_bush "..amount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- something like an axe
 | 
						-- something like an axe
 | 
				
			||||||
	elseif groupcaps.choppy then
 | 
						elseif( capabilities["groupcaps"]["choppy"] ) then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- the amount of sticks may vary
 | 
							-- the amount of sticks may vary
 | 
				
			||||||
		local amount = math.random(4, 20)
 | 
							amount    = math.random( 4, 20 );
 | 
				
			||||||
		-- return some sticks
 | 
							-- return some sticks
 | 
				
			||||||
		harvested = "default:stick " .. amount
 | 
							harvested = "default:stick "..amount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- nothing known - destroy the plant
 | 
						-- nothing known - destroy the plant
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		return
 | 
							return nil;
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- give the harvested result to the player
 | 
						-- give the harvested result to the player
 | 
				
			||||||
	if harvested then
 | 
						if( harvested ~= "" ) then
 | 
				
			||||||
		--minetest.chat_send_player("singleplayer","you would now get "..tostring( harvested ) );
 | 
							--minetest.chat_send_player("singleplayer","you would now get "..tostring( harvested ) );
 | 
				
			||||||
		local itemstack = ItemStack(harvested)
 | 
							digger:get_inventory():add_item( "main", harvested );
 | 
				
			||||||
		local inventory = digger:get_inventory()
 | 
					 | 
				
			||||||
		if inventory:room_for_item("main", itemstack) then
 | 
					 | 
				
			||||||
			inventory:add_item("main", itemstack)
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			minetest.item_drop(itemstack, digger, pos)
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
plantlife_bushes.after_place_node = function(pos, placer, itemstack)
 | 
					plantlife_bushes.after_place_node = function(pos, placer, itemstack)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if not (itemstack and pos) then
 | 
						if( not( itemstack ) or not( pos )) then
 | 
				
			||||||
		return
 | 
							return nil;
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local name_parts = itemstack:get_name():split(":")
 | 
						local name_parts = itemstack:get_name():split( ":" );
 | 
				
			||||||
	if #name_parts < 2 or name_parts[2] == nil then
 | 
						if( #name_parts <2 or name_parts[2]==nil ) then
 | 
				
			||||||
		return
 | 
							return nil;
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	name_parts = name_parts[2]:split("_")
 | 
						name_parts = name_parts[2]:split( "_" );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if #name_parts < 2 or name_parts[1] == nil then
 | 
						if( #name_parts <2 or name_parts[1]==nil ) then
 | 
				
			||||||
		return
 | 
							return nil;
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.swap_node(pos, {name = "bushes:fruitless_bush"})
 | 
						minetest.set_node( pos, {type='node',name='bushes:fruitless_bush'});
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = minetest.get_meta( pos );
 | 
				
			||||||
	meta:set_string("bush_type", name_parts[1])
 | 
						meta:set_string( 'bush_type', name_parts[1] ); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil;
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- regrow berries (uses a base abm instead of biome_lib because of the use of metadata).
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- regrow berries (uses a base abm instead of plants_lib because of the use of metadata).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_abm({
 | 
					minetest.register_abm({
 | 
				
			||||||
	nodenames = {"bushes:fruitless_bush"},
 | 
						nodenames = { "bushes:fruitless_bush" },
 | 
				
			||||||
	neighbors = {"group:soil", "group:potting_soil"},
 | 
					 | 
				
			||||||
	interval = 500,
 | 
						interval = 500,
 | 
				
			||||||
	chance = 5,
 | 
						chance = 5,
 | 
				
			||||||
	action = function(pos, node, active_object_count, active_object_count_wider)
 | 
						action = function(pos, node, active_object_count, active_object_count_wider)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = minetest.get_meta( pos );
 | 
				
			||||||
		local bush_name = meta:get_string("bush_type")
 | 
							local bush_name = meta:get_string( 'bush_type' ); 
 | 
				
			||||||
 | 
							if( bush_name ~= nil and bush_name ~= '' ) then
 | 
				
			||||||
		if bush_name and bush_name ~= "" then
 | 
								local dirtpos = { x = pos.x, y = pos.y-1, z = pos.z }
 | 
				
			||||||
			local dirtpos = {x = pos.x, y = pos.y-1, z = pos.z}
 | 
					 | 
				
			||||||
			local dirt = minetest.get_node(dirtpos)
 | 
								local dirt = minetest.get_node(dirtpos)
 | 
				
			||||||
			local is_soil = minetest.get_item_group(dirt.name, "soil") or minetest.get_item_group(dirt.name, "potting_soil")
 | 
								if dirt.name == "farming:soil_wet" or math.random(1,3) == 1 then
 | 
				
			||||||
 | 
									minetest.set_node( pos, {type='node',name='bushes:'..bush_name..'_bush'})
 | 
				
			||||||
			if is_soil and (dirt.name == "farming:soil_wet" or math.random(1,3) == 1) then
 | 
					 | 
				
			||||||
				minetest.swap_node( pos, {name = "bushes:" .. bush_name .. "_bush"})
 | 
					 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -147,54 +149,63 @@ minetest.register_abm({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
for i, bush_name in ipairs(bushes_classic.bushes) do
 | 
					for i, bush_name in ipairs(bushes_classic.bushes) do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local desc = bushes_classic.bushes_descriptions[i]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node(":bushes:basket_"..bush_name, {
 | 
						minetest.register_node(":bushes:basket_"..bush_name, {
 | 
				
			||||||
		description = bushes_classic.bushes_descriptions[i][5],
 | 
							description = S("Basket with "..desc.." Pies"),
 | 
				
			||||||
		drawtype = "mesh",
 | 
					 | 
				
			||||||
		mesh = "bushes_basket_full.obj",
 | 
					 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
			"bushes_basket_pie_"..bush_name..".png",
 | 
							"bushes_basket_"..bush_name.."_top.png",
 | 
				
			||||||
			"bushes_basket.png"
 | 
							"bushes_basket_bottom.png",
 | 
				
			||||||
 | 
							"bushes_basket_side.png"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		paramtype = "light",
 | 
					 | 
				
			||||||
		paramtype2 = "facedir",
 | 
					 | 
				
			||||||
		on_use = minetest.item_eat(18),
 | 
							on_use = minetest.item_eat(18),
 | 
				
			||||||
		groups = { dig_immediate = 3 },
 | 
							groups = { dig_immediate = 3 },
 | 
				
			||||||
		is_ground_content = false,
 | 
					 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local texture_top, texture_bottom
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local groups = {snappy = 3, bush = 1, flammable = 2, attached_node=1}
 | 
						local groups = {snappy = 3, bush = 1, flammable = 2, attached_node=1}
 | 
				
			||||||
	if bush_name == "mixed_berry" then
 | 
						if bush_name == "mixed_berry" then
 | 
				
			||||||
		bush_name = "fruitless";
 | 
							bush_name = "fruitless";
 | 
				
			||||||
 | 
							desc      = S("currently fruitless");
 | 
				
			||||||
 | 
							texture_top = "bushes_fruitless_bush_top.png"
 | 
				
			||||||
 | 
							texture_bottom = "bushes_fruitless_bush_bottom.png"
 | 
				
			||||||
		groups.not_in_creative_inventory = 1
 | 
							groups.not_in_creative_inventory = 1
 | 
				
			||||||
	end
 | 
						else
 | 
				
			||||||
 | 
							texture_top = "bushes_bush_top.png"
 | 
				
			||||||
	local node_dig_prediction
 | 
							texture_bottom = "bushes_bush_bottom.png"
 | 
				
			||||||
	local node_placement_prediction
 | 
					 | 
				
			||||||
	if bush_name ~= "fruitless" then
 | 
					 | 
				
			||||||
		node_dig_prediction = "bushes:fruitless_bush"
 | 
					 | 
				
			||||||
		node_placement_prediction = "bushes:fruitless_bush"
 | 
					 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node(":bushes:" .. bush_name .. "_bush", {
 | 
						minetest.register_node(":bushes:" .. bush_name .. "_bush", {
 | 
				
			||||||
		description = bushes_classic.bushes_descriptions[i][6],
 | 
								description = S(desc.." Bush"),
 | 
				
			||||||
		drawtype = "mesh",
 | 
								drawtype = "nodebox",
 | 
				
			||||||
		mesh = "bushes_bush.obj",
 | 
								tiles = {texture_top, texture_bottom, "bushes_" .. bush_name .. "_bush.png"},
 | 
				
			||||||
		tiles = {"bushes_bush_"..bush_name..".png"},
 | 
								inventory_image = "bushes_" .. bush_name .. "_bush.png",
 | 
				
			||||||
		paramtype = "light",
 | 
								paramtype = "light",
 | 
				
			||||||
		sunlight_propagates = true,
 | 
								sunlight_propagates = true,
 | 
				
			||||||
		walkable = false,
 | 
								walkable = false,
 | 
				
			||||||
		groups = groups,
 | 
								node_box = {
 | 
				
			||||||
		sounds = default.node_sound_leaves_defaults(),
 | 
									type = "fixed",
 | 
				
			||||||
		drop = "",
 | 
									fixed = {
 | 
				
			||||||
		node_dig_prediction = node_dig_prediction,
 | 
										{-1/16,	-8/16,	-1/16,	1/16,	-6/16,	1/16},
 | 
				
			||||||
		node_placement_prediction = node_placement_prediction,
 | 
										{-4/16,	-6/16,	-4/16,	4/16,	5/16,	4/16},
 | 
				
			||||||
		after_dig_node = function( pos, oldnode, oldmetadata, digger )
 | 
										{-5/16,	-5/16,	-5/16,	5/16,	3/16,	5/16},
 | 
				
			||||||
			return plantlife_bushes.after_dig_node(pos, oldnode, oldmetadata, digger);
 | 
										{-6/16,	-4/16,	-6/16,	6/16,	2/16,	6/16},
 | 
				
			||||||
		end,
 | 
										{-6.5/16,	-3/16,	-6.5/16,	6.5/16,	-2/16,	6.5/16},
 | 
				
			||||||
		after_place_node = function( pos, placer, itemstack )
 | 
										{-3/16,	5/16,	-3/16,	3/16,	6/16,	3/16},
 | 
				
			||||||
			return plantlife_bushes.after_place_node(pos, placer, itemstack);
 | 
										{-2/16,	5/16,	-2/16,	2/16,	7/16,	2/16}
 | 
				
			||||||
		end,
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								groups = groups,
 | 
				
			||||||
 | 
								sounds = default.node_sound_leaves_defaults(),
 | 
				
			||||||
 | 
								drop = "",
 | 
				
			||||||
 | 
								after_dig_node = function( pos, oldnode, oldmetadata, digger )
 | 
				
			||||||
 | 
									return plantlife_bushes.after_dig_node(pos, oldnode, oldmetadata, digger);
 | 
				
			||||||
 | 
								end,
 | 
				
			||||||
 | 
								after_place_node = function( pos, placer, itemstack )
 | 
				
			||||||
 | 
									return plantlife_bushes.after_place_node(pos, placer, itemstack);
 | 
				
			||||||
 | 
								end,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- do not spawn fruitless bushes
 | 
						-- do not spawn fruitless bushes
 | 
				
			||||||
@@ -203,13 +214,15 @@ for i, bush_name in ipairs(bushes_classic.bushes) do
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node(":bushes:basket_empty", {
 | 
					minetest.register_node(":bushes:basket_empty", {
 | 
				
			||||||
    description = S("Basket"),
 | 
					    description = S("Basket"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
					    tiles = {
 | 
				
			||||||
	mesh = "bushes_basket_empty.obj",
 | 
						"bushes_basket_empty_top.png",
 | 
				
			||||||
	tiles = { "bushes_basket.png" },
 | 
						"bushes_basket_bottom.png",
 | 
				
			||||||
	paramtype = "light",
 | 
						"bushes_basket_side.png"
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
					    },
 | 
				
			||||||
    groups = { dig_immediate = 3 },
 | 
					    groups = { dig_immediate = 3 },
 | 
				
			||||||
	is_ground_content = false,
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_blackberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_blueberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_bottom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 248 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_empty_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 271 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_gooseberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_mixed_berry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_raspberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 341 B  | 
							
								
								
									
										
											BIN
										
									
								
								bushes_classic/textures/bushes_basket_strawberry_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB  |