many worldgen mods and gonna try technic now

This commit is contained in:
2026-09-13 03:30:48 -06:00
parent bac6ac94a3
commit 548749cb1a
4811 changed files with 163271 additions and 1 deletions
+13
View File
@@ -0,0 +1,13 @@
name: luacheck
on: [push, pull_request]
jobs:
luacheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: apt
run: sudo apt-get install -y luarocks
- name: luacheck install
run: luarocks install --local luacheck
- name: luacheck run
run: $HOME/.luarocks/bin/luacheck ./
+21
View File
@@ -0,0 +1,21 @@
unused_args = false
allow_defined_top = true
max_line_length = 185
exclude_files = {".luacheckrc"}
globals = {
"biome_lib",
"bushes_classic",
}
read_globals = {
table = {fields = {"copy"}},
"minetest", "ItemStack",
"vector",
"default",
"moretrees",
"dump",
}
@@ -0,0 +1,65 @@
-- 3D Mushroom mod by VanessaE
minetest.override_item("flowers:mushroom_fertile_brown", {
drawtype = "mesh",
mesh = "3dmushrooms.obj",
tiles = {"3dmushrooms_brown.png"},
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
},
inventory_image = "3dmushrooms_brown_inv.png",
wield_image = "3dmushrooms_brown_inv.png"
})
minetest.override_item("flowers:mushroom_brown", {
drawtype = "mesh",
mesh = "3dmushrooms.obj",
tiles = {"3dmushrooms_brown.png"},
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
},
inventory_image = "3dmushrooms_brown_inv.png",
wield_image = "3dmushrooms_brown_inv.png"
})
minetest.override_item("flowers:mushroom_fertile_red", {
drawtype = "mesh",
mesh = "3dmushrooms.obj",
tiles = {"3dmushrooms_red.png"},
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
},
inventory_image = "3dmushrooms_red_inv.png",
wield_image = "3dmushrooms_red_inv.png"
})
minetest.override_item("flowers:mushroom_red", {
drawtype = "mesh",
mesh = "3dmushrooms.obj",
tiles = {"3dmushrooms_red.png"},
selection_box = {
type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
},
inventory_image = "3dmushrooms_red_inv.png",
wield_image = "3dmushrooms_red_inv.png"
})
-- aliases to the default mushrooms
minetest.register_alias("mushroom:brown", "flowers:mushroom_brown")
minetest.register_alias("mushroom:brown_natural", "flowers:mushroom_fertile_brown")
minetest.register_alias("mushroom:spore_brown", "flowers:mushroom_spores_brown")
minetest.register_alias("mushroom:spore2", "flowers:mushroom_spores_brown")
minetest.register_alias("mushroom:brown_essence", "flowers:mushroom_brown")
minetest.register_alias("mushroom:red", "flowers:mushroom_red")
minetest.register_alias("mushroom:red_natural", "flowers:mushroom_fertile_red")
minetest.register_alias("mushroom:spore_red", "flowers:mushroom_spores_red")
minetest.register_alias("mushroom:spore1", "flowers:mushroom_spores_red")
minetest.register_alias("mushroom:poison", "flowers:mushroom_red")
minetest.register_alias("mushroom:identifier", "default:mese_crystal_fragment")
@@ -0,0 +1,2 @@
name = 3dmushrooms
depends = flowers
@@ -0,0 +1,329 @@
# 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.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

+603
View File
@@ -0,0 +1,603 @@
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.
###############################################################################
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.
+72
View File
@@ -0,0 +1,72 @@
README file for Plantlife mod, by Vanessa Ezekowitz
---------------------------------------------------
Plantlife is a combined form of my Flowers and Poison Ivy mods and an expanded
version of the old Bushes mod, now called bushes_classic. The entire package
has been significantly rewritten and re-organized. This mod supplies all
three of these components and should be 100% compatible with mods that used
the old versions.
Its purpose is to add various kinds of flowers, cotton plants, water foliage,
poison ivy, and fruit bushes, obviously. :-) All of these are spawned as
normal nodes and can be collected and used in any recipes that depend on the
old mods.
Spawning of plants is sensitive to the amount of available light. Flowers,
cotton, and waterlilies only spawn when there at least a signficant amount of
light. Seaweed will grow only in dimly-lit areas. Poison ivy also grows only
in the daytime, but require less light than flowers.
Growing of poison ivy will only occur for plants that are on the same surface
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
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.
Poison ivy is found sparsely among junglegrass, but will not grow near flowers.
------------------------------------------------------------------------------
Important details:
Configuration: Any of the three components of this mod can be disabled
by just removing their respective directories.
Dependencies: Just the game's default stuff.
Recommends: Nothing in particular.
Conflicts: This mod should not be installed alongside the original, separate
Poison Ivy, or old Bushes mods. If those exist, delete them, as this mod
supplies their functionality. If you still use the old Jungle Grass mod
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
unlikely to work with old versions.
------------------------------------------------------------------------------
Crafting:
For crafting recipes, please see the forum thread for this modpack:
https://forum.minetest.net/viewtopic.php?f=11&t=3898
------------------------------------------------------------------------------
Notes:
Poison Ivy will spawn on grass and in some cases, on vertical surfaces
including trees and jungle trees where they meet the dirt or grass. Ivy
previously spawned on the ground taller/thicker or start climbing up said
vertical surfaces and trees.
At present, the poison ivy presents little more than an annoyance - they can
only be cut down and either re-planted or thrown away. No damage is done by
harvesting them, yet. ;-)
+317
View File
@@ -0,0 +1,317 @@
-- 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.
-- 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)
-- Branch textures created by Neuromancer.
-- support for i18n
local S = minetest.get_translator("bushes")
local bush_rarity = minetest.settings:get("bushes.bush_rarity") or 0.008
local youngtree_rarity = minetest.settings:get("youngtree.bush_rarity") or 0.006
minetest.register_node("bushes:youngtree2_bottom", {
description = S("Young Tree 2 (bottom)"),
drawtype="nodebox",
tiles = {"bushes_youngtree2trunk.png"},
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.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
}
},
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick'
})
local BushBranchCenter = { {1,1}, {3,2} }
for i in pairs(BushBranchCenter) do
local Num = BushBranchCenter[i][1]
local TexNum = BushBranchCenter[i][2]
minetest.register_node("bushes:bushbranches"..Num, {
description = S("Bush Branches @1", Num),
drawtype = "nodebox",
tiles = {
"bushes_leaves_"..TexNum..".png",
"bushes_branches_center_"..TexNum..".png"
},
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
{0, -1/2, -1/2, -1/4, 1/2, 1/2},
{0, -1/2, -1/2, 1/4, 1/2, 1/2}
},
},
selection_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2},
},
inventory_image = "bushes_branches_center_"..TexNum..".png",
paramtype = "light",
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
},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick 4'
})
end
local BushBranchSide = { {2,1}, {4,2} }
for i in pairs(BushBranchSide) do
local Num = BushBranchSide[i][1]
local TexNum = BushBranchSide[i][2]
minetest.register_node("bushes:bushbranches"..Num, {
description = S("Bush Branches @1", Num),
drawtype = "nodebox",
tiles = {
--[[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"
},
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
},
},
selection_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2},
},
inventory_image = "bushes_branches_right_"..TexNum..".png",
paramtype = "light",
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
},
sounds = default.node_sound_leaves_defaults(),
drop = 'default:stick 3'
})
end
local BushLeafNode = { {1}, {2}}
for i in pairs(BushLeafNode) do
local Num = BushLeafNode[i][1]
minetest.register_node("bushes:BushLeaves"..Num, {
description = S("Bush Leaves @1", Num),
drawtype = "allfaces_optional",
tiles = {"bushes_leaves_"..Num..".png"},
use_texture_alpha = "clip",
paramtype = "light",
groups = { -- MM: Should we add leafdecay?
snappy=3,
flammable=2,
attached_node=1,
leaves=1
},
sounds = default.node_sound_leaves_defaults(),
})
end
local function grow_bush_node(pos, dir, leaf_type)
local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z}
local bush_branch_type = 2
if dir ~= 5 and leaf_type == 1 then
bush_branch_type = 2
end
if dir ~= 5 and leaf_type == 2 then
bush_branch_type = 4
end
if dir == 5 and leaf_type == 1 then
bush_branch_type = 1
dir = 1
end
if dir == 5 and leaf_type == 2 then
bush_branch_type = 3
dir = 1
end
local nodename = minetest.get_node(right_here).name
if nodename == "air" or nodename == "default:junglegrass" then -- instead of check_air = true,
minetest.swap_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir})
minetest.swap_node(above_right_here, {name="bushes:BushLeaves"..leaf_type})
local chance_of_high_leaves = math.random(1,10)
if chance_of_high_leaves > 5 then
local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
minetest.swap_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type})
end
end
end
local function grow_bush(pos)
-- replace possible grass nodes
minetest.swap_node({x=pos.x, y=pos.y+1, z=pos.z}, {name="air"})
local leaf_type = math.random(1,2)
local bush_side_height = math.random(0,1)
local chance_of_bush_node_right = math.random(1,10)
if chance_of_bush_node_right > 5 then
local right_pos = {x=pos.x+1, y=pos.y+bush_side_height, z=pos.z}
grow_bush_node(right_pos,3,leaf_type)
end
local chance_of_bush_node_left = math.random(1,10)
if chance_of_bush_node_left > 5 then
local left_pos = {x=pos.x-1, y=pos.y+bush_side_height, z=pos.z}
grow_bush_node(left_pos,1,leaf_type)
end
local chance_of_bush_node_front = math.random(1,10)
if chance_of_bush_node_front > 5 then
local front_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z+1}
grow_bush_node(front_pos,2,leaf_type)
end
local chance_of_bush_node_back = math.random(1,10)
if chance_of_bush_node_back > 5 then
local back_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z-1}
grow_bush_node(back_pos,0,leaf_type)
end
grow_bush_node(pos,5,leaf_type)
end
minetest.register_decoration({
name = "bushes:bush",
decoration = {
"air"
},
fill_ratio = bush_rarity,
y_min = 1,
y_max = 40,
place_on = {
"default:dirt_with_grass",
"stoneage:grass_with_silex",
"sumpf:peat",
"sumpf:sumpf"
},
deco_type = "simple",
flags = "all_floors",
})
--[[
this is purposefully wrapped in a on mods loaded callback to that it gets the proper ids
if other mods clear the registered decorations
]]
local did
minetest.register_on_mods_loaded(function()
did = minetest.get_decoration_id("bushes:bush")
minetest.set_gen_notify("decoration", {did})
end)
minetest.register_on_generated(function(minp, maxp, blockseed)
local g = minetest.get_mapgen_object("gennotify")
local locations = {}
local deco_locations = g["decoration#" .. did] or {}
for _, pos in pairs(deco_locations) do
locations[#locations+1] = pos
end
if #locations == 0 then return end
for _, pos in ipairs(locations) do
grow_bush(pos)
end
end)
local function grow_youngtree_node2(pos, height)
local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z}
local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
local three_above_right_here = {x=pos.x, y=pos.y+4, z=pos.z}
local nodename = minetest.get_node(right_here).name
if nodename == "air" or nodename == "default:junglegrass" then -- instead of check_air = true,
if height == 4 then
local two_above_right_here_south = {x=pos.x, y=pos.y+3, z=pos.z-1}
local three_above_right_here_south = {x=pos.x, y=pos.y+4, z=pos.z-1}
minetest.swap_node(right_here, {name="bushes:youngtree2_bottom"})
minetest.swap_node(above_right_here, {name="bushes:youngtree2_bottom"})
minetest.swap_node(two_above_right_here, {name="bushes:bushbranches2" , param2=2})
minetest.swap_node(two_above_right_here_south, {name="bushes:bushbranches2" , param2=0})
minetest.swap_node(three_above_right_here, {name="bushes:BushLeaves1" })
minetest.swap_node(three_above_right_here_south, {name="bushes:BushLeaves1" })
end
end
end
local function grow_youngtree2(pos)
local height = math.random(4,5)
grow_youngtree_node2(pos,height)
end
minetest.register_decoration({
name = "bushes:youngtree",
decoration = {
"air"
},
fill_ratio = youngtree_rarity,
y_min = 1,
y_max = 40,
place_on = {
"default:dirt_with_grass",
"stoneage:grass_with_silex",
"sumpf:peat",
"sumpf:sumpf"
},
deco_type = "simple",
flags = "all_floors",
})
--[[
this is purposefully wrapped in a on mods loaded callback to that it gets the proper ids
if other mods clear the registered decorations
]]
local did2
minetest.register_on_mods_loaded(function()
did2 = minetest.get_decoration_id("bushes:youngtree")
minetest.set_gen_notify("decoration", {did2})
end)
minetest.register_on_generated(function(minp, maxp, blockseed)
local g = minetest.get_mapgen_object("gennotify")
local locations = {}
local deco_locations = g["decoration#" .. did2] or {}
for _, pos in pairs(deco_locations) do
locations[#locations+1] = pos
end
if #locations == 0 then return end
for _, pos in ipairs(locations) do
grow_youngtree2(pos)
end
end)
@@ -0,0 +1,4 @@
# textdomain: bushes
Young Tree 2 (bottom)=Strauch 2 (Ansatz)
Bush Branches @1=Buschäste @1
Bush Leaves @1=Buschblätter @1
@@ -0,0 +1,4 @@
# textdomain: bushes
Young Tree 2 (bottom)=Juna Arbo 2 (malsupro)
Bush Branches @1=Arbustaj Branĉoj @1
Bush Leaves @1=Arbustaj Folioj @1
@@ -0,0 +1,4 @@
# textdomain: bushes
Young Tree 2 (bottom)=Arbuste 2 (bas)
Bush Branches @1=Branches de buisson @1
Bush Leaves @1=Feuilles de buisson @1
@@ -0,0 +1,4 @@
# textdomain: bushes
Young Tree 2 (bottom)=
Bush Branches @1=
Bush Leaves @1=
+4
View File
@@ -0,0 +1,4 @@
name = bushes
title = Bushes
depends = default
optional_depends = stoneage, sumpf, ebiomes
@@ -0,0 +1,5 @@
# Bush rarity (higher number -> higher probability)
bushes.bush_rarity (Bush rarity) float 0.008 0.0001 1
# Youngtree rarity (higher number -> higher probability)
bushes.youngtree_rarity (Youngtree rarity) float 0.006 0.0001 1
Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

@@ -0,0 +1,126 @@
-- support for i18n
local S = minetest.get_translator("bushes_classic")
-- Basket
minetest.register_craft({
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
local groups = table.copy(minetest.registered_items["farming_plus:strawberry_item"].groups)
groups["food_strawberry"] = 1
groups["food_berry"] = 1
minetest.override_item("farming_plus:strawberry_item", {
groups = groups,
})
end
for i, berry in ipairs(bushes_classic.bushes) do
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],
inventory_image = "bushes_"..berry.."_pie_raw.png",
on_use = minetest.item_eat(4),
})
if berry ~= "mixed_berry" then
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" },
},
})
end
-- Cooked pie
minetest.register_craftitem(":bushes:"..berry.."_pie_cooked", {
description = bushes_classic.bushes_descriptions[i][3],
inventory_image = "bushes_"..berry.."_pie_cooked.png",
on_use = minetest.item_eat(6),
})
minetest.register_craft({
type = "cooking",
output = "bushes:"..berry.."_pie_cooked",
recipe = "bushes:"..berry.."_pie_raw",
cooktime = 30,
})
-- Slice of pie
minetest.register_craftitem(":bushes:"..berry.."_pie_slice", {
description = bushes_classic.bushes_descriptions[i][4],
inventory_image = "bushes_"..berry.."_pie_slice.png",
on_use = minetest.item_eat(1),
})
minetest.register_craft({
output = "bushes:"..berry.."_pie_slice 6",
recipe = {
{ "bushes:"..berry.."_pie_cooked" },
},
})
-- Basket with pies
minetest.register_craft({
output = "bushes:basket_"..berry.." 1",
recipe = {
{ "bushes:"..berry.."_pie_cooked", "bushes:"..berry.."_pie_cooked", "bushes:"..berry.."_pie_cooked" },
{ "", "bushes:basket_empty", "" },
},
})
end
@@ -0,0 +1,5 @@
strawberry: http://www.clker.com/clipart-4060.html
blueberry: http://www.clker.com/clipart-cerezafiro12.html
blackberry: http://www.clker.com/clipart-blackberry-2.html
raspberry: http://www.clker.com/clipart-simple-raspberry.html
gooseberry: http://www.clker.com/clipart-26281.html
@@ -0,0 +1,80 @@
-- Bushes classic mod originally by unknown
-- now maintained by VanessaE
bushes_classic = {}
-- support for i18n
local S = minetest.get_translator("bushes_classic")
bushes_classic.bushes = {
"strawberry",
"blackberry",
"blueberry",
"raspberry",
"gooseberry",
"mixed_berry"
}
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")}
}
bushes_classic.spawn_list = {}
local modpath = minetest.get_modpath('bushes_classic')
dofile(modpath..'/cooking.lua')
dofile(modpath..'/nodes.lua')
local spawn_plants = bushes_classic.spawn_list
local function get_biome_data(pos, perlin_fertile)
local fertility = perlin_fertile:get_2d({x=pos.x, y=pos.z})
local data = minetest.get_biome_data(pos)
-- Original values this method returned were +1 (lowest) to -1 (highest)
-- so we need to convert the 0-100 range from get_biome_data() to that.
return fertility, 1 - (data.heat / 100 * 2), 1 - (data.humidity / 100 * 2)
end
minetest.register_abm({
nodenames = {
"default:dirt_with_grass",
"woodsoils:dirt_with_leaves_1",
"woodsoils:grass_with_leaves_1",
"woodsoils:grass_with_leaves_2",
"farming:soil",
"farming:soil_wet"
},
interval = 3600,
chance = 100,
label = "[bushes_classic] spawn bushes",
min_y = -16,
max_y = 48,
action = function(pos, node)
local p_top = {x = pos.x, y = pos.y + 1, z = pos.z}
local n_top = minetest.get_node_or_nil(p_top)
if not n_top or n_top.name ~= "air" then return end
local perlin_fertile_area = minetest.get_perlin(545342534, 3, 0.6, 100)
local fertility, temperature, humidity = get_biome_data(pos, perlin_fertile_area)
local pos_biome_ok = fertility > -0.1 and temperature <= 0.15 and temperature >= -0.15 and humidity <= 0 and humidity >= -1
if not pos_biome_ok then return end
if minetest.find_node_near(p_top, 10 + math.random(-1.5,2), {"group:bush"}) then
return -- Nodes to avoid are nearby
end
local plant_to_spawn = spawn_plants[math.random(1, #spawn_plants)]
minetest.swap_node(p_top, {name = plant_to_spawn, param2 = 0})
end
})
minetest.register_alias("bushes:basket_pies", "bushes:basket_strawberry")
@@ -0,0 +1,39 @@
# textdomain: bushes_classic
Sugar=Zucker
Strawberry=Erdbeere
Raw Strawberry pie=Rohe Erdbeertorte
Cooked Strawberry pie=Erdbeertorte
Slice of Strawberry pie=Erdbeertortenstück
Basket with Strawberry pies=Korb mit Erdbeertorten
Strawberry Bush=Erdbeerbusch
Blackberry=Brombeere
Raw Blackberry pie=Rohe Brombeertorte
Cooked Blackberry pie=Brombeertorte
Slice of Blackberry pie=Brombeertortenstück
Basket with Blackberry pies=Korb mit Brombeertorten
Blackberry Bush=Brombeerbusch
Blueberry=Blaubeere
Raw Blueberry pie=Rohe Blaubeertorte
Cooked Blueberry pie=Blaubeertorte
Slice of Blueberry pie=Blaubeertortenstück
Basket with Blueberry pies=Korb mit Blaubeertorten
Blueberry Bush=Blaubeerbusch
Raspberry=Himbeere
Raw Raspberry pie=Rohe Himbeertorte
Cooked Raspberry pie=Himbeertorte
Slice of Raspberry pie=Himbeertortenstück
Basket with Raspberry pies=Korb mit Himbeertorten
Raspberry Bush=Himbeerbusch
Gooseberry=Stachelbeere
Raw Gooseberry pie=Rohe Stachelbeertorte
Cooked Gooseberry pie=Stachelbeertorte
Slice of Gooseberry pie=Stachelbeertortenstück
Basket with Gooseberry pies=Korb mit Stachelbeertorten
Gooseberry Bush=Stachelbeerbusch
Mixed Berry=Beerenmix
Raw Mixed Berry pie=Rohe Beerenmixtorte
Cooked Mixed Berry pie=Beerenmixtorte
Slice of Mixed Berry pie=Beerenmixtortenstück
Basket with Mixed Berry pies=Korb mit Beerenmixtorten
Currently fruitless Bush=Zur Zeit früchteloser Busch
Basket=Korb
@@ -0,0 +1,39 @@
# textdomain: bushes_classic
Sugar=Sukero
Strawberry=Frago
Raw Strawberry pie=Kruda Fragokuko
Cooked Strawberry pie=Kuirita Fragokuko
Slice of Strawberry pie=Tranĉaĵo de Fragokuko
Basket with Strawberry pies=Korbo kun Fragokukoj
Strawberry Bush=Fraga Arbusto
Blackberry=Rubuso
Raw Blackberry pie=Kruda Rubusokuko
Cooked Blackberry pie=Kuirita Rubusokuko
Slice of Blackberry pie=Tranĉaĵo de Rubusokuko
Basket with Blackberry pies=Korbo kun Rubusokukoj
Blackberry Bush=Rubusa Arbusto
Blueberry=Mirtelo
Raw Blueberry pie=Kruda Mirtelokuko
Cooked Blueberry pie=Kuirita Mirtelokuko
Slice of Blueberry pie=Tranĉaĵo de Mirtelokuko
Basket with Blueberry pies=Korbo kun Mirtelokukoj
Blueberry Bush=Mirtela Arbusto
Raspberry=Frambo
Raw Raspberry pie=Kruda Frambokuko
Cooked Raspberry pie=Kuirita Frambokuko
Slice of Raspberry pie=Tranĉaĵo de Frambokuko
Basket with Raspberry pies=Korbo kun Frambokukoj
Raspberry Bush=Framba Arbusto
Gooseberry=Grosbero
Raw Gooseberry pie=Kruda Grosberkuko
Cooked Gooseberry pie=Kuirita Grosberkuko
Slice of Gooseberry pie=Tranĉaĵo de Grosberkuko
Basket with Gooseberry pies=Korbo kun Grosberkuko
Gooseberry Bush=Grosberarbusto
Mixed Berry=Miksita Bero
Raw Mixed Berry pie=Kruda Miksita Bera Kuko
Cooked Mixed Berry pie=Kuirita Miksa Beraj Kukoj
Slice of Mixed Berry pie=Tranĉaĵo de Miksita Bera Kuko
Basket with Mixed Berry pies=Korbo kun Miksitaj Beraj Kukoj
Currently fruitless Bush=Nuntempe senfrukta Arbusto
Basket=Korbo
@@ -0,0 +1,39 @@
# textdomain: bushes_classic
Sugar=Azúcar
Strawberry=Frutilla
Raw Strawberry pie=Pastel de Frutilla Crudo
Cooked Strawberry pie=Pastel de Frutilla Cocido
Slice of Strawberry pie=Rebanada de Pastel de Frutilla
Basket with Strawberry pies=Cesta con Pasteles de Frutilla
Strawberry Bush=Arbusto de Frutilla
Blackberry=Mora
Raw Blackberry pie=Pastel de Mora Crudo
Cooked Blackberry pie=Pastel de Mora Cocido
Slice of Blackberry pie=Rebanada de Pastel de Mora
Basket with Blackberry pies=Cesta con Pasteles de Mora
Blackberry Bush=Arbusto de Mora
Blueberry=Arándano
Raw Blueberry pie=Pastel de Arándano Crudo
Cooked Blueberry pie=Pastel de Arándano Cocido
Slice of Blueberry pie=Rebanada de Pastel de Arándano
Basket with Blueberry pies=Cesta con Pasteles de Arándano
Blueberry Bush=Arbusto de Arándano
Raspberry=Frambuesa
Raw Raspberry pie=Pastel de Frambuesa Crudo
Cooked Raspberry pie=Pastel de Frambuesa Cocido
Slice of Raspberry pie=Rebanada de Pastel de Frambuesa
Basket with Raspberry pies=Cesta con Pasteles de Frambuesa
Raspberry Bush=Arbusto de Frambuesa
Gooseberry=Grosella
Raw Gooseberry pie=Pastel de Grosella Crudo
Cooked Gooseberry pie=Pastel de Grosella Cocido
Slice of Gooseberry pie=Rebanada de Pastel de Grosella
Basket with Gooseberry pies=Cesta con Pasteles de Grosella
Gooseberry Bush=Arbusto de Grosella
Mixed Berry=Mezcla de Baya
Raw Mixed Berry pie=Pastel de Mezcla de Bayas Cruda
Cooked Mixed Berry pie=Pastel de Mezcla de Bayas Cocido
Slice of Mixed Berry pie=Rebanada de Pastel de Mezcla de Bayas
Basket with Mixed Berry pies=Cesta con Pasteles de Mezcla de Baya
Currently fruitless Bush=Arbusto actualmente infructuoso
Basket=Cesta
@@ -0,0 +1,39 @@
# textdomain: bushes_classic
Sugar=Sucre
Strawberry=Fraises
Raw Strawberry pie=Tarte aux fraises (crue)
Cooked Strawberry pie=Tarte aux fraises (cuite)
Slice of Strawberry pie=Part de tarte aux fraises
Basket with Strawberry pies=Panier de tartes aux fraises
Strawberry Bush=Buisson de fraises
Blackberry=Mûres
Raw Blackberry pie=Tarte aux mûres (crue)
Cooked Blackberry pie=Tarte aux mûres (cuite)
Slice of Blackberry pie=Part de tarte aux mûres
Basket with Blackberry pies=Panier de tartes aux fraises
Blackberry Bush=Buisson de mûres
Blueberry=Myrtilles
Raw Blueberry pie=Tarte aux myrtilles (crue)
Cooked Blueberry pie=Tarte aux myrtilles (cuite)
Slice of Blueberry pie=Part de tarte aux myrtilles
Basket with Blueberry pies=Panier de tartes aux mûres
Blueberry Bush=Buisson de myrtilles
Raspberry=Framboises
Raw Raspberry pie=Tarte aux framboises (crue)
Cooked Raspberry pie=Tarte aux framboises (cuite)
Slice of Raspberry pie=Part de tarts aux framboises
Basket with Raspberry pies=Panier de tartes aux framboises
Raspberry Bush=Buisson de framboises
Gooseberry=Groseilles
Raw Gooseberry pie=Tarte aux groseilles (crue)
Cooked Gooseberry pie=Tarte aux groseilles (cuite)
Slice of Gooseberry pie=Part de tarte aux groseilles
Basket with Gooseberry pies=Panier de tartes aux groseilles
Gooseberry Bush=Buisson de groseilles
Mixed Berry=Fruits rouges
Raw Mixed Berry pie=Tarte aux fruits rouges (crue)
Cooked Mixed Berry pie=Tarte aux fruits rouges (cuite)
Slice of Mixed Berry pie=Part de tarte aux fruits rouges
Basket with Mixed Berry pies=Panier de tartes aux fruits rouges
Currently fruitless Bush=Buisson sans fruits pour l'instant
Basket=Panier
@@ -0,0 +1,39 @@
# textdomain: bushes_classic
Sugar=Şeker
Strawberry=Çilek
Raw Strawberry pie=Çilekli çiğ pasta
Cooked Strawberry pie=Pişmiş çilekli pasta
Slice of Strawberry pie=Çilekli pasta dilimi
Basket with Strawberry pies=Çilekli pasta sepeti
Strawberry Bush=Çilek fidanı
Blackberry=Böğürtlen
Raw Blackberry pie=Böğürtlenli çiğ pasta
Cooked Blackberry pie=Pişmiş böğürtlenli pasta
Slice of Blackberry pie=Böğürtlenli pasta dilimi
Basket with Blackberry pies=Böğürtlenli pasta sepeti
Blackberry Bush=Böğürtlen fidanı
Blueberry=Yaban mersini
Raw Blueberry pie=Yaban mersinli çiğ pasta
Cooked Blueberry pie=Pişmiş yaban mersinli pasta
Slice of Blueberry pie=Yaban mersinli pasta dilimi
Basket with Blueberry pies=Yaban mersini pastalı sepet
Blueberry Bush=Yaban mersini fidanı
Raspberry=Ahududu
Raw Raspberry pie=Ahududulu çiğ pasta
Cooked Raspberry pie=Pişmiş ahududulu pasta
Slice of Raspberry pie=Ahududulu pasta dilimi
Basket with Raspberry pies=Ahududulu pasta sepeti
Raspberry Bush=Ahududu fidanı
Gooseberry=Bektaşi üzümü
Raw Gooseberry pie=Bektaşi üzümlü çiğ pasta
Cooked Gooseberry pie=Pişmiş bektaşi üzümlü pasta
Slice of Gooseberry pie=Bektaşi üzümlü pasta dilimi
Basket with Gooseberry pies=Bektaşi üzümlü pasta sepeti
Gooseberry Bush=Bektaşi üzümü fidanı
Mixed Berry=Dut
Raw Mixed Berry pie=Dutlu çiğ pasta
Cooked Mixed Berry pie=Pişmiş dutlu pasta
Slice of Mixed Berry pie=Dutlu pasta dilimi
Basket with Mixed Berry pies=Dutlu pasta sepeti
Currently fruitless Bush=Fidanı şu anda meyvesiz
Basket=Sepet
@@ -0,0 +1,39 @@
# textdomain: bushes_classic
Sugar=
Strawberry=
Raw Strawberry pie=
Cooked Strawberry pie=
Slice of Strawberry pie=
Basket with Strawberry pies=
Strawberry Bush=
Blackberry=
Raw Blackberry pie=
Cooked Blackberry pie=
Slice of Blackberry pie=
Basket with Blackberry pies=
Blackberry Bush=
Blueberry=
Raw Blueberry pie=
Cooked Blueberry pie=
Slice of Blueberry pie=
Basket with Blueberry pies=
Blueberry Bush=
Raspberry=
Raw Raspberry pie=
Cooked Raspberry pie=
Slice of Raspberry pie=
Basket with Raspberry pies=
Raspberry Bush=
Gooseberry=
Raw Gooseberry pie=
Cooked Gooseberry pie=
Slice of Gooseberry pie=
Basket with Gooseberry pies=
Gooseberry Bush=
Mixed Berry=
Raw Mixed Berry pie=
Cooked Mixed Berry pie=
Slice of Mixed Berry pie=
Basket with Mixed Berry pies=
Currently fruitless Bush=
Basket=
@@ -0,0 +1,2 @@
name = bushes_classic
optional_depends = farming, farming_plus
@@ -0,0 +1,46 @@
# 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
@@ -0,0 +1,330 @@
# 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
@@ -0,0 +1,329 @@
# 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
@@ -0,0 +1,215 @@
-- support for i18n
local S = minetest.get_translator("bushes_classic")
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
end
-- find out which bush type we are dealing with
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
-- 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
name_parts = name_parts[2]:split("_")
if #name_parts >= 2 and name_parts[1] ~= nil then
bush_name = name_parts[1]
-- this bush really carries fruits
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()
-- what the player will get
local harvested
-- failure to find out what the tool can do: destroy the bush and return nothing
local groupcaps = capabilities.groupcaps
if not groupcaps then
return
-- digging with the hand or something like that
elseif 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)
-- 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
end
-- something like a shovel
elseif 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"
else
amount = "1"
end
-- return the bush itself
harvested = "bushes:" .. bush_name .. "_bush "..amount
-- something like an axe
elseif groupcaps.choppy then
-- the amount of sticks may vary
local amount = math.random(4, 20)
-- return some sticks
harvested = "default:stick " .. amount
-- nothing known - destroy the plant
else
return
end
-- give the harvested result to the player
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
end
end
plantlife_bushes.after_place_node = function(pos, placer, itemstack)
if not (itemstack and pos) then
return
end
local name_parts = itemstack:get_name():split(":")
if #name_parts < 2 or name_parts[2] == nil then
return
end
name_parts = name_parts[2]:split("_")
if #name_parts < 2 or name_parts[1] == nil then
return
end
minetest.swap_node(pos, {name = "bushes:fruitless_bush"})
local meta = minetest.get_meta(pos)
meta:set_string("bush_type", name_parts[1])
end
-- regrow berries (uses a base abm instead of biome_lib because of the use of metadata).
minetest.register_abm({
nodenames = {"bushes:fruitless_bush"},
neighbors = {"group:soil", "group:potting_soil"},
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 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"})
end
end
end
})
-- Define the basket and bush nodes
for i, bush_name in ipairs(bushes_classic.bushes) do
minetest.register_node(":bushes:basket_"..bush_name, {
description = bushes_classic.bushes_descriptions[i][5],
drawtype = "mesh",
mesh = "bushes_basket_full.obj",
tiles = {
"bushes_basket_pie_"..bush_name..".png",
"bushes_basket.png"
},
paramtype = "light",
paramtype2 = "facedir",
on_use = minetest.item_eat(18),
groups = { dig_immediate = 3 },
is_ground_content = false,
})
local groups = {snappy = 3, bush = 1, flammable = 2, attached_node=1}
if bush_name == "mixed_berry" then
bush_name = "fruitless";
groups.not_in_creative_inventory = 1
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,
})
-- do not spawn fruitless bushes
if bush_name ~= "fruitless" then
table.insert(bushes_classic.spawn_list, "bushes:"..bush_name.."_bush")
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",
groups = { dig_immediate = 3 },
is_ground_content = false,
})
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 979 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

@@ -0,0 +1,2 @@
dofile(minetest.get_modpath("cavestuff").."/nodes.lua")
dofile(minetest.get_modpath("cavestuff").."/mapgen.lua")
@@ -0,0 +1,4 @@
# textdomain: cavestuff
Pebble=Kieselstein
Desert Pebble=Wüstenkiesel
Stalactite=Stalaktit
@@ -0,0 +1,4 @@
# textdomain: cavestuff
Pebble=Ŝtoneto
Desert Pebble=Dezerta Ŝtoneto
Stalactite=Stalaktito
@@ -0,0 +1,4 @@
# textdomain: cavestuff
Pebble=Caillou
Desert Pebble=Caillou du désert
Stalactite=Stalactite
@@ -0,0 +1,4 @@
# textdomain: cavestuff
Pebble=
Desert Pebble=
Stalactite=
@@ -0,0 +1,65 @@
--Map Generation Stuff
minetest.register_decoration({
decoration = {
"cavestuff:pebble_1",
"cavestuff:pebble_2"
},
place_on = {
"default:dirt_with_grass",
"default:gravel",
"default:stone",
"default:permafrost_with_stones"
},
noise_params = {
offset = 0,
scale = 0.0078125,
spread = {
y = 100,
z = 100,
x = 100
},
seed = 0,
octaves = 3,
persist = 0.6,
flags = "absvalue",
lacunarity = 2
},
param2 = 0,
flags = "all_floors",
deco_type = "simple",
param2_max = 3,
y_min = -16,
y_max = 48
})
minetest.register_decoration({
decoration = {
"cavestuff:desert_pebble_1",
"cavestuff:desert_pebble_2"
},
place_on = {
"default:desert_sand",
"default:desert_stone"
},
noise_params = {
offset = 0,
scale = 0.0078125,
spread = {
y = 100,
z = 100,
x = 100
},
seed = 0,
octaves = 3,
persist = 0.6,
flags = "absvalue",
lacunarity = 2
},
param2 = 0,
flags = "all_floors",
deco_type = "simple",
param2_max = 3,
y_min = -16,
y_max = 48
})
@@ -0,0 +1,2 @@
name = cavestuff
depends = default
@@ -0,0 +1,279 @@
# Blender v2.69 (sub 0) OBJ File: ''
# www.blender.org
mtllib cavestuff_pebble.mtl
o Icosphere.001_Icosphere.002
v -0.000327 -0.410467 0.180121
v -0.235610 -0.410468 0.155391
v -0.284796 -0.410468 -0.076018
v -0.121985 -0.209219 0.205980
v -0.284738 -0.218753 0.040139
v -0.201573 -0.219323 -0.168447
v -0.100950 -0.116906 0.005837
v -0.088586 -0.496875 -0.111804
v -0.196648 -0.428134 -0.159917
v -0.209011 -0.497294 -0.042276
v -0.041805 -0.497429 0.108278
v -0.180101 -0.487871 0.093742
v -0.120956 -0.428134 0.196184
v -0.288163 -0.428135 0.045629
v -0.147553 -0.309844 -0.213938
v -0.268157 -0.309844 -0.144718
v -0.192465 -0.309844 0.211384
v -0.054169 -0.309844 0.225920
v -0.324717 -0.309844 -0.017682
v -0.288965 -0.319377 0.114387
v -0.023183 -0.210866 0.195570
v -0.221888 -0.201086 0.143956
v -0.275798 -0.233149 -0.072011
v -0.160094 -0.150509 -0.096605
v -0.113314 -0.150508 0.123477
v -0.216653 -0.160042 0.030431
v 0.073364 -0.397538 -0.267606
v 0.268711 -0.397538 -0.091716
v 0.161795 -0.397537 0.148424
v 0.199614 -0.173928 -0.211396
v 0.254265 -0.173928 0.045725
v 0.026620 -0.195887 0.177156
v -0.061812 -0.173929 -0.238874
v 0.049992 -0.055394 -0.045225
v 0.178551 -0.485125 -0.072552
v 0.063729 -0.498396 -0.175936
v 0.192289 -0.417167 -0.203264
v -0.056339 -0.417167 -0.229396
v -0.070077 -0.496109 -0.098684
v 0.115708 -0.497252 0.068599
v 0.244268 -0.417167 0.041273
v 0.027763 -0.417167 0.166272
v -0.001987 -0.285733 -0.289762
v -0.109557 -0.285733 -0.245455
v 0.258217 -0.285733 -0.165444
v 0.151676 -0.285733 -0.273611
v 0.235777 -0.285733 0.122059
v 0.298622 -0.285733 -0.019093
v 0.101971 -0.285733 0.199312
v 0.072221 -0.154299 -0.256722
v 0.258006 -0.154298 -0.089439
v 0.156323 -0.154299 0.138946
v 0.137937 -0.086893 -0.142897
v -0.015725 -0.073070 -0.159049
v 0.170060 -0.073069 0.008234
v 0.036254 -0.095028 0.085487
v -0.059660 -0.090744 -0.028814
v -0.016904 -0.495185 -0.020480
v -0.038530 -0.134593 0.104482
v 0.018559 -0.297788 0.203363
vt 0.999784 0.777888
vt 0.781916 0.751069
vt 0.930695 0.535842
vt 0.718554 0.493678
vt 0.498343 0.500066
vt 0.612704 0.301958
vt 0.278288 0.491767
vt 0.136170 0.301428
vt 0.385039 0.315647
vt 0.861174 0.302958
vt 0.817615 0.924676
vt 0.662334 0.996212
vt 0.719667 0.785775
vt 0.955856 0.540882
vt 0.919844 0.749017
vt 0.810792 0.580191
vt 0.698724 0.249779
vt 0.882029 0.358101
vt 0.648319 0.423681
vt 0.738504 0.311189
vt 0.859769 0.100574
vt 0.955856 0.301223
vt 0.603011 0.109855
vt 0.889116 0.979094
vt 0.625593 0.954685
vt 0.572947 0.723101
vt 0.629662 0.708272
vt 0.361849 0.694965
vt 0.626863 0.523494
vt 0.877334 0.514944
vt 0.753445 0.687054
vt 0.678897 0.522004
vt 0.804007 0.322784
vt 0.508145 0.125975
vt 0.614686 0.322544
vt 0.274631 0.088482
vt 0.046907 0.080882
vt 0.724191 0.150589
vt 0.955856 0.101994
vt 0.459738 0.810380
vt 0.524431 0.596612
vt 0.614955 0.619521
vt 0.385224 0.455707
vt 0.518113 0.743431
vt 0.397247 0.481913
vt 0.473092 0.333636
vt 0.593136 0.806842
vt 0.542133 0.566645
vt 0.245991 0.361941
vt 0.291514 0.126530
vt 0.515385 0.289890
vt 0.348981 0.560141
vt 0.480373 0.537386
vt 0.705144 0.472239
vt 0.601667 0.722403
vt 0.283471 0.700220
vt 0.061144 0.812481
vt 0.120014 0.502516
vt 0.080353 0.535703
vt 0.356859 0.719702
vt 0.417004 0.243099
vt 0.001005 0.468262
vt 0.186797 0.314823
vt 0.187216 0.555587
vt 0.094383 0.931756
vt 0.003057 0.709324
vt 0.238065 0.772821
vt 0.569632 0.999536
vt 0.323797 1.000000
vt 0.482075 0.313011
vt 0.735871 0.182001
vt 0.032983 0.251846
vt 0.574313 0.080491
vt 0.318361 0.961238
vt 0.229901 0.178033
vt 0.256609 0.467686
vt 0.464307 0.768933
vt 0.865183 0.712997
vt 0.725052 0.926500
vt 0.093408 0.705147
vt 0.230523 0.921209
vt 0.968797 0.984796
vt 0.210756 0.792236
vt 0.477482 0.962103
vt 0.256493 0.223509
vt 0.000000 0.255402
vt 0.543998 0.500902
vt 0.362414 0.637562
vt 0.469769 0.648982
vt 0.379376 0.894841
vt 0.246514 0.544201
vt 0.117965 0.884444
vt 0.047032 0.632888
vt 0.079441 0.605161
vt 0.000000 0.325670
vt 0.241712 0.163133
vt 0.470206 0.343559
usemtl None
s off
f 2/1 13/2 17/3
f 3/4 14/5 19/6
f 2/7 17/8 20/9
f 3/4 19/6 16/10
f 4/11 21/12 25/13
f 5/14 22/15 26/16
f 6/17 23/18 24/19
f 9/20 10/21 3/22
f 9/20 8/23 10/21
f 12/24 13/2 2/1
f 12/24 11/25 13/2
f 11/25 1/26 13/2
f 10/27 14/5 3/4
f 10/27 12/28 14/5
f 12/28 2/7 14/5
f 15/29 16/30 6/31
f 15/29 9/20 16/30
f 9/20 3/22 16/30
f 17/3 18/32 4/33
f 17/3 13/2 18/32
f 13/2 1/26 18/32
f 19/6 20/9 5/34
f 19/6 14/5 20/9
f 14/5 2/7 20/9
f 18/32 21/35 4/33
f 20/9 22/36 5/34
f 20/9 17/8 22/36
f 17/8 4/37 22/36
f 16/10 23/38 6/39
f 16/10 19/6 23/38
f 19/6 5/34 23/38
f 56/40 57/41 7/42
f 57/41 54/43 24/19
f 1/26 42/44 49/45
f 38/46 9/20 15/29
f 25/13 21/12 59/47
f 15/29 6/31 44/48
f 26/16 25/13 7/42
f 26/16 22/15 25/13
f 22/15 4/11 25/13
f 24/19 26/16 7/42
f 24/19 23/18 26/16
f 23/18 5/14 26/16
f 27/49 36/50 38/46
f 32/51 21/35 49/45
f 27/49 38/46 43/52
f 28/53 37/54 45/55
f 29/56 41/57 47/58
f 1/26 11/25 42/44
f 27/49 43/52 46/59
f 28/53 45/55 48/60
f 29/56 47/58 49/45
f 6/17 24/19 33/61
f 30/62 50/63 53/64
f 31/65 51/66 55/67
f 32/68 52/69 56/40
f 35/70 37/54 28/53
f 35/70 36/71 37/54
f 36/50 27/49 37/72
f 9/20 38/46 8/23
f 38/46 36/50 39/73
f 40/74 41/57 29/56
f 40/75 35/70 41/76
f 35/70 28/53 41/76
f 44/48 38/46 15/29
f 38/46 39/73 8/23
f 40/74 29/56 42/44
f 43/52 44/48 33/77
f 43/52 38/46 44/48
f 45/55 46/78 30/79
f 45/55 37/54 46/78
f 37/72 27/49 46/59
f 47/80 48/60 31/81
f 47/80 41/76 48/60
f 41/76 28/53 48/60
f 11/25 40/74 42/44
f 42/44 29/56 49/45
f 46/78 50/82 30/79
f 46/59 43/52 50/83
f 43/52 33/77 50/83
f 48/60 51/84 31/81
f 48/60 45/55 51/84
f 45/55 30/79 51/84
f 49/45 52/85 32/51
f 49/45 47/58 52/85
f 47/58 31/86 52/85
f 18/32 1/26 60/87
f 21/35 18/32 60/87
f 6/31 33/77 44/48
f 53/64 54/43 34/88
f 53/64 50/63 54/43
f 50/63 33/61 54/43
f 55/67 53/64 34/88
f 55/67 51/66 53/64
f 51/66 30/62 53/64
f 56/40 55/67 34/88
f 56/40 52/69 55/67
f 52/69 31/65 55/67
f 57/41 56/40 34/88
f 21/12 32/68 56/40
f 25/13 59/47 7/42
f 54/43 57/41 34/88
f 7/42 57/41 24/19
f 33/61 24/19 54/43
f 11/89 12/90 58/91
f 12/90 10/92 58/91
f 10/92 8/93 58/91
f 8/93 39/94 58/91
f 39/94 36/95 58/91
f 36/95 35/96 58/91
f 35/96 40/97 58/91
f 40/97 11/89 58/91
f 21/12 56/40 59/47
f 59/47 56/40 7/42
f 1/26 49/45 60/87
f 49/45 21/35 60/87
+160
View File
@@ -0,0 +1,160 @@
-- support for i18n
local S = minetest.get_translator("cavestuff")
--Rocks
local cbox = {
type = "fixed",
fixed = {-5/16, -8/16, -6/16, 5/16, -1/32, 5/16},
}
minetest.register_node("cavestuff:pebble_1",{
description = S("Pebble"),
drawtype = "mesh",
mesh = "cavestuff_pebble.obj",
tiles = {"undergrowth_pebble.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=3, stone=1, attached_node=1, dig_immediate=3},
selection_box = cbox,
collision_box = cbox,
on_place = function(itemstack, placer, pointed_thing)
-- place a random pebble node
local stack = ItemStack("cavestuff:pebble_"..math.random(1,2))
local ret = minetest.item_place(stack, placer, pointed_thing)
return ItemStack("cavestuff:pebble_1 "..itemstack:get_count()-(1-ret:get_count()))
end,
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("cavestuff:pebble_2",{
drawtype = "mesh",
mesh = "cavestuff_pebble.obj",
tiles = {"undergrowth_pebble.png"},
drop = "cavestuff:pebble_1",
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1, dig_immediate=3},
selection_box = cbox,
collision_box = cbox,
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("cavestuff:desert_pebble_1",{
description = S("Desert Pebble"),
drawtype = "mesh",
mesh = "cavestuff_pebble.obj",
tiles = {"default_desert_stone.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=3, stone=1, attached_node=1, dig_immediate=3},
selection_box = cbox,
collision_box = cbox,
on_place = function(itemstack, placer, pointed_thing)
-- place a random pebble node
local stack = ItemStack("cavestuff:desert_pebble_"..math.random(1,2))
local ret = minetest.item_place(stack, placer, pointed_thing)
return ItemStack("cavestuff:desert_pebble_1 "..itemstack:get_count()-(1-ret:get_count()))
end,
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("cavestuff:desert_pebble_2",{
drawtype = "mesh",
mesh = "cavestuff_pebble.obj",
drop = "cavestuff:desert_pebble_1",
tiles = {"default_desert_stone.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1, dig_immediate=3},
selection_box = cbox,
collision_box = cbox,
sounds = default.node_sound_stone_defaults(),
})
--Staclactites
minetest.register_node("cavestuff:stalactite_1",{
drawtype="nodebox",
tiles = {"undergrowth_pebble.png"},
groups = {cracky=3,attached_node=1},
is_ground_content = false,
description = S("Stalactite"),
paramtype = "light",
paramtype2 = "wallmounted",
node_box = {
type = "fixed",
fixed = {
{-0.187500,-0.425000,-0.150003,0.162500,-0.500000,0.162500},
{-0.112500,-0.162500,-0.100000,0.087500,-0.475000,0.087500},
{-0.062500,0.275000,-0.062500,0.062500,-0.500000,0.062500},
{-0.037500,0.837500,0.037500,0.037500,-0.500000,-0.025000},
}
},
on_place = function(itemstack, placer, pointed_thing)
local dir = vector.subtract(pointed_thing.above, pointed_thing.under)
local base = pointed_thing.under
local place = vector.add(base, dir)
local above = vector.add(place, dir)
if not placer then return end
local playername = placer:get_player_name()
if minetest.is_protected(place, playername)
or minetest.is_protected(above, playername) then
minetest.record_protection_violation(place, playername)
return
end
if minetest.get_node(base).name == "default:stone"
and minetest.get_node(place).name == "air"
and minetest.get_node(above).name == "air"
then
minetest.swap_node(place, {
name = "cavestuff:stalactite_"..math.random(1,3),
param2 = minetest.dir_to_wallmounted(vector.multiply(dir, -1))
})
if not minetest.is_creative_enabled(playername) then
itemstack:take_item()
end
end
return itemstack
end,
})
minetest.register_node("cavestuff:stalactite_2",{
drawtype="nodebox",
tiles = {"undergrowth_pebble.png"},
groups = {cracky=3,attached_node=1,not_in_creative_inventory=1},
is_ground_content = false,
drop = "cavestuff:stalactite_1",
paramtype = "light",
paramtype2 = "wallmounted",
node_box = {
type = "fixed",
fixed = {
{-0.187500,-0.387500,-0.150003,0.162500,-0.500000,0.162500},
{-0.112500,-0.112500,-0.100000,0.087500,-0.475000,0.087500},
{-0.062500,0.675000,-0.062500,0.062500,-0.500000,0.062500},
{-0.037500,0.975000,0.037500,0.037500,-0.500000,-0.025000},
}
},
})
minetest.register_node("cavestuff:stalactite_3",{
drawtype="nodebox",
tiles = {"undergrowth_pebble.png"},
groups = {cracky=3,attached_node=1,not_in_creative_inventory=1},
is_ground_content = false,
drop = "cavestuff:stalactite_1",
paramtype = "light",
paramtype2 = "wallmounted",
node_box = {
type = "fixed",
fixed = {
{-0.187500,-0.387500,-0.150003,0.162500,-0.500000,0.162500},
{-0.112500,-0.037500,-0.100000,0.087500,-0.475000,0.087500},
{-0.062500,0.437500,-0.062500,0.062500,-0.500000,0.062500},
{-0.037500,1.237500,0.037500,0.037500,-0.500000,-0.025000},
}
},
})
Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

+10
View File
@@ -0,0 +1,10 @@
Ironzorg's Flowers mod served as the basis for the three mods that eventually
went into creating this file. Any code still remaining from that mod is
entirely his work (though I'm pretty sure it's all been phased out).
Flowers textures by Ironzorg.
Junglegrass textures are modified copies of the original one from the game's
default set.
All remaining code, textures, etc. by Vanessa Ezekowitz.
@@ -0,0 +1,359 @@
-----------------------------------------------------------------------------------------------
-- Dry Plants - Recipes 0.1.0 -- Short Grass -> Dirt
-----------------------------------------------------------------------------------------------
-- by Mossmanikin
-- Looked at code from: darkage, default, farming, sickle, stairs
-- Dependencies: default, farming
-- Supports: flint, stoneage, sumpf
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
-- Short Grass
-----------------------------------------------------------------------------------------------
minetest.register_craft({
output = "default:dirt",
recipe = {
{"dryplants:grass_short"},
}
})
-----------------------------------------------------------------------------------------------
-- Cut Grass
-----------------------------------------------------------------------------------------------
-- grass recipes (remove roots)
minetest.register_craft({
output = "dryplants:grass",
recipe = {
{"default:grass_1"},
}
})
minetest.register_craft({
output = "dryplants:grass",
recipe = {
{"default:junglegrass"},
}
})
if minetest.get_modpath("sumpf") ~= nil then
minetest.register_craft({
output = "dryplants:grass",
recipe = {
{"sumpf:gras"},
}
})
end
-----------------------------------------------------------------------------------------------
-- Sickle
-----------------------------------------------------------------------------------------------
minetest.register_craft({
output = "dryplants:sickle",
recipe = {
{"group:stone",""},
{"", "default:stick"},
{"default:stick",""}
}
})
if minetest.get_modpath("flint") then
minetest.register_craft({
output = "dryplants:sickle",
recipe = {
{"flint:flintstone",""},
{"", "default:stick"},
{"default:stick",""}
}
})
end
if minetest.get_modpath("stoneage") then
minetest.register_craft({
output = "dryplants:sickle",
recipe = {
{"stoneage:silex",""},
{"", "default:stick"},
{"default:stick",""}
}
})
end
-----------------------------------------------------------------------------------------------
-- Hay
-----------------------------------------------------------------------------------------------
--cooking
minetest.register_craft({
type = "cooking",
output = "dryplants:hay",
recipe = "dryplants:grass",
cooktime = 2,
})
minetest.register_craft({
type = "fuel",
recipe = "dryplants:hay",
burntime = 1,
})
-----------------------------------------------------------------------------------------------
-- Wet Reed
-----------------------------------------------------------------------------------------------
minetest.register_craft({ -- papyrus -> wetreed
output = "dryplants:wetreed 2",
recipe = {
{"default:papyrus","default:papyrus"},
{"default:papyrus","default:papyrus"},
}
})
minetest.register_craft({ -- reedmace_sapling -> wetreed
output = "dryplants:wetreed 2",
recipe = {
{"dryplants:reedmace_sapling","dryplants:reedmace_sapling"},
{"dryplants:reedmace_sapling","dryplants:reedmace_sapling"},
}
})
minetest.register_craft({ -- reedmace_top -> wetreed
output = "dryplants:wetreed 2",
recipe = {
{"dryplants:reedmace_top","dryplants:reedmace_top"},
{"dryplants:reedmace_top","dryplants:reedmace_top"},
}
})
minetest.register_craft({ -- reedmace -> wetreed
output = "dryplants:wetreed 2",
recipe = {
{"dryplants:reedmace","dryplants:reedmace"},
{"dryplants:reedmace","dryplants:reedmace"},
}
})
minetest.register_craft({ -- reedmace_bottom -> wetreed
output = "dryplants:wetreed 2",
recipe = {
{"dryplants:reedmace_bottom","dryplants:reedmace_bottom"},
{"dryplants:reedmace_bottom","dryplants:reedmace_bottom"},
}
})
local ReeD = {
{"wetreed"},
{"reed"}
}
for i in pairs(ReeD) do
local reed = "dryplants:"..ReeD[i][1]
local slab = reed.."_slab"
local roof = reed.."_roof"
local corner = roof.."_corner"
local corner_2 = corner.."_2"
-----------------------------------------------------------------------------------------------
-- Block
-----------------------------------------------------------------------------------------------
minetest.register_craft({ -- slab -> block
output = reed,
recipe = {
{slab},
{slab},
}
})
minetest.register_craft({ -- roof -> block
output = reed,
recipe = {
{roof},
{roof},
}
})
minetest.register_craft({ -- corner -> block
type = "shapeless",
output = reed.." 3",
recipe = {corner,corner,corner,corner,corner,corner,corner,corner}, -- 8x
})
minetest.register_craft({ -- corner_2 -> block
type = "shapeless",
output = reed.." 3",
recipe = {corner_2,corner_2,corner_2,corner_2,corner_2,corner_2,corner_2,corner_2}, -- 8x
})
-----------------------------------------------------------------------------------------------
-- Slab
-----------------------------------------------------------------------------------------------
minetest.register_craft({ -- block -> slab
output = slab.." 6",
recipe = {
{reed,reed,reed},
}
})
minetest.register_craft({ -- roof -> slab
output = slab,
recipe = {
{roof},
}
})
minetest.register_craft({ -- corner -> slab
output = slab.." 3",
recipe = {
{corner,corner},
{corner,corner},
}
})
minetest.register_craft({ -- corner_2 -> slab
output = slab.." 3",
recipe = {
{corner_2,corner_2},
{corner_2,corner_2},
}
})
-----------------------------------------------------------------------------------------------
-- Roof
-----------------------------------------------------------------------------------------------
minetest.register_craft({ -- block -> roof
output = roof.." 4",
recipe = {
{reed,""},
{"",reed},
}
})
minetest.register_craft({ -- block -> roof
output = roof.." 4",
recipe = {
{"",reed},
{reed,""},
}
})
minetest.register_craft({ -- slab -> roof
output = roof,
recipe = {
{slab},
}
})
-----------------------------------------------------------------------------------------------
-- Roof Corner
-----------------------------------------------------------------------------------------------
minetest.register_craft({ -- block -> corner
output = corner.." 8",
recipe = {
{"",reed,""},
{reed,"",reed},
}
})
minetest.register_craft({ -- corner_2 -> corner
output = corner,
recipe = {
{corner_2},
}
})
-----------------------------------------------------------------------------------------------
-- Roof Corner 2
-----------------------------------------------------------------------------------------------
minetest.register_craft({ -- block -> corner_2
output = corner_2.." 8",
recipe = {
{reed,"",reed},
{"",reed,""},
}
})
minetest.register_craft({ -- corner -> corner_2
output = corner_2,
recipe = {
{corner},
}
})
end
-----------------------------------------------------------------------------------------------
-- Reed
-----------------------------------------------------------------------------------------------
minetest.register_craft({ -- hay -> reed
output = "dryplants:reed 2",
recipe = {
{"dryplants:hay","dryplants:hay"},
{"dryplants:hay","dryplants:hay"},
}
})
--cooking
minetest.register_craft({ -- wetreed -> reed
type = "cooking",
output = "dryplants:reed",
recipe = "dryplants:wetreed",
cooktime = 2,
})
--fuel
minetest.register_craft({
type = "fuel",
recipe = "dryplants:reed",
burntime = 4,
})
-----------------------------------------------------------------------------------------------
-- Reed Slab
-----------------------------------------------------------------------------------------------
--cooking
minetest.register_craft({ -- wetreed_slab -> reed_slab
type = "cooking",
output = "dryplants:reed_slab",
recipe = "dryplants:wetreed_slab",
cooktime = 1,
})
--fuel
minetest.register_craft({
type = "fuel",
recipe = "dryplants:reed_slab",
burntime = 2,
})
-----------------------------------------------------------------------------------------------
-- Reed Roof
-----------------------------------------------------------------------------------------------
--cooking
minetest.register_craft({ -- wetreed_roof -> reed_roof
type = "cooking",
output = "dryplants:reed_roof",
recipe = "dryplants:wetreed_roof",
cooktime = 1,
})
--fuel
minetest.register_craft({
type = "fuel",
recipe = "dryplants:reed_roof",
burntime = 2,
})
-----------------------------------------------------------------------------------------------
-- Reed Roof Corner
-----------------------------------------------------------------------------------------------
--cooking
minetest.register_craft({ -- wetreed_roof_corner -> reed_roof_corner
type = "cooking",
output = "dryplants:reed_roof_corner",
recipe = "dryplants:wetreed_roof_corner",
cooktime = 1,
})
--fuel
minetest.register_craft({
type = "fuel",
recipe = "dryplants:reed_roof_corner",
burntime = 2,
})
-----------------------------------------------------------------------------------------------
-- Wet Reed Roof Corner 2
-----------------------------------------------------------------------------------------------
--cooking
minetest.register_craft({ -- wetreed_roof_corner -> reed_roof_corner
type = "cooking",
output = "dryplants:reed_roof_corner_2",
recipe = "dryplants:wetreed_roof_corner_2",
cooktime = 1,
})
--fuel
minetest.register_craft({
type = "fuel",
recipe = "dryplants:reed_roof_corner_2",
burntime = 2,
})
-----------------------------------------------------------------------------------------------
-- Dandelion Leave
-----------------------------------------------------------------------------------------------
--[[minetest.register_craftitem("dryplants:dandelion_leave", {
description = "Dandelion Leave",
inventory_image = "dryplants_dandelion_leave.png",
on_use = minetest.item_eat(1),
})
minetest.register_craft({
type = "shapeless",
output = "dryplants:dandelion_leave 4",
recipe = {"flowers:dandelion_yellow"},
replacements = {
{"flowers:dandelion_yellow", "dye:yellow"}
},
})]]
+187
View File
@@ -0,0 +1,187 @@
-- support for i18n
local S = minetest.get_translator("dryplants")
abstract_dryplants = {}
dofile(minetest.get_modpath("dryplants").."/crafting.lua")
dofile(minetest.get_modpath("dryplants").."/reed.lua")
dofile(minetest.get_modpath("dryplants").."/reedmace.lua")
dofile(minetest.get_modpath("dryplants").."/juncus.lua")
dofile(minetest.get_modpath("dryplants").."/moregrass.lua")
--dofile(minetest.get_modpath("dryplants").."/meadowvariation.lua")
-----------------------------------------------------------------------------------------------
-- Sickle
-----------------------------------------------------------------------------------------------
local function sickle_can_break(pos, deff, player)
local def = ItemStack({name=deff.name}):get_definition()
if not def.diggable or (def.can_dig and not def.can_dig(pos,player)) then
minetest.log("info", player:get_player_name() .. " tried to sickle "
.. def.name .. " which is not diggable "
.. minetest.pos_to_string(pos))
return
end
if minetest.is_protected(pos, player:get_player_name()) then
minetest.log("action", player:get_player_name()
.. " tried to sickle " .. def.name
.. " at protected position "
.. minetest.pos_to_string(pos))
minetest.record_protection_violation(pos, player:get_player_name())
return
end
return true
end
-- turns nodes with group flora=1 & flower=0 into cut grass
local function sickle_on_use(itemstack, user, pointed_thing, uses)
local pt = pointed_thing
-- check if pointing at a node
if not pt then
return
end
if pt.type ~= "node" then
return
end
local under = minetest.get_node(pt.under)
local above_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
local above = minetest.get_node(above_pos)
-- return if any of the nodes is not registered
if not minetest.registered_nodes[under.name] then
return
end
if not minetest.registered_nodes[above.name] then
return
end
if not sickle_can_break(pt.under, under, user) then
return
end
-- check if something that can be cut using fine tools
if minetest.get_item_group(under.name, "snappy") > 0 then
-- check if flora but no flower
if minetest.get_item_group(under.name, "flora") == 1 and minetest.get_item_group(under.name, "flower") == 0 then
-- turn the node into cut grass, wear out item and play sound
minetest.swap_node(pt.under, {name="dryplants:grass"})
else -- otherwise dig the node
if not minetest.node_dig(pt.under, under, user) then
return
end
end
minetest.sound_play("default_dig_crumbly", {
pos = pt.under,
gain = 0.5,
})
itemstack:add_wear(65535/(uses-1))
return itemstack
elseif string.find(under.name, "default:dirt_with_grass") then
if minetest.is_protected(above_pos, user:get_player_name()) or above.name ~= "air" then
return
end
minetest.swap_node(pt.under, {name="dryplants:grass_short"})
minetest.swap_node(above_pos, {name="dryplants:grass"})
minetest.sound_play("default_dig_crumbly", {
pos = pt.under,
gain = 0.5,
})
itemstack:add_wear(65535/(uses-1))
return itemstack
end
end
-- the tool
minetest.register_tool("dryplants:sickle", {
description = S("Sickle"),
inventory_image = "dryplants_sickle.png",
on_use = function(itemstack, user, pointed_thing)
return sickle_on_use(itemstack, user, pointed_thing, 220)
end,
})
-----------------------------------------------------------------------------------------------
-- Cut Grass
-----------------------------------------------------------------------------------------------
minetest.register_node("dryplants:grass", {
description = S("Cut Grass"),
inventory_image = "dryplants_grass.png",
wield_image = "dryplants_grass.png",
paramtype = "light",
sunlight_propagates = true,
tiles = {"dryplants_grass.png"},
use_texture_alpha = "clip",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {-0.5 , -0.5 , -0.5 , 0.5 , -0.4375, 0.5 },
},
groups = {snappy=3, flammable=2},
is_ground_content = false,
sounds = default.node_sound_leaves_defaults(),
})
-----------------------------------------------------------------------------------------------
-- Cut Grass becomes Hay over time
-----------------------------------------------------------------------------------------------
minetest.register_abm({
nodenames = {"dryplants:grass"},
interval = 3600, --1200, -- 20 minutes: a minetest-day/night-cycle
chance = 1,
action = function(pos)
minetest.swap_node(pos, {name="dryplants:hay"})
end,
})
-----------------------------------------------------------------------------------------------
-- Hay
-----------------------------------------------------------------------------------------------
minetest.register_node("dryplants:hay", {
description = S("Hay"),
inventory_image = "dryplants_hay.png",
wield_image = "dryplants_hay.png",
paramtype = "light",
sunlight_propagates = true,
tiles = {"dryplants_hay.png"},
use_texture_alpha = "clip",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {-0.5 , -0.5 , -0.5 , 0.5 , -0.4375, 0.5 },
},
groups = {snappy=3, flammable=2},
is_ground_content = false,
sounds = default.node_sound_leaves_defaults(),
})
-----------------------------------------------------------------------------------------------
-- Short Grass
-----------------------------------------------------------------------------------------------
minetest.register_node("dryplants:grass_short", {
description = S("Short Grass"),
tiles = {"default_grass.png^dryplants_grass_short.png", "default_dirt.png", "default_dirt.png^default_grass_side.png^dryplants_grass_short_side.png"},
is_ground_content = true,
groups = {crumbly=3,soil=1,not_in_creative_inventory=1},
--drop = 'default:dirt',
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4},
}),
})
-----------------------------------------------------------------------------------------------
-- Short Grass becomes Dirt with Grass over time
-----------------------------------------------------------------------------------------------
minetest.register_abm({
nodenames = {"dryplants:grass_short"},
interval = 1200, --1200, -- 20 minutes: a minetest-day/night-cycle
chance = 100/1200,
action = function(pos)
-- Only become dirt with grass if no cut grass or hay lies on top
local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z})
if above.name ~= "dryplants:grass" and above.name ~= "dryplants:hay" then
minetest.swap_node(pos, {name="default:dirt_with_grass"})
end
end,
})
+156
View File
@@ -0,0 +1,156 @@
-- support for i18n
local S = minetest.get_translator("dryplants")
local function grow_juncus(pos)
local juncus_type = math.random(2,3)
local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
local nodename = minetest.get_node(right_here).name
if nodename == "air" or nodename == "default:junglegrass" then
if juncus_type == 2 then
minetest.swap_node(right_here, {name="dryplants:juncus_02"})
else
minetest.swap_node(right_here, {name="dryplants:juncus"})
end
end
end
minetest.register_node("dryplants:juncus", {
description = S("Juncus"),
drawtype = "plantlike",
visual_scale = math.sqrt(8),
paramtype = "light",
tiles = {"dryplants_juncus_03.png"},
inventory_image = "dryplants_juncus_inv.png",
walkable = false,
buildable_to = true,
groups = {
snappy=3,
flammable=2,
attached_node=1,
flora=1
--not_in_creative_inventory=1
},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
},
on_place = function(itemstack, placer, pointed_thing)
if not itemstack or not placer or not pointed_thing then
return
end
local playername = placer:get_player_name()
if minetest.is_protected(pointed_thing.above, playername) or
minetest.is_protected(pointed_thing.under, playername) then
minetest.chat_send_player(playername, "Someone else owns that spot.")
return
end
local pos = pointed_thing.under
local juncus_type = math.random(2,3)
local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
if juncus_type == 2 then
minetest.swap_node(right_here, {name="dryplants:juncus_02"})
else
minetest.swap_node(right_here, {name="dryplants:juncus"})
end
if not minetest.is_creative_enabled(playername) then
itemstack:take_item()
end
return itemstack
end,
})
minetest.register_node("dryplants:juncus_02", {
description = S("Juncus"),
drawtype = "plantlike",
visual_scale = math.sqrt(8),
paramtype = "light",
tiles = {"dryplants_juncus_02.png"},
walkable = false,
buildable_to = true,
groups = {
snappy=3,
flammable=2,
attached_node=1,
flora=1,
not_in_creative_inventory=1
},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
},
drop = "dryplants:juncus",
})
-----------------------------------------------------------------------------------------------
-- GENERATE SMALL JUNCUS
-----------------------------------------------------------------------------------------------
-- near water or swamp
minetest.register_decoration({
name = "dryplants:juncus_water",
decoration = {"air"},
fill_ratio = 0.16,
y_min = 1,
y_max = 40,
place_on = {
"default:dirt_with_grass",
"stoneage:grass_with_silex",
"sumpf:peat",
"sumpf:sumpf"
},
deco_type = "simple",
flags = "all_floors",
spawn_by = {
"default:water_source",
"sumpf:dirtywater_source",
"sumpf:sumpf"
},
check_offset = -1,
num_spawn_by = 1
})
-- at dunes/beach
minetest.register_decoration({
name = "dryplants:juncus_beach",
decoration = {"air"},
fill_ratio = 0.08,
y_min = 1,
y_max = 40,
place_on = {
"default:sand",
},
deco_type = "simple",
flags = "all_floors",
spawn_by = {"default:dirt_with_grass"},
check_offset = -1,
num_spawn_by = 1
})
local did, did2
minetest.register_on_mods_loaded(function()
did = minetest.get_decoration_id("dryplants:juncus_water")
did2 = minetest.get_decoration_id("dryplants:juncus_beach")
minetest.set_gen_notify("decoration", {did, did2})
end)
minetest.register_on_generated(function(minp, maxp, blockseed)
local g = minetest.get_mapgen_object("gennotify")
local locations = {}
local deco_locations_1 = g["decoration#" .. did] or {}
local deco_locations_2 = g["decoration#" .. did2] or {}
for _, pos in pairs(deco_locations_1) do
locations[#locations+1] = pos
end
for _, pos in pairs(deco_locations_2) do
locations[#locations+1] = pos
end
if #locations == 0 then return end
for _, pos in ipairs(locations) do
grow_juncus(pos)
end
end)
@@ -0,0 +1,21 @@
# textdomain: dryplants
Sickle=Sichel
Cut Grass=Grasschnitt
Hay=Heu
Short Grass=Kurzes Gras
Juncus=Binsen
Wet Reed=Nasses Schilf
Wet Reed Slab=Nasse Schilfplatte
Wet Reed Roof=Nasses Schilfdach
Wet Reed Roof Corner 1=Nasser Schilfdachwinkel 1
Wet Reed Roof Corner 2=Nasser Schilfdachwinkel 2
Reed=Schilf
Reed Slab=Schilfstufe
Reed Roof=Schilfdach
Reed Roof Corner 1=Schilfdachwinkel 1
Reed Roof Corner 2=Schilfdachwinkel
Reedmace=Rohrkolben
Reedmace, height: 1=Rohrkolben, Höhe: 1
Reedmace, height: 2=Rohrkolben, Höhe: 2
Reedmace, height: 3=Rohrkolben, Höhe: 3
Reedmace, height: 3 & Spikes=Rohrkolben, Höhe: 3 & Rispe
@@ -0,0 +1,21 @@
# textdomain: dryplants
Sickle=
Cut Grass=Tranĉita Herbenon
Hay=Fojno
Short Grass=Mallonga Herbo
Juncus=Junko
Wet Reed=Malseka Kano
Wet Reed Slab=Slabo de Malseka Kano
Wet Reed Roof=Tegmento de Malseka Kano
Wet Reed Roof Corner 1=Tegmentangulo 1 de Malseka Kano
Wet Reed Roof Corner 2=Tegmentangulo 2 de Malseka Kano
Reed=Kano
Reed Slab=Slabo de Kano
Reed Roof=Tegmento de Kano
Reed Roof Corner 1=Tegmentangulo 1 de Kano
Reed Roof Corner 2=Tegmentangulo 2 de Kano
Reedmace=Tifeo
Reedmace, height: 1=Tifeo, alteco: 1
Reedmace, height: 2=Tifeo, alteco: 2
Reedmace, height: 3=Tifeo, alteco: 3
Reedmace, height: 3 & Spikes=Tifeo, alteco: 3 & Pikiloj
@@ -0,0 +1,21 @@
# textdomain: dryplants
Sickle=Faucille
Cut Grass=Herbe coupée
Hay=Foin
Short Grass=Herbes courtes
Juncus=Joncs
Wet Reed=Bloc de roseau humide
Wet Reed Slab=Dalle en roseau humide
Wet Reed Roof=Toit en roseau humide
Wet Reed Roof Corner 1=Angle de toit en roseau humide 1
Wet Reed Roof Corner 2=Angle de toit en roseau humide 2
Reed=Roseau
Reed Slab=Dalle en roseau
Reed Roof=Toit en roseau
Reed Roof Corner 1=Angle de toit en roseau 1
Reed Roof Corner 2=Angle de toit en roseau 2
Reedmace=Roseau
Reedmace, height: 1=Roseau, 1 de hauteur
Reedmace, height: 2=Roseau, 2 de hauteur
Reedmace, height: 3=Roseau, 3 de hauteur
Reedmace, height: 3 & Spikes=Roseau, 3 de hauteur avec panicules
@@ -0,0 +1,21 @@
# textdomain: dryplants
Sickle=
Cut Grass=
Hay=
Short Grass=
Juncus=
Wet Reed=
Wet Reed Slab=
Wet Reed Roof=
Wet Reed Roof Corner 1=
Wet Reed Roof Corner 2=
Reed=
Reed Slab=
Reed Roof=
Reed Roof Corner 1=
Reed Roof Corner 2=
Reedmace=
Reedmace, height: 1=
Reedmace, height: 2=
Reedmace, height: 3=
Reedmace, height: 3 & Spikes=
@@ -0,0 +1,12 @@
-- @reviewer: couldn't even find using biome_lib
minetest.register_decoration({
decoration = {"dryplants:grass_short"},
fill_ratio = 0.8,
y_min = 1,
y_max = 40,
place_on = {
"default:dirt_with_grass",
},
deco_type = "simple",
flags = "all_floors"
})
@@ -0,0 +1,3 @@
name = dryplants
depends = default
optional_depends = farming, ebiomes

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