1
0
mirror of https://github.com/mt-mods/plantlife_modpack.git synced 2025-06-30 15:10:34 +02:00

43 Commits

Author SHA1 Message Date
3b524b01d7 Added comment for node string tests 2014-08-24 00:15:17 +10:00
06c8d1c5ea Re-wrote abstract_ferns.grow_tree_fern() 2014-08-23 21:14:03 +10:00
b815ffc578 Updated "lady ferns" 2014-08-23 20:23:39 +10:00
85dd10e88a Updated horsetails 2014-08-23 18:45:27 +10:00
ccee13df66 Merge branch 'multinode' of https://github.com/VanessaE/plantlife_modpack.git into Zeno 2014-08-23 17:27:04 +10:00
d7d56ec1b0 Merge branch 'master' into Zeno 2014-08-23 17:26:55 +10:00
97f7b11f86 Early exit 2014-08-22 10:24:39 -04:00
e34dc49f07 Minor changes 2014-08-22 10:24:30 -04:00
329f6eb5d5 Random lady fern face direction 2014-08-22 10:24:24 -04:00
aa8668f69b Moved ferns "'module' loaded" asserts to top of files 2014-08-22 10:24:13 -04:00
5b5652c552 Renamed config/settings var names 2014-08-22 10:24:02 -04:00
6b7b15ba4f Early exit 2014-08-22 18:15:03 +10:00
d3daa28b06 Minor changes 2014-08-22 17:52:51 +10:00
6b2a7785da Random lady fern face direction 2014-08-22 17:48:38 +10:00
9a6491a366 Moved ferns "'module' loaded" asserts to top of files 2014-08-22 17:07:27 +10:00
4eb20c03c2 Renamed config/settings var names 2014-08-22 17:04:34 +10:00
77d0a1040c Merge branch 'master' of https://github.com/VanessaE/plantlife_modpack.git into Zeno 2014-08-22 15:58:44 +10:00
13a249369d Merge branch 'api-tweak' of https://github.com/VanessaE/plantlife_modpack.git into Zeno 2014-08-22 15:57:12 +10:00
69ce1ff826 Merge branch 'ferns-cleanup' of https://github.com/VanessaE/plantlife_modpack.git into Zeno 2014-08-22 15:57:04 +10:00
282e3c3317 Merge branch 'master' of https://github.com/VanessaE/plantlife_modpack.git into Zeno 2014-08-22 15:48:39 +10:00
878c5dd449 Fixed stupid node names 2014-08-21 01:12:17 -04:00
9ad737f951 typo (bug fix) 2014-08-21 01:12:17 -04:00
4fb3cdfffb derp 2014-08-21 01:12:17 -04:00
174096ac87 Removed obsolete or useless code
Some commented code makes no sense because there is not comment as to why it's commented out. Removed.
2014-08-21 01:12:17 -04:00
7357524224 Bump minor version number 2014-08-21 01:12:17 -04:00
c5f6d6831e Stop polluting global namespace 2014-08-21 01:12:17 -04:00
a3e926421a Renamed SeTTiNGS.txt to settings.lua
It's a Lua file... the extension should reflect what it actually is
2014-08-21 01:12:17 -04:00
62b27570f4 Refactor abstract_ferns.grow_giant_tree_fern
Arguably more readable; definately more maintainable

Potentially slower but if it is the difference would be negligable
2014-08-21 01:12:17 -04:00
76414325cf Renamed "leave" to "leaf" where appropriate 2014-08-21 01:12:17 -04:00
549d39d4d2 Early exit from abstract_ferns.grow_giant_tree_fern
(very) small performance increase
2014-08-21 01:12:17 -04:00
b72f1dd5eb syntax errors 2014-08-21 00:50:29 -04:00
d1369c25cf Merge branch 'Zeno' of https://github.com/Zeno-/plantlife_modpack into ferns-cleanup 2014-08-20 15:42:50 -04:00
1d0543b435 allow random_facedir parameter during mapgen call 2014-08-20 13:38:44 -04:00
38d972d58e Fixed stupid node names 2014-08-20 22:43:32 +10:00
cd0735203a typo (bug fix) 2014-08-20 22:30:22 +10:00
27156fdd71 derp 2014-08-20 21:51:32 +10:00
655cff9f76 Removed obsolete or useless code
Some commented code makes no sense because there is not comment as to why it's commented out. Removed.
2014-08-20 20:37:48 +10:00
abdf76566a Bump minor version number 2014-08-20 18:36:13 +10:00
b069341d33 Stop polluting global namespace 2014-08-20 18:35:08 +10:00
64471c9bfc Renamed SeTTiNGS.txt to settings.lua
It's a Lua file... the extension should reflect what it actually is
2014-08-20 18:05:01 +10:00
fc3363d439 Refactor abstract_ferns.grow_giant_tree_fern
Arguably more readable; definately more maintainable

Potentially slower but if it is the difference would be negligable
2014-08-20 18:00:59 +10:00
786a28a5e9 Renamed "leave" to "leaf" where appropriate 2014-08-20 16:57:01 +10:00
25c8c8aeb0 Early exit from abstract_ferns.grow_giant_tree_fern
(very) small performance increase
2014-08-20 16:41:43 +10:00
522 changed files with 5437 additions and 7576 deletions

View File

@ -1,14 +0,0 @@
unused_args = false
allow_defined_top = true
read_globals = {
"biome_lib",
"DIR_DELIM",
"minetest", "core",
"dump",
"vector", "nodeupdate",
"VoxelManip", "VoxelArea",
"PseudoRandom", "ItemStack",
"default",
}

View File

@ -1,72 +0,0 @@
-- 3D Mushroom mod by VanessaE
mushroom = {}
-- support for i18n
local S = minetest.get_translator("3dmushrooms")
minetest.override_item("flowers:mushroom_fertile_brown", {
drawtype = "mesh",
mesh = "3dmushrooms.obj",
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")
minetest.log("info", S("[3D Mushrooms] loaded."))

View File

@ -1,8 +0,0 @@
# textdomain: 3dmushrooms
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# reusityback, 2022.
[3D Mushrooms] loaded.=[3D Mushrooms] geladen.

View File

@ -1,8 +0,0 @@
# textdomain: 3dmushrooms
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Jolesh, 2022.
[3D Mushrooms] loaded.=[3D Mushrooms] ŝargis.

View File

@ -1,8 +0,0 @@
# textdomain: 3dmushrooms
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
[3D Mushrooms] loaded.=

View File

@ -1,2 +0,0 @@
name = 3dmushrooms
depends = default, flowers

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

612
API.txt Normal file
View 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
View File

@ -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,
unless otherwise stated.
For the code, Ironzorg's textures, and everything else: WTFPL
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
View File

@ -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
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
of the plants in any region they appear in has been fixed and brought under
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
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.
------------------------------------------------------------------------------

3
along_shore/depends.txt Normal file
View File

@ -0,0 +1,3 @@
default
plants_lib
flowers_plus?

9
along_shore/init.lua Normal file
View 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...")
-----------------------------------------------------------------------------------------------

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

View 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
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 B

2
bushes/depends.txt Normal file
View File

@ -0,0 +1,2 @@
default
plants_lib

View File

@ -1,55 +1,44 @@
-- Bushes Mod by Mossmanikin, Evergreen, & Neuromancer
-- The initial code for this was taken from Mossmanikin's Grasses Mod,
-- then heavilly modified by Neuromancer for this mod.
-- The initial code for this was taken from Mossmanikin's Grasses Mod, then heavilly modified by Neuromancer for this mod.
-- Mossmanikin also greatly helped with providing samples for coding.
-- bush leaf textures are from VannessaE's moretrees mod.
-- (Leaf texture created by RealBadAngel or VanessaE)
-- bush leaf textures are cc-by-sa 3.0. from VannessaE's moretrees mod. (Leaf texture created by RealBadAngel or VanessaE)
-- Branch textures created by Neuromancer.
-- Licence for Code and Non-Bush leaf code is WTFPL.
abstract_bushes = {}
-- support for i18n
local S = minetest.get_translator("bushes")
abstract_bushes = {}
local bushes_bush_rarity = tonumber(minetest.settings:get("bushes_bush_rarity")) or 99.9
local bushes_bush_rarity_fertility = tonumber(minetest.settings:get("bushes_bush_rarity_fertility")) or 1.5
local bushes_youngtrees_rarity = tonumber(minetest.settings:get("bushes_youngtrees_rarity")) or 100
local bushes_youngtrees_rarity_fertility = tonumber(minetest.settings:get("bushes_youngtrees_rarity_fertility")) or 0.6
minetest.register_node("bushes:youngtree2_bottom", {
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",
minetest.register_node("bushes:youngtree2_bottom", {
description = "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,
is_ground_content = true,
node_box = {
type = "fixed",
fixed = {
--{0.375000,-0.500000,-0.500000,0.500000,0.500000,-0.375000}, --NodeBox 1
{-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
}
},
groups = {snappy=3,flammable=2,attached_node=1},
node_box = {
type = "fixed",
fixed = {
--{0.375000,-0.500000,-0.500000,0.500000,0.500000,-0.375000}, --NodeBox 1
{-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
}
},
groups = {snappy=3,flammable=2},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick'
})
local BushBranchCenter = { {1,1}, {3,2} }
local BushBranchCenter = { {1,1}, {3,2} }
for i in pairs(BushBranchCenter) do
local Num = BushBranchCenter[i][1]
local TexNum = BushBranchCenter[i][2]
local Num = BushBranchCenter[i][1]
local TexNum = BushBranchCenter[i][2]
minetest.register_node("bushes:bushbranches"..Num, {
description = S("Bush Branches @1", Num),
description = "Bush Branches "..Num,
drawtype = "nodebox",
tiles = {
"bushes_leaves_"..TexNum..".png",
"bushes_branches_center_"..TexNum..".png"
},
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
@ -63,43 +52,41 @@ for i in pairs(BushBranchCenter) do
},
inventory_image = "bushes_branches_center_"..TexNum..".png",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
paramtype2 = "facedir",
sunlight_propagates = true,
groups = {
-- tree=1, -- MM: disabled because some recipes use group:tree for trunks
snappy=3,
flammable=2,
leaves=1,
attached_node=1
snappy=3,
flammable=2,
leaves=1
},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick 4'
})
end
local BushBranchSide = { {2,1}, {4,2} }
local BushBranchSide = { {2,1}, {4,2} }
for i in pairs(BushBranchSide) do
local Num = BushBranchSide[i][1]
local TexNum = BushBranchSide[i][2]
local Num = BushBranchSide[i][1]
local TexNum = BushBranchSide[i][2]
minetest.register_node("bushes:bushbranches"..Num, {
description = S("Bush Branches @1", Num),
description = "Bush Branches "..Num,
drawtype = "nodebox",
tiles = {
--[[top]] "bushes_leaves_"..TexNum..".png",
--[[top]] "bushes_leaves_"..TexNum..".png",
--[[bottom]]"bushes_branches_center_"..TexNum..".png",
--[[right]] "bushes_branches_left_"..TexNum..".png",
--[[left]] "bushes_branches_right_"..TexNum..".png", -- MM: We could also mirror the previous here,
--[[back]] "bushes_branches_center_"..TexNum..".png",-- unless U really want 'em 2 B different
--[[front]] "bushes_branches_right_"..TexNum..".png"
--[[back]] "bushes_branches_center_"..TexNum..".png",-- unless U really want 'em 2 B different
--[[front]] "bushes_branches_right_"..TexNum..".png"
},
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
-- { left , bottom , front, right , top , back }
{0.137748,-0.491944, 0.5 ,-0.125000,-0.179444,-0.007790}, --NodeBox 1
{0.262748,-0.185995, 0.5 ,-0.237252, 0.126505,-0.260269}, --NodeBox 2
{0.500000, 0.125000, 0.5 ,-0.500000, 0.500000,-0.500000}, --NodeBox 3
-- { left , bottom , front, right , top , back }
{0.137748,-0.491944, 0.5 ,-0.125000,-0.179444,-0.007790}, --NodeBox 1
{0.262748,-0.185995, 0.5 ,-0.237252, 0.126505,-0.260269}, --NodeBox 2
{0.500000, 0.125000, 0.5 ,-0.500000, 0.500000,-0.500000}, --NodeBox 3
},
},
selection_box = {
@ -108,41 +95,38 @@ for i in pairs(BushBranchSide) do
},
inventory_image = "bushes_branches_right_"..TexNum..".png",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
paramtype2 = "facedir",
sunlight_propagates = true,
groups = {
-- tree=1, -- MM: disabled because some recipes use group:tree for trunks
snappy=3,
flammable=2,
leaves=1,
attached_node=1
snappy=3,
flammable=2,
leaves=1
},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick 3'
})
end
local BushLeafNode = { {1}, {2}}
local BushLeafNode = { {1}, {2}}
for i in pairs(BushLeafNode) do
local Num = BushLeafNode[i][1]
local Num = BushLeafNode[i][1]
minetest.register_node("bushes:BushLeaves"..Num, {
description = S("Bush Leaves @1", Num),
description = "Bush Leaves "..Num,
drawtype = "allfaces_optional",
tiles = {"bushes_leaves_"..Num..".png"},
use_texture_alpha = "clip",
paramtype = "light",
groups = { -- MM: Should we add leafdecay?
groups = { -- MM: Should we add leafdecay?
snappy=3,
flammable=2,
attached_node=1,
leaves=1
attached_node=1
},
sounds = default.node_sound_leaves_defaults(),
})
sounds = default.node_sound_leaves_defaults(),
})
end
abstract_bushes.grow_bush = function(pos)
local leaf_type = math.random(1,2)
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
@ -160,24 +144,26 @@ abstract_bushes.grow_bush = function(pos)
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
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 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
bush_branch_type = 2
@ -193,74 +179,80 @@ abstract_bushes.grow_bush_node = function(pos,dir, leaf_type)
bush_branch_type = 3
dir = 1
end
if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
or minetest.get_node(right_here).name == "default:junglegrass" then
minetest.swap_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir})
minetest.set_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir})
--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")")
minetest.swap_node(above_right_here, {name="bushes:BushLeaves"..leaf_type})
minetest.set_node(above_right_here, {name="bushes:BushLeaves"..leaf_type})
local chance_of_high_leaves = math.random(1,10)
if chance_of_high_leaves> 5 then
local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
--minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")")
minetest.swap_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type})
minetest.set_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type})
end
end
end
pl.register_on_generate({
surface = {
"default:dirt_with_grass",
"stoneage:grass_with_silex",
"sumpf:peat",
"sumpf:sumpf"
},
noise_params = pl.generate_noise_params({rarity = bushes_bush_rarity, rarity_fertility = bushes_bush_rarity_fertility}),
min_elevation = 1, -- above sea level
plantslib:register_generate_plant({
surface = {
"default:dirt_with_grass",
"stoneage:grass_with_silex",
"sumpf:peat",
"sumpf:sumpf"
},
"bushes:bushes",
abstract_bushes.grow_bush
)
max_count = 15, --10,15
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)
local height = math.random(4,5)
abstract_bushes.grow_youngtree2 = function(pos)
local height = math.random(4,5)
abstract_bushes.grow_youngtree_node2(pos,height)
end
abstract_bushes.grow_youngtree_node2 = function(pos, height)
local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z}
local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
local three_above_right_here = {x=pos.x, y=pos.y+4, z=pos.z}
if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
or minetest.get_node(right_here).name == "default:junglegrass" then
if height == 4 then
local two_above_right_here_south = {x=pos.x, y=pos.y+3, z=pos.z-1}
local three_above_right_here_south = {x=pos.x, y=pos.y+4, z=pos.z-1}
minetest.swap_node(right_here, {name="bushes:youngtree2_bottom"})
minetest.swap_node(above_right_here, {name="bushes:youngtree2_bottom"})
minetest.swap_node(two_above_right_here, {name="bushes:bushbranches2" , param2=2})
minetest.swap_node(two_above_right_here_south, {name="bushes:bushbranches2" , param2=0})
minetest.swap_node(three_above_right_here, {name="bushes:BushLeaves1" })
minetest.swap_node(three_above_right_here_south, {name="bushes:BushLeaves1" })
local two_above_right_here_south = {x=pos.x, y=pos.y+3, z=pos.z-1}
local three_above_right_here_south = {x=pos.x, y=pos.y+4, z=pos.z-1}
minetest.set_node(right_here, {name="bushes:youngtree2_bottom"})
minetest.set_node(above_right_here, {name="bushes:youngtree2_bottom"})
minetest.set_node(two_above_right_here, {name="bushes:bushbranches2" , param2=2})
minetest.set_node(two_above_right_here_south, {name="bushes:bushbranches2" , param2=0})
minetest.set_node(three_above_right_here, {name="bushes:BushLeaves1" })
minetest.set_node(three_above_right_here_south, {name="bushes:BushLeaves1" })
end
end
end
pl.register_on_generate({
surface = {
"default:dirt_with_grass",
"stoneage:grass_with_silex",
"sumpf:peat",
"sumpf:sumpf"
},
noise_params = pl.generate_noise_params({rarity = bushes_youngtrees_rarity, rarity_fertility = bushes_youngtrees_rarity_fertility}),
min_elevation = 1, -- above sea level
plantslib:register_generate_plant({
surface = {
"default:dirt_with_grass",
"stoneage:grass_with_silex",
"sumpf:peat",
"sumpf:sumpf"
},
"bushes:youngtrees",
abstract_bushes.grow_youngtree2
)
max_count = 55, --10,15
rarity = 101 - 4, --3,4
min_elevation = 1, -- above sea level
plantlife_limit = -0.9,
},
abstract_bushes.grow_youngtree2
)
--http://dev.minetest.net/Node_Drawtypes

View File

@ -1,10 +0,0 @@
# textdomain: bushes
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
Young Tree 2 (bottom)=Strauch 2 (Ansatz)
Bush Branches @1=Buschäste @1
Bush Leaves @1=Buschblätter @1

View File

@ -1,10 +0,0 @@
# textdomain: bushes
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Jolesh, 2022.
Young Tree 2 (bottom)=Juna Arbo 2 (malsupro)
Bush Branches @1=Arbustaj Branĉoj @1
Bush Leaves @1=Arbustaj Folioj @1

View File

@ -1,11 +0,0 @@
# textdomain: bushes
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# fat115 <fat115@framasoft.org>, 2017.
#
Young Tree 2 (bottom)=Arbuste 2 (bas)
Bush Branches @1=Branches de buisson @1
Bush Leaves @1=Feuilles de buisson @1

View File

@ -1,10 +0,0 @@
# textdomain: bushes
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
Young Tree 2 (bottom)=
Bush Branches @1=
Bush Leaves @1=

View File

@ -1,3 +0,0 @@
name = bushes
depends = default, biome_lib
optional_depends = stoneage, sumpf

View File

@ -1,17 +0,0 @@
#Bush rarity %
bushes_bush_rarity (Bush rarity %) float 99.9 0 100
#How much the rarity is reduced by fertility %
bushes_bush_rarity_fertility (Bush rarity fertility reduction %) float 1.5 0 100
#Bush minimum fertility (-1 to +1)
bushes_bush_fertility (Bush minimum fertility) float -0.7 -1 1
#Youngtree (from bushes mod) rarity %
bushes_youngtrees_rarity (Youngtree bush rarity %) float 100 0 100
#How much the rarity is reduced by fertility %
bushes_youngtrees_rarity_fertility (Youngtree bush rarity fertility reduction %) float 0.6 0 100
#Youngtree (from bushes mod) minimum fertility (-1 to +1)
bushes_youngtrees_fertility (Youngtree bush minimum fertility) float -0.5 -1 1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 B

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 B

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 B

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 598 B

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

After

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 632 B

After

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 B

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 B

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 872 B

After

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 B

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 620 B

After

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 B

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 540 B

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 B

After

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 657 B

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 693 B

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 B

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 525 B

After

Width:  |  Height:  |  Size: 647 B

View File

@ -1,92 +1,82 @@
-- support for i18n
local S = minetest.get_translator("bushes_classic")
-- 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
-- Basket
minetest.register_craft({
output = "bushes:basket_empty",
recipe = {
{ "default:stick", "default:stick", "default:stick" },
{ "", "default:stick", "" },
},
output = "bushes:basket_empty",
recipe = {
{ "default:stick", "default:stick", "default:stick" },
{ "", "default:stick", "" },
},
})
-- Sugar
if not minetest.registered_items["farming:sugar"] then
minetest.register_craftitem(":bushes:sugar", {
description = S("Sugar"),
inventory_image = "bushes_sugar.png",
on_use = minetest.item_eat(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
minetest.override_item("farming_plus:strawberry_item", {
groups = {food_strawberry = 1, food_berry = 1, flammable = 2},
})
end
minetest.register_craftitem(":bushes:sugar", {
description = S("Sugar"),
inventory_image = "bushes_sugar.png",
on_use = minetest.item_eat(1),
groups = {food_sugar=1}
})
minetest.register_craft({
output = "bushes:sugar 1",
recipe = {
{ "default:papyrus", "default:papyrus" },
},
})
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", {
description = bushes_classic.bushes_descriptions[i][2],
description = S("Raw "..desc.." pie"),
inventory_image = "bushes_"..berry.."_pie_raw.png",
on_use = minetest.item_eat(4),
})
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({
output = "bushes:"..berry.."_pie_raw 1",
recipe = {
{ "group:food_sugar", "farming:flour", "group:food_sugar" },
{ "group:food_"..berry, "group:food_"..berry, "group:food_"..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" },
{ "group:"..berry, "group:"..berry, "group:"..berry },
},
})
end
-- Cooked pie
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",
on_use = minetest.item_eat(6),
})
@ -98,9 +88,10 @@ for i, berry in ipairs(bushes_classic.bushes) do
cooktime = 30,
})
-- Slice of pie
-- slice of pie
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",
on_use = minetest.item_eat(1),
})
@ -113,6 +104,7 @@ for i, berry in ipairs(bushes_classic.bushes) do
})
-- Basket with pies
minetest.register_craft({
output = "bushes:basket_"..berry.." 1",
recipe = {
@ -121,3 +113,14 @@ for i, berry in ipairs(bushes_classic.bushes) do
},
})
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" },
},
})

View File

@ -0,0 +1,3 @@
plants_lib
farming?
farming_plus?

View File

@ -1,13 +1,20 @@
-- Bushes classic mod originally by unknown
-- 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 = {}
-- support for i18n
local S = minetest.get_translator("bushes_classic")
bushes_classic.bushes = {
"strawberry",
"strawberry",
"blackberry",
"blueberry",
"raspberry",
@ -16,21 +23,20 @@ bushes_classic.bushes = {
}
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")},
{S("Blackberry"), S("Raw Blackberry pie"), S("Cooked Blackberry pie"), S("Slice of Blackberry pie"), S("Basket with Blackberry pies"), S("Blackberry Bush")},
{S("Blueberry"), S("Raw Blueberry pie"), S("Cooked Blueberry pie"), S("Slice of Blueberry pie"), S("Basket with Blueberry pies"), S("Blueberry Bush")},
{S("Raspberry"), S("Raw Raspberry pie"), S("Cooked Raspberry pie"), S("Slice of Raspberry pie"), S("Basket with Raspberry pies"), S("Raspberry Bush")},
{S("Gooseberry"), S("Raw Gooseberry pie"), S("Cooked Gooseberry pie"), S("Slice of Gooseberry pie"), S("Basket with Gooseberry pies"), S("Gooseberry Bush")},
{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")}
"Strawberry",
"Blackberry",
"Blueberry",
"Raspberry",
"Gooseberry",
"Mixed Berry"
}
bushes_classic.spawn_list = {}
local modpath = minetest.get_modpath('bushes_classic')
dofile(modpath..'/cooking.lua')
dofile(modpath..'/nodes.lua')
dofile(minetest.get_modpath('bushes_classic') .. '/cooking.lua')
dofile(minetest.get_modpath('bushes_classic') .. '/nodes.lua')
biome_lib.register_active_spawner({
plantslib:spawn_on_surfaces({
spawn_delay = 3600,
spawn_plants = bushes_classic.spawn_list,
avoid_radius = 10,
@ -55,4 +61,4 @@ biome_lib.register_active_spawner({
minetest.register_alias("bushes:basket_pies", "bushes:basket_strawberry")
print("[Bushes] Loaded.")
print(S("[Bushes] Loaded."))

View File

@ -1,46 +0,0 @@
# textdomain: bushes_classic
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Xanthin, 2017.
#
Sugar=Zucker
Basket with Strawberry pies=Korb mit Erdbeertorten
Cooked Strawberry pie=Erdbeertorte
Raw Strawberry pie=Rohe Erdbeertorte
Slice of Strawberry pie=Erdbeertortenstueck
Strawberry=Erdbeere
Strawberry Bush=Erdbeerbusch
Basket with Blackberry pies=Korb mit Brombeertorten
Blackberry=Brombeere
Blackberry Bush=Brombeerbusch
Cooked Blackberry pie=Brombeertorte
Raw Blackberry pie=Rohe Brombeertorte
Slice of Blackberry pie=Brombeertortenstueck
Basket with Blueberry pies=Korb mit Blaubeertorten
Blueberry=Blaubeere
Blueberry Bush=Blaubeerbusch
Cooked Blueberry pie=Blaubeertorte
Raw Blueberry pie=Rohe Blaubeertorte
Slice of Blueberry pie=Blaubeertortenstueck
Basket with Raspberry pies=Korb mit Himbeertorten
Cooked Raspberry pie=Himbeertorte
Raspberry=Himbeere
Raspberry Bush=Himbeerbusch
Raw Raspberry pie=Rohe Himbeertorte
Slice of Raspberry pie=Himbeertortenstueck
Basket with Gooseberry pies=Korb mit Stachelbeertorten
Cooked Gooseberry pie=Stachelbeertorte
Gooseberry=Stachelbeere
Gooseberry Bush=Stachelbeerbusch
Raw Gooseberry pie=Rohe Stachelbeertorte
Slice of Gooseberry pie=Stachelbeertortenstueck
Basket with Mixed Berry pies=Korb mit Beerenmixtorten
Cooked Mixed Berry pie=Beerenmixtorte
Currently fruitless Bush=zur Zeit fruechteloser
Mixed Berry=Beerenmix
Raw Mixed Berry pie=Rohe Beerenmixtorte
Slice of Mixed Berry pie=Beerenmixtortenstueck
Basket=Korb

View File

@ -1,46 +0,0 @@
# textdomain: bushes_classic
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Jolesh, 2022.
#
Sugar=Sukero
Basket with Strawberry pies=Korbo kun Fragokukoj
Cooked Strawberry pie=Kuirita Fragokuko
Raw Strawberry pie=Kruda Fragokuko
Slice of Strawberry pie=Tranĉaĵo de Fragokuko
Strawberry=Frago
Strawberry Bush=Fraga Arbusto
Basket with Blackberry pies=Korbo kun Rubusokukoj
Cooked Blackberry pie=Kuirita Rubusokuko
Raw Blackberry pie=Kruda Rubusokuko
Slice of Blackberry pie=Tranĉaĵo de Rubusokuko
Blackberry=Rubuso
Blackberry Bush=Rubusa Arbusto
Basket with Blueberry pies=Korbo kun Mirtelokukoj
Blueberry=Mirtelo
Blueberry Bush=Mirtela Arbusto
Cooked Blueberry pie=Kuirita Mirtelokuko
Raw Blueberry pie=Kruda Mirtelokuko
Slice of Blueberry pie=Tranĉaĵo de Mirtelokuko
Basket with Raspberry pies=Korbo kun Frambokukoj
Cooked Raspberry pie=Kuirita Frambokuko
Raspberry=Frambo
Raspberry Bush=Framba Arbusto
Raw Raspberry pie=Kruda Frambokuko
Slice of Raspberry pie=Tranĉaĵo de Frambokuko
Basket with Gooseberry pies=Korbo kun Grosberkuko
Cooked Gooseberry pie=Kuirita Grosberkuko
Gooseberry=Grosbero
Gooseberry Bush=Grosberarbusto
Raw Gooseberry pie=Kruda Grosberkuko
Slice of Gooseberry pie=Tranĉaĵo de Grosberkuko
Basket with Mixed Berry pies=Korbo kun Miksitaj Beraj Kukoj
Cooked Mixed Berry pie=Kuirita Miksa Beraj Kukoj
Currently fruitless Bush=Nuntempe senfrukta Arbusto
Mixed Berry=Miksita Bero
Raw Mixed Berry pie=Kruda Miksita Bera Kuko
Slice of Mixed Berry pie=Tranĉaĵo de Miksita Bera Kuko
Basket=Korbo

View File

@ -1,46 +0,0 @@
# textdomain: bushes_classic
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Carlos Barraza <carlosbarrazaes@gmail.com>, 2017.
#
Sugar=Azúcar
Basket with Strawberry pies=Cesta con Pasteles de Frutilla
Cooked Strawberry pie=Pastel de Frutilla Cocido
Raw Strawberry pie=Pastel de Frutilla Crudo
Slice of Strawberry pie=Rebanada de Pastel de Frutilla
Strawberry=Frutilla
Strawberry Bush=Arbusto de Frutilla
Basket with Blackberry pies=Cesta con Pasteles de Mora
Blackberry=Mora
Blackberry Bush=Arbusto de Mora
Cooked Blackberry pie=Pastel de Mora Cocido
Raw Blackberry pie=Pastel de Mora Crudo
Slice of Blackberry pie=Rebanada de Pastel de Mora
Basket with Blueberry pies=Cesta con Pasteles de Arándano
Blueberry=Arándano
Blueberry Bush=Arbusto de Arándano
Cooked Blueberry pie=Pastel de Arándano Cocido
Raw Blueberry pie=Pastel de Arándano Crudo
Slice of Blueberry pie=Rebanada de Pastel de Arándano
Basket with Raspberry pies=Cesta con Pasteles de Frambuesa
Cooked Raspberry pie=Pastel de Frambuesa Cocido
Raspberry=Frambuesa
Raspberry Bush=Arbusto de Frambuesa
Raw Raspberry pie=Pastel de Frambuesa Crudo
Slice of Raspberry pie=Rebanada de Pastel de Frambuesa
Basket with Gooseberry pies=Cesta con Pasteles de Grosella
Cooked Gooseberry pie=Pastel de Grosella Cocido
Gooseberry=Grosella
Gooseberry Bush=Arbusto de Grosella
Raw Gooseberry pie=Pastel de Grosella Crudo
Slice of Gooseberry pie=Rebanada de Pastel de Grosella
Basket with Mixed Berry pies=Cesta con Pasteles de Mezcla de Baya
Cooked Mixed Berry pie=Pastel de Mezcla de Bayas Cocido
Currently fruitless Bush=Arbusto actualmente infructuoso
Mixed Berry=Mezcla de Baya
Raw Mixed Berry pie=Pastel de Mezcla de Bayas Cruda
Slice of Mixed Berry pie=Rebanada de Pastel de Mezcla de Bayas
Basket=Cesta

View File

@ -1,46 +0,0 @@
# textdomain: bushes_classic
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# fat115 <fat115@framasoft.org>, 2017.
#
Sugar=Sucre
Basket with Strawberry pies=Panier de tartes aux fraises
Cooked Strawberry pie=Tarte aux fraises (cuite)
Raw Strawberry pie=Tarte aux fraises (crue)
Slice of Strawberry pie=Part de tarte aux fraises
Strawberry=Fraises
Strawberry Bush=Buisson de fraises
Basket with Blackberry pies=Panier de tartes aux fraises
Blackberry=Mûres
Blackberry Bush=Buisson de mûres
Cooked Blackberry pie=Tarte aux mûres (cuite)
Raw Blackberry pie=Tarte aux mûres (crue)
Slice of Blackberry pie=Part de tarte aux mûres
Basket with Blueberry pies=Panier de tartes aux mûres
Blueberry=Myrtilles
Blueberry Bush=Buisson de myrtilles
Cooked Blueberry pie=Tarte aux myrtilles (cuite)
Raw Blueberry pie=Tarte aux myrtilles (crue)
Slice of Blueberry pie=Part de tarte aux myrtilles
Basket with Raspberry pies=Panier de tartes aux framboises
Cooked Raspberry pie=Tarte aux framboises (cuite)
Raspberry=Framboises
Raspberry Bush=Buisson de framboises
Raw Raspberry pie=Tarte aux framboises (crue)
Slice of Raspberry pie=Part de tarts aux framboises
Basket with Gooseberry pies=Panier de tartes aux groseilles
Cooked Gooseberry pie=Tarte aux groseilles (cuite)
Gooseberry=Groseilles
Gooseberry Bush=Buisson de groseilles
Raw Gooseberry pie=Tarte aux groseilles (crue)
Slice of Gooseberry pie=Part de tarte aux groseilles
Basket with Mixed Berry pies=Panier de tartes aux fruits rouges
Cooked Mixed Berry pie=Tarte aux fruits rouges (cuite)
Currently fruitless Bush=Buisson sans fruits pour l'instant
Mixed Berry=Fruits rouges
Raw Mixed Berry pie=Tarte aux fruits rouges (crue)
Slice of Mixed Berry pie=Part de tarte aux fruits rouges
Basket=Panier

View File

@ -1,46 +0,0 @@
# textdomain: bushes_classic
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# mahmutelmas06@hotmail.com, 2017.
#
Sugar=Şeker
Basket with Strawberry pies=Çilekli pasta sepeti
Cooked Strawberry pie=Pişmiş çilekli pasta
Raw Strawberry pie=Çilekli çiğ pasta
Slice of Strawberry pie=Çilekli pasta dilimi
Strawberry=Çilek
Strawberry Bush=Çilek fidanı
Basket with Blackberry pies=Böğürtlenli pasta sepeti
Blackberry=Böğürtlen
Blackberry Bush=Böğürtlen fidanı
Cooked Blackberry pie=Pişmiş böğürtlenli pasta
Raw Blackberry pie=Böğürtlenli çiğ pasta
Slice of Blackberry pie=Böğürtlenli pasta dilimi
Basket with Blueberry pies=Yaban mersini pastalı sepet
Blueberry=Yaban mersini
Blueberry Bush=Yaban mersini fidanı
Cooked Blueberry pie=Pişmiş yaban mersinli pasta
Raw Blueberry pie=Yaban mersinli çiğ pasta
Slice of Blueberry pie=Yaban mersinli pasta dilimi
Basket with Raspberry pies=Ahududulu pasta sepeti
Cooked Raspberry pie=Pişmiş ahududulu pasta
Raspberry=Ahududu
Raspberry Bush=Ahududu fidanı
Raw Raspberry pie=Ahududulu çiğ pasta
Slice of Raspberry pie=Ahududulu pasta dilimi
Basket with Gooseberry pies=Bektaşi üzümlü pasta sepeti
Cooked Gooseberry pie=Pişmiş bektaşi üzümlü pasta
Gooseberry=Bektaşi üzümü
Gooseberry Bush=Bektaşi üzümü fidanı
Raw Gooseberry pie=Bektaşi üzümlü çiğ pasta
Slice of Gooseberry pie=Bektaşi üzümlü pasta dilimi
Basket with Mixed Berry pies=Dutlu pasta sepeti
Cooked Mixed Berry pie=Pişmiş dutlu pasta
Currently fruitless Bush=Fidanı şu anda meyvesiz
Mixed Berry=Dut
Raw Mixed Berry pie=Dutlu çiğ pasta
Slice of Mixed Berry pie=Dutlu pasta dilimi
Basket=Sepet

View 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.

View File

@ -1,46 +1,43 @@
# textdomain: bushes_classic
# Template
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
Strawberry =
Blackberry =
Blueberry =
Raspberry =
Gooseberry =
Mixed Berry =
Basket with Strawberry Pies =
Basket with Blackberry Pies =
Basket with Blueberry Pies =
Basket with Raspberry Pies =
Basket with Gooseberry Pies =
Basket with Mixed Berry Pies =
currently fruitless =
Strawberry Bush =
Blackberry Bush =
Blueberry Bush =
Raspberry Bush =
Gooseberry Bush =
Mixed Berry Bush =
Basket =
Sugar =
Raw Strawberry pie =
Raw Blackberry pie =
Raw Blueberry pie =
Raw Raspberry pie =
Raw Gooseberry pie =
Raw Mixed Berry pie =
Cooked Strawberry pie =
Cooked Blackberry pie =
Cooked Blueberry pie =
Cooked Raspberry pie =
Cooked Gooseberry pie =
Cooked Mixed Berry pie =
Slice of Strawberry pie =
Slice of Blackberry pie =
Slice of Blueberry pie =
Slice of Raspberry pie =
Slice of Gooseberry pie =
Slice of Mixed Berry pie =
Sugar=
Basket with Strawberry pies=
Cooked Strawberry pie=
Raw Strawberry pie=
Slice of Strawberry pie=
Strawberry=
Strawberry Bush=
Basket with Blackberry pies=
Blackberry=
Blackberry Bush=
Cooked Blackberry pie=
Raw Blackberry pie=
Slice of Blackberry pie=
Basket with Blueberry pies=
Blueberry=
Blueberry Bush=
Cooked Blueberry pie=
Raw Blueberry pie=
Slice of Blueberry pie=
Basket with Raspberry pies=
Cooked Raspberry pie=
Raspberry=
Raspberry Bush=
Raw Raspberry pie=
Slice of Raspberry pie=
Basket with Gooseberry pies=
Cooked Gooseberry pie=
Gooseberry=
Gooseberry Bush=
Raw Gooseberry pie=
Slice of Gooseberry pie=
Basket with Mixed Berry pies=
Cooked Mixed Berry pie=
Currently fruitless Bush=
Mixed Berry=
Raw Mixed Berry pie=
Slice of Mixed Berry pie=
Basket=
[Bushes] Loaded. =

View File

@ -1,3 +0,0 @@
name = bushes_classic
depends = biome_lib
optional_depends = farming, farming_plus

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,143 +1,145 @@
-- support for i18n
local S = minetest.get_translator("bushes_classic")
-- 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
plantlife_bushes = {}
-- TODO: add support for nodebreakers? those dig like mese picks
plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger)
if not (digger and pos and oldnode) then
return
plantlife_bushes.after_dig_node = function(pos, oldnode, oldmetadata, digger)
if( not( digger ) or not( pos ) or not (oldnode )) then
return nil;
end
-- find out which bush type we are dealing with
local bush_name = ""
local can_harvest = false
if oldnode.name == "bushes:fruitless_bush" then
local bush_name = "";
local can_harvest = false;
if( oldnode.name == 'bushes:fruitless_bush' ) then
-- 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
else
local name_parts = oldnode.name:split(":")
if #name_parts >= 2 and name_parts[2] ~= nil then
local name_parts = oldnode.name:split( ":" );
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
bush_name = name_parts[1]
if( #name_parts >= 2 and name_parts[1]~=nil ) then
bush_name = name_parts[1];
-- this bush really carries fruits
can_harvest = true
can_harvest = true;
end
end
end
-- find out which tool the digger was wielding (if any)
local toolstack = digger:get_wielded_item()
local capabilities = toolstack:get_tool_capabilities()
local toolstack = digger:get_wielded_item();
local capabilities = toolstack:get_tool_capabilities();
-- 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
local groupcaps = capabilities.groupcaps
if not groupcaps then
return
if( not( capabilities["groupcaps"] )) then
return nil;
-- digging with the hand or something like that
elseif groupcaps.snappy then
elseif( capabilities["groupcaps"]["snappy"] ) then
-- plant a new bush without fruits
minetest.swap_node(pos, {type = "node", name = "bushes:fruitless_bush"})
local meta = minetest.get_meta(pos)
meta:set_string('bush_type', bush_name)
minetest.set_node(pos,{type='node',name='bushes:fruitless_bush'})
local meta = minetest.get_meta( pos );
meta:set_string( 'bush_type', bush_name );
-- construct the stack of fruits the player will get
-- only bushes that have grown fruits can actually give fruits
if can_harvest then
local amount = "4"
harvested = "bushes:" .. bush_name .. " " .. amount
if( can_harvest == true ) then
amount = "4";
harvested = "bushes:"..bush_name.." "..amount;
end
-- something like a shovel
elseif groupcaps.crumbly then
elseif( capabilities["groupcaps"]["crumbly"] ) then
-- with a chance of 1/3, return 2 bushes
local amount
if can_harvest and math.random(1,3) == 1 then
amount = "2"
if( math.random(1,3)==1 ) then
amount = "2";
else
amount = "1"
amount = "1";
end
-- return the bush itself
harvested = "bushes:" .. bush_name .. "_bush "..amount
harvested = "bushes:" .. bush_name .. "_bush "..amount;
-- something like an axe
elseif groupcaps.choppy then
elseif( capabilities["groupcaps"]["choppy"] ) then
-- the amount of sticks may vary
local amount = math.random(4, 20)
amount = math.random( 4, 20 );
-- return some sticks
harvested = "default:stick " .. amount
harvested = "default:stick "..amount;
-- nothing known - destroy the plant
else
return
return nil;
end
-- give the harvested result to the player
if harvested then
if( harvested ~= "" ) then
--minetest.chat_send_player("singleplayer","you would now get "..tostring( harvested ) );
local itemstack = ItemStack(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
digger:get_inventory():add_item( "main", harvested );
end
end
plantlife_bushes.after_place_node = function(pos, placer, itemstack)
if not (itemstack and pos) then
return
if( not( itemstack ) or not( pos )) then
return nil;
end
local name_parts = itemstack:get_name():split(":")
if #name_parts < 2 or name_parts[2] == nil then
return
local name_parts = itemstack:get_name():split( ":" );
if( #name_parts <2 or name_parts[2]==nil ) then
return nil;
end
name_parts = name_parts[2]:split("_")
name_parts = name_parts[2]:split( "_" );
if #name_parts < 2 or name_parts[1] == nil then
return
if( #name_parts <2 or name_parts[1]==nil ) then
return nil;
end
minetest.swap_node(pos, {name = "bushes:fruitless_bush"})
local meta = minetest.get_meta(pos)
meta:set_string("bush_type", name_parts[1])
minetest.set_node( pos, {type='node',name='bushes:fruitless_bush'});
local meta = minetest.get_meta( pos );
meta:set_string( 'bush_type', name_parts[1] );
return nil;
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({
nodenames = {"bushes:fruitless_bush"},
neighbors = {"group:soil", "group:potting_soil"},
nodenames = { "bushes:fruitless_bush" },
interval = 500,
chance = 5,
action = function(pos, node, active_object_count, active_object_count_wider)
local meta = minetest.get_meta(pos)
local bush_name = meta:get_string("bush_type")
if bush_name and bush_name ~= "" then
local dirtpos = {x = pos.x, y = pos.y-1, z = pos.z}
local meta = minetest.get_meta( pos );
local bush_name = meta:get_string( 'bush_type' );
if( bush_name ~= nil and bush_name ~= '' ) then
local dirtpos = { x = pos.x, y = pos.y-1, z = pos.z }
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 is_soil and (dirt.name == "farming:soil_wet" or math.random(1,3) == 1) then
minetest.swap_node( pos, {name = "bushes:" .. bush_name .. "_bush"})
if dirt.name == "farming:soil_wet" or math.random(1,3) == 1 then
minetest.set_node( pos, {type='node',name='bushes:'..bush_name..'_bush'})
end
end
end
@ -147,16 +149,15 @@ minetest.register_abm({
for i, bush_name in ipairs(bushes_classic.bushes) do
local desc = bushes_classic.bushes_descriptions[i]
minetest.register_node(":bushes:basket_"..bush_name, {
description = bushes_classic.bushes_descriptions[i][5],
drawtype = "mesh",
mesh = "bushes_basket_full.obj",
description = S("Basket with "..desc.." Pies"),
tiles = {
"bushes_basket_pie_"..bush_name..".png",
"bushes_basket.png"
"bushes_basket_"..bush_name.."_top.png",
"bushes_basket_bottom.png",
"bushes_basket_side.png"
},
paramtype = "light",
paramtype2 = "facedir",
on_use = minetest.item_eat(18),
groups = { dig_immediate = 3 },
})
@ -166,6 +167,7 @@ for i, bush_name in ipairs(bushes_classic.bushes) do
local groups = {snappy = 3, bush = 1, flammable = 2, attached_node=1}
if bush_name == "mixed_berry" then
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
@ -173,33 +175,37 @@ for i, bush_name in ipairs(bushes_classic.bushes) do
texture_top = "bushes_bush_top.png"
texture_bottom = "bushes_bush_bottom.png"
end
local node_dig_prediction
local node_placement_prediction
if bush_name ~= "fruitless" then
node_dig_prediction = "bushes:fruitless_bush"
node_placement_prediction = "bushes:fruitless_bush"
end
minetest.register_node(":bushes:" .. bush_name .. "_bush", {
description = bushes_classic.bushes_descriptions[i][6],
drawtype = "mesh",
mesh = "bushes_bush.obj",
tiles = {"bushes_bush_"..bush_name..".png"},
paramtype = "light",
sunlight_propagates = true,
walkable = false,
groups = groups,
sounds = default.node_sound_leaves_defaults(),
drop = "",
node_dig_prediction = node_dig_prediction,
node_placement_prediction = node_placement_prediction,
after_dig_node = function( pos, oldnode, oldmetadata, digger )
return plantlife_bushes.after_dig_node(pos, oldnode, oldmetadata, digger);
end,
after_place_node = function( pos, placer, itemstack )
return plantlife_bushes.after_place_node(pos, placer, itemstack);
end,
description = S(desc.." Bush"),
drawtype = "nodebox",
tiles = {texture_top, texture_bottom, "bushes_" .. bush_name .. "_bush.png"},
inventory_image = "bushes_" .. bush_name .. "_bush.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
node_box = {
type = "fixed",
fixed = {
{-1/16, -8/16, -1/16, 1/16, -6/16, 1/16},
{-4/16, -6/16, -4/16, 4/16, 5/16, 4/16},
{-5/16, -5/16, -5/16, 5/16, 3/16, 5/16},
{-6/16, -4/16, -6/16, 6/16, 2/16, 6/16},
{-6.5/16, -3/16, -6.5/16, 6.5/16, -2/16, 6.5/16},
{-3/16, 5/16, -3/16, 3/16, 6/16, 3/16},
{-2/16, 5/16, -2/16, 2/16, 7/16, 2/16}
}
},
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
@ -208,12 +214,15 @@ for i, bush_name in ipairs(bushes_classic.bushes) do
end
end
minetest.register_node(":bushes:basket_empty", {
description = S("Basket"),
drawtype = "mesh",
mesh = "bushes_basket_empty.obj",
tiles = { "bushes_basket.png" },
paramtype = "light",
paramtype2 = "facedir",
tiles = {
"bushes_basket_empty_top.png",
"bushes_basket_bottom.png",
"bushes_basket_side.png"
},
groups = { dig_immediate = 3 },
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Some files were not shown because too many files have changed in this diff Show More