summaryrefslogtreecommitdiff
path: root/plantlife_modpack
diff options
context:
space:
mode:
Diffstat (limited to 'plantlife_modpack')
-rw-r--r--plantlife_modpack/3dmushrooms/depends.txt2
-rw-r--r--plantlife_modpack/3dmushrooms/init.lua68
-rw-r--r--plantlife_modpack/3dmushrooms/models/3dmushrooms.obj329
-rw-r--r--plantlife_modpack/3dmushrooms/textures/3dmushrooms_brown.pngbin0 -> 5094 bytes
-rw-r--r--plantlife_modpack/3dmushrooms/textures/3dmushrooms_brown_inv.pngbin0 -> 4266 bytes
-rw-r--r--plantlife_modpack/3dmushrooms/textures/3dmushrooms_red.pngbin0 -> 2731 bytes
-rw-r--r--plantlife_modpack/3dmushrooms/textures/3dmushrooms_red_inv.pngbin0 -> 5279 bytes
-rw-r--r--plantlife_modpack/LICENSE336
-rw-r--r--plantlife_modpack/README72
-rw-r--r--plantlife_modpack/along_shore/depends.txt3
-rw-r--r--plantlife_modpack/along_shore/init.lua9
-rw-r--r--plantlife_modpack/along_shore/textures/along_shore_seaweed_1Darker.pngbin0 -> 234 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/credit_textures.txt30
-rw-r--r--plantlife_modpack/along_shore/textures/old/LillyPad3x16.pngbin0 -> 439 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/MultiLilly16x.pngbin0 -> 305 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_empty.pngbin0 -> 74 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_lilypads_1.pngbin0 -> 305 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_lilypads_2.pngbin0 -> 382 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_lilypads_3.pngbin0 -> 314 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_lilypads_4.pngbin0 -> 209 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_pondscum_1.pngbin0 -> 543 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_seaweed_1.pngbin0 -> 222 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_seaweed_2.pngbin0 -> 224 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_seaweed_3.pngbin0 -> 226 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/along_shore_seaweed_4.pngbin0 -> 178 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/flowers_seaweed.pngbin0 -> 222 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/flowers_waterlily.pngbin0 -> 404 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/flowers_waterlily_22.5.pngbin0 -> 429 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/flowers_waterlily_45.pngbin0 -> 424 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/flowers_waterlily_67.5.pngbin0 -> 427 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/lillyPad5x16.pngbin0 -> 308 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/lillypad3Flower16x.pngbin0 -> 411 bytes
-rw-r--r--plantlife_modpack/along_shore/textures/old/pondscum16xc.pngbin0 -> 543 bytes
-rw-r--r--plantlife_modpack/bushes/depends.txt4
-rw-r--r--plantlife_modpack/bushes/init.lua257
-rw-r--r--plantlife_modpack/bushes/textures/bushes_branches_center_1.pngbin0 -> 305 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_branches_center_2.pngbin0 -> 305 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_branches_left_1.pngbin0 -> 577 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_branches_left_2.pngbin0 -> 598 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_branches_right_1.pngbin0 -> 592 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_branches_right_2.pngbin0 -> 632 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_leaves_1.pngbin0 -> 205 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_leaves_2.pngbin0 -> 205 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_youngtree2trunk.pngbin0 -> 1074 bytes
-rw-r--r--plantlife_modpack/bushes/textures/bushes_youngtree2trunk_inv.pngbin0 -> 872 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BlockBranch1.pngbin0 -> 73879 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BlockBranch1L.pngbin0 -> 34131 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BlockBranch1R.pngbin0 -> 40264 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BushBranches1.pngbin0 -> 52878 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BushBranches1sm.pngbin0 -> 609 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BushBranches1sm2.pngbin0 -> 620 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BushBranches1sm3.pngbin0 -> 396 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BushBranches1sm4.pngbin0 -> 540 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BushBranchesCenter.pngbin0 -> 285 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BushBranchesSide1.pngbin0 -> 657 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/BushBranchesSide2.pngbin0 -> 693 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/blank.pngbin0 -> 83 bytes
-rw-r--r--plantlife_modpack/bushes/textures/old & unused/moretrees_pine_leaves3.pngbin0 -> 525 bytes
-rw-r--r--plantlife_modpack/bushes_classic/cooking.lua118
-rw-r--r--plantlife_modpack/bushes_classic/depends.txt3
-rw-r--r--plantlife_modpack/bushes_classic/image_credits.txt5
-rw-r--r--plantlife_modpack/bushes_classic/init.lua59
-rw-r--r--plantlife_modpack/bushes_classic/locale/de.txt43
-rw-r--r--plantlife_modpack/bushes_classic/locale/fr.txt43
-rw-r--r--plantlife_modpack/bushes_classic/locale/template.txt43
-rw-r--r--plantlife_modpack/bushes_classic/locale/tr.txt44
-rw-r--r--plantlife_modpack/bushes_classic/models/bushes_basket_empty.obj46
-rw-r--r--plantlife_modpack/bushes_classic/models/bushes_basket_full.obj330
-rw-r--r--plantlife_modpack/bushes_classic/models/bushes_bush.obj329
-rw-r--r--plantlife_modpack/bushes_classic/nodes.lua214
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_basket.pngbin0 -> 2956 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_basket_pie_blackberry.pngbin0 -> 3631 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_basket_pie_blueberry.pngbin0 -> 3627 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_basket_pie_gooseberry.pngbin0 -> 3645 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_basket_pie_mixed_berry.pngbin0 -> 3587 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_basket_pie_raspberry.pngbin0 -> 3610 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_basket_pie_strawberry.pngbin0 -> 3607 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_blackberry.pngbin0 -> 1140 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_cooked.pngbin0 -> 601 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_raw.pngbin0 -> 612 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_slice.pngbin0 -> 341 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_blueberry.pngbin0 -> 1615 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_cooked.pngbin0 -> 602 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_raw.pngbin0 -> 606 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_slice.pngbin0 -> 347 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_bush_blackberry.pngbin0 -> 9089 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_bush_blueberry.pngbin0 -> 9203 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_bush_fruitless.pngbin0 -> 7891 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_bush_gooseberry.pngbin0 -> 9275 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_bush_raspberry.pngbin0 -> 9226 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_bush_strawberry.pngbin0 -> 9137 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_gooseberry.pngbin0 -> 979 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_cooked.pngbin0 -> 607 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_raw.pngbin0 -> 597 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_slice.pngbin0 -> 348 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_cooked.pngbin0 -> 565 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_raw.pngbin0 -> 586 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_slice.pngbin0 -> 337 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_raspberry.pngbin0 -> 1360 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_cooked.pngbin0 -> 613 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_raw.pngbin0 -> 610 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_slice.pngbin0 -> 352 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_strawberry.pngbin0 -> 1961 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_cooked.pngbin0 -> 577 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_raw.pngbin0 -> 606 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_slice.pngbin0 -> 339 bytes
-rw-r--r--plantlife_modpack/bushes_classic/textures/bushes_sugar.pngbin0 -> 2077 bytes
-rw-r--r--plantlife_modpack/cavestuff/depends.txt2
-rw-r--r--plantlife_modpack/cavestuff/init.lua12
-rw-r--r--plantlife_modpack/cavestuff/mapgen.lua52
-rw-r--r--plantlife_modpack/cavestuff/models/cavestuff_pebble.obj279
-rw-r--r--plantlife_modpack/cavestuff/nodes.lua145
-rw-r--r--plantlife_modpack/cavestuff/textures/undergrowth_desert_pebble.pngbin0 -> 303 bytes
-rw-r--r--plantlife_modpack/cavestuff/textures/undergrowth_pebble.pngbin0 -> 362 bytes
-rw-r--r--plantlife_modpack/copyright.txt10
-rw-r--r--plantlife_modpack/dryplants/crafting.lua360
-rw-r--r--plantlife_modpack/dryplants/depends.txt3
-rw-r--r--plantlife_modpack/dryplants/init.lua203
-rw-r--r--plantlife_modpack/dryplants/juncus.lua133
-rw-r--r--plantlife_modpack/dryplants/meadowvariation.lua26
-rw-r--r--plantlife_modpack/dryplants/models/plantlike.obj28
-rw-r--r--plantlife_modpack/dryplants/moregrass.lua33
-rw-r--r--plantlife_modpack/dryplants/reed.lua380
-rw-r--r--plantlife_modpack/dryplants/reedmace.lua411
-rw-r--r--plantlife_modpack/dryplants/settings.txt52
-rw-r--r--plantlife_modpack/dryplants/textures/default_grass_1.pngbin0 -> 212 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/default_grass_2.pngbin0 -> 315 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/default_grass_3.pngbin0 -> 428 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/default_grass_4.pngbin0 -> 525 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/default_grass_5.pngbin0 -> 611 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_grass.pngbin0 -> 486 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_grass_short.pngbin0 -> 771 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_grass_short_side.pngbin0 -> 396 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_hay.pngbin0 -> 512 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_juncus_02.pngbin0 -> 670 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_juncus_03.pngbin0 -> 720 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_juncus_inv.pngbin0 -> 600 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reed.pngbin0 -> 685 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reed_wet.pngbin0 -> 672 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace.pngbin0 -> 615 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace_bottom.pngbin0 -> 708 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace_height_2.pngbin0 -> 1255 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace_height_3.pngbin0 -> 1893 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace_height_3_spikes.pngbin0 -> 2137 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace_sapling.pngbin0 -> 455 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace_spikes.pngbin0 -> 491 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace_top.pngbin0 -> 329 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_reedmace_water.pngbin0 -> 588 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/dryplants_sickle.pngbin0 -> 147 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/big_pic_8.pngbin0 -> 1983 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/big_pic_9.pngbin0 -> 2178 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_cattailsG_m2.pngbin0 -> 1491 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_left.pngbin0 -> 352 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_right.pngbin0 -> 393 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_whole2.pngbin0 -> 621 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_left.pngbin0 -> 414 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_right.pngbin0 -> 387 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_whole2.pngbin0 -> 665 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_01.pngbin0 -> 362 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_02.pngbin0 -> 708 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_03.pngbin0 -> 1148 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_04.pngbin0 -> 1329 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_bottom_left.pngbin0 -> 122 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_bottom_right.pngbin0 -> 189 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_left.pngbin0 -> 185 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_right.pngbin0 -> 196 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_top_left.pngbin0 -> 102 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_top_right.pngbin0 -> 147 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/reedmace2.pngbin0 -> 2359 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/reedmace3.pngbin0 -> 2869 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/reedmace4.pngbin0 -> 2960 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/reedtest.pngbin0 -> 333 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/not_in_use/texturing.pngbin0 -> 3055 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_grass_short_old3.pngbin0 -> 823 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_grass_short_old4.pngbin0 -> 337 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_juncus_02_left_old.pngbin0 -> 371 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_juncus_02_right_old.pngbin0 -> 389 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_juncus_03_left_old.pngbin0 -> 414 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_juncus_03_right_old.pngbin0 -> 400 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_left_old2.pngbin0 -> 143 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_old4.pngbin0 -> 734 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_right_old2.pngbin0 -> 186 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_left_old2.pngbin0 -> 191 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_old8.pngbin0 -> 698 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_right_old2.pngbin0 -> 200 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_spikes_old3.pngbin0 -> 556 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_left_old2.pngbin0 -> 99 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_old3.pngbin0 -> 404 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_right_old2.pngbin0 -> 120 bytes
-rw-r--r--plantlife_modpack/dryplants/textures/old/dryplants_reedmace_water_old2.pngbin0 -> 569 bytes
-rw-r--r--plantlife_modpack/ferns/crafting.lua104
-rw-r--r--plantlife_modpack/ferns/depends.txt2
-rw-r--r--plantlife_modpack/ferns/fern.lua196
-rw-r--r--plantlife_modpack/ferns/gianttreefern.lua336
-rw-r--r--plantlife_modpack/ferns/horsetail.lua156
-rw-r--r--plantlife_modpack/ferns/init.lua69
-rw-r--r--plantlife_modpack/ferns/settings.lua43
-rw-r--r--plantlife_modpack/ferns/textures/ferns_5.pngbin0 -> 550 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_6.pngbin0 -> 666 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_7.pngbin0 -> 669 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_8.pngbin0 -> 510 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern.pngbin0 -> 362 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_big.pngbin0 -> 1170 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_mid.pngbin0 -> 699 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_tree.pngbin0 -> 1339 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_tree_giant.pngbin0 -> 3250 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_tree_inv.pngbin0 -> 391 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_tree_tl.pngbin0 -> 264 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_tree_tr.pngbin0 -> 256 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_trunk.pngbin0 -> 765 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_trunk_big.pngbin0 -> 684 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_trunk_big_top.pngbin0 -> 398 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fern_trunk_top.pngbin0 -> 233 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_ferntuber.pngbin0 -> 438 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_ferntuber_roasted.pngbin0 -> 428 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fiddlehead.pngbin0 -> 327 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_fiddlehead_roasted.pngbin0 -> 521 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_horsetail_01.pngbin0 -> 150 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_horsetail_02.pngbin0 -> 166 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_horsetail_03.pngbin0 -> 199 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_horsetail_04.pngbin0 -> 224 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_sapling_tree_fern.pngbin0 -> 168 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_sapling_tree_fern_giant.pngbin0 -> 224 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big.pngbin0 -> 560 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big_cross.pngbin0 -> 724 bytes
-rw-r--r--plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big_end.pngbin0 -> 456 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/archaeplantae_horsetails.pngbin0 -> 308 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/big picture 3.pngbin0 -> 1972 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/ferns_fern_big_left.pngbin0 -> 640 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/ferns_fern_big_right.pngbin0 -> 623 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/ferns_fern_mid_left.pngbin0 -> 393 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/ferns_fern_mid_right.pngbin0 -> 414 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/ferns_fern_tree_bl.pngbin0 -> 554 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/ferns_fern_tree_br.pngbin0 -> 544 bytes
-rw-r--r--plantlife_modpack/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.pngbin0 -> 681 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/archaeplantae_fern_old4.pngbin0 -> 368 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/comb.pngbin0 -> 112 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_5_old.pngbin0 -> 461 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_6_old.pngbin0 -> 700 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_7_old.pngbin0 -> 677 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_fern_big_old.pngbin0 -> 1147 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_fern_mid_old.pngbin0 -> 664 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_fern_tree_old.pngbin0 -> 1294 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_old2.pngbin0 -> 669 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_top_old.pngbin0 -> 814 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_top_old2.pngbin0 -> 714 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_fern_trunk_top_old.pngbin0 -> 230 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_horsetail_01_old2.pngbin0 -> 177 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_horsetail_02_old2.pngbin0 -> 204 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_horsetail_03_old2.pngbin0 -> 251 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_horsetail_04_old2.pngbin0 -> 279 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.pngbin0 -> 712 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_end_old.pngbin0 -> 457 bytes
-rw-r--r--plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_old.pngbin0 -> 522 bytes
-rw-r--r--plantlife_modpack/ferns/treefern.lua228
-rw-r--r--plantlife_modpack/flowers_plus/depends.txt2
-rw-r--r--plantlife_modpack/flowers_plus/flowers-changelog.txt24
-rw-r--r--plantlife_modpack/flowers_plus/init.lua479
-rw-r--r--plantlife_modpack/flowers_plus/locale/de.txt13
-rw-r--r--plantlife_modpack/flowers_plus/locale/fr.txt13
-rw-r--r--plantlife_modpack/flowers_plus/locale/template.txt13
-rw-r--r--plantlife_modpack/flowers_plus/models/flowers_sunflower.obj73
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_seaweed.pngbin0 -> 234 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_seaweedLight.pngbin0 -> 222 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_seaweed_2.pngbin0 -> 224 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_seaweed_3.pngbin0 -> 226 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_seaweed_4.pngbin0 -> 178 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_sunflower.pngbin0 -> 811 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_sunflower_inv.pngbin0 -> 378 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_waterlily.pngbin0 -> 412 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_waterlily_22.5.pngbin0 -> 409 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_waterlily_45.pngbin0 -> 421 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_waterlily_67.5.pngbin0 -> 435 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_1.pngbin0 -> 468 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_2.pngbin0 -> 472 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_3.pngbin0 -> 422 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_4.pngbin0 -> 219 bytes
-rw-r--r--plantlife_modpack/flowers_plus/textures/tr.txt14
-rw-r--r--plantlife_modpack/junglegrass/init.lua3
-rw-r--r--plantlife_modpack/modpack.txt0
-rw-r--r--plantlife_modpack/molehills/depends.txt2
-rw-r--r--plantlife_modpack/molehills/init.lua78
-rw-r--r--plantlife_modpack/molehills/models/molehill_molehill.obj197
-rw-r--r--plantlife_modpack/molehills/molehills_settings.txt6
-rw-r--r--plantlife_modpack/molehills/textures/molehills_dirt.pngbin0 -> 806 bytes
-rw-r--r--plantlife_modpack/molehills/textures/molehills_side.pngbin0 -> 308 bytes
-rw-r--r--plantlife_modpack/molehills/textures/old & unused/molehill_side.pngbin0 -> 110 bytes
-rw-r--r--plantlife_modpack/molehills/textures/old & unused/molehill_top.pngbin0 -> 162 bytes
-rw-r--r--plantlife_modpack/nature_classic/blossom.lua75
-rw-r--r--plantlife_modpack/nature_classic/config.lua6
-rw-r--r--plantlife_modpack/nature_classic/depends.txt2
-rw-r--r--plantlife_modpack/nature_classic/global_function.lua82
-rw-r--r--plantlife_modpack/nature_classic/init.lua41
-rw-r--r--plantlife_modpack/nature_classic/textures/nature_blossom.pngbin0 -> 115 bytes
-rw-r--r--plantlife_modpack/poisonivy/depends.txt2
-rw-r--r--plantlife_modpack/poisonivy/init.lua103
-rw-r--r--plantlife_modpack/poisonivy/locale/de.txt7
-rw-r--r--plantlife_modpack/poisonivy/locale/fr.txt7
-rw-r--r--plantlife_modpack/poisonivy/locale/template.txt7
-rw-r--r--plantlife_modpack/poisonivy/locale/tr.txt7
-rw-r--r--plantlife_modpack/poisonivy/textures/poisonivy_climbing.pngbin0 -> 228 bytes
-rw-r--r--plantlife_modpack/poisonivy/textures/poisonivy_seedling.pngbin0 -> 179 bytes
-rw-r--r--plantlife_modpack/poisonivy/textures/poisonivy_sproutling.pngbin0 -> 239 bytes
-rw-r--r--plantlife_modpack/trunks/crafting.lua133
-rw-r--r--plantlife_modpack/trunks/depends.txt6
-rw-r--r--plantlife_modpack/trunks/generating.lua554
-rw-r--r--plantlife_modpack/trunks/init.lua17
-rw-r--r--plantlife_modpack/trunks/nodes.lua368
-rw-r--r--plantlife_modpack/trunks/textures/credit_textures.txt34
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/comboSticks.pngbin0 -> 243 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/comboSticks_2.pngbin0 -> 363 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/trunks_root_mask_old.pngbin0 -> 135 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/trunks_twig_1e.pngbin0 -> 136 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/trunks_twig_1n.pngbin0 -> 147 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/trunks_twig_2n.pngbin0 -> 142 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/trunks_twig_3n.pngbin0 -> 138 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/trunks_twig_4n.pngbin0 -> 152 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/trunks_twig_5-8.pngbin0 -> 170 bytes
-rw-r--r--plantlife_modpack/trunks/textures/old & unused/trunks_twig_9-12.pngbin0 -> 200 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_moss.pngbin0 -> 199 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_moss_fungus.pngbin0 -> 230 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_root_mask.pngbin0 -> 191 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_1.pngbin0 -> 134 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_10.pngbin0 -> 149 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_11.pngbin0 -> 122 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_12.pngbin0 -> 115 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_13.pngbin0 -> 105 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_2.pngbin0 -> 141 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_3.pngbin0 -> 136 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_4.pngbin0 -> 126 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_5.pngbin0 -> 110 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_6.pngbin0 -> 74 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_7.pngbin0 -> 104 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_8.pngbin0 -> 118 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twig_9.pngbin0 -> 110 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twigs.pngbin0 -> 759 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twigs_corner.pngbin0 -> 641 bytes
-rw-r--r--plantlife_modpack/trunks/textures/trunks_twigs_top.pngbin0 -> 471 bytes
-rw-r--r--plantlife_modpack/trunks/trunks_settings.txt70
-rw-r--r--plantlife_modpack/vines/LICENSE.md4
-rw-r--r--plantlife_modpack/vines/README.md56
-rw-r--r--plantlife_modpack/vines/aliases.lua11
-rw-r--r--plantlife_modpack/vines/crafts.lua14
-rw-r--r--plantlife_modpack/vines/depends.txt3
-rw-r--r--plantlife_modpack/vines/functions.lua132
-rw-r--r--plantlife_modpack/vines/init.lua14
-rw-r--r--plantlife_modpack/vines/nodes.lua83
-rw-r--r--plantlife_modpack/vines/recipes.lua12
-rw-r--r--plantlife_modpack/vines/shear.lua15
-rw-r--r--plantlife_modpack/vines/textures/vines_item.pngbin0 -> 167 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_jungle_end.pngbin0 -> 497 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_jungle_middle.pngbin0 -> 481 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_root_end.pngbin0 -> 215 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_root_middle.pngbin0 -> 201 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_rope.pngbin0 -> 106 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_rope_end.pngbin0 -> 118 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_shears.pngbin0 -> 194 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_side_end.pngbin0 -> 247 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_side_middle.pngbin0 -> 225 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_vine_end.pngbin0 -> 364 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_vine_middle.pngbin0 -> 187 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_willow_end.pngbin0 -> 226 bytes
-rw-r--r--plantlife_modpack/vines/textures/vines_willow_middle.pngbin0 -> 196 bytes
-rw-r--r--plantlife_modpack/vines/vines.lua104
-rw-r--r--plantlife_modpack/woodsoils/depends.txt7
-rw-r--r--plantlife_modpack/woodsoils/generating.lua151
-rw-r--r--plantlife_modpack/woodsoils/init.lua29
-rw-r--r--plantlife_modpack/woodsoils/nodes.lua79
-rw-r--r--plantlife_modpack/woodsoils/textures/credit_textures.txt16
-rw-r--r--plantlife_modpack/woodsoils/textures/not in use/woodsoils.pngbin0 -> 110 bytes
-rw-r--r--plantlife_modpack/woodsoils/textures/woodsoils_ground.pngbin0 -> 693 bytes
-rw-r--r--plantlife_modpack/woodsoils/textures/woodsoils_ground_cover.pngbin0 -> 775 bytes
-rw-r--r--plantlife_modpack/woodsoils/textures/woodsoils_ground_cover2.pngbin0 -> 684 bytes
-rw-r--r--plantlife_modpack/woodsoils/textures/woodsoils_ground_cover_side.pngbin0 -> 353 bytes
-rw-r--r--plantlife_modpack/woodsoils/textures/woodsoils_ground_cover_side2.pngbin0 -> 325 bytes
-rw-r--r--plantlife_modpack/woodsoils/textures/woodsoils_ground_side.pngbin0 -> 368 bytes
-rw-r--r--plantlife_modpack/youngtrees/depends.txt2
-rw-r--r--plantlife_modpack/youngtrees/init.lua146
-rw-r--r--plantlife_modpack/youngtrees/textures/bamboo.pngbin0 -> 112 bytes
-rw-r--r--plantlife_modpack/youngtrees/textures/unused/sapling.pngbin0 -> 14617 bytes
-rw-r--r--plantlife_modpack/youngtrees/textures/unused/sapling16x.pngbin0 -> 1020 bytes
-rw-r--r--plantlife_modpack/youngtrees/textures/youngtree16xa.pngbin0 -> 420 bytes
-rw-r--r--plantlife_modpack/youngtrees/textures/youngtree16xb.pngbin0 -> 314 bytes
-rw-r--r--plantlife_modpack/youngtrees/textures/youngtree16xc.pngbin0 -> 142 bytes
-rw-r--r--plantlife_modpack/youngtrees/textures/youngtree2branch.pngbin0 -> 129 bytes
385 files changed, 8966 insertions, 0 deletions
diff --git a/plantlife_modpack/3dmushrooms/depends.txt b/plantlife_modpack/3dmushrooms/depends.txt
new file mode 100644
index 0000000..abb01ae
--- /dev/null
+++ b/plantlife_modpack/3dmushrooms/depends.txt
@@ -0,0 +1,2 @@
+default
+flowers
diff --git a/plantlife_modpack/3dmushrooms/init.lua b/plantlife_modpack/3dmushrooms/init.lua
new file mode 100644
index 0000000..369da9c
--- /dev/null
+++ b/plantlife_modpack/3dmushrooms/init.lua
@@ -0,0 +1,68 @@
+
+-- 3D Mushroom mod by VanessaE
+--
+-- License: WTFPL for everything.
+
+mushroom = {}
+
+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"
+})
+
+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"
+})
+
+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"
+})
+
+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"
+})
+
+-- 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")
+
+print("[3D Mushrooms] loaded.")
diff --git a/plantlife_modpack/3dmushrooms/models/3dmushrooms.obj b/plantlife_modpack/3dmushrooms/models/3dmushrooms.obj
new file mode 100644
index 0000000..bce1ed6
--- /dev/null
+++ b/plantlife_modpack/3dmushrooms/models/3dmushrooms.obj
@@ -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
diff --git a/plantlife_modpack/3dmushrooms/textures/3dmushrooms_brown.png b/plantlife_modpack/3dmushrooms/textures/3dmushrooms_brown.png
new file mode 100644
index 0000000..c36f524
--- /dev/null
+++ b/plantlife_modpack/3dmushrooms/textures/3dmushrooms_brown.png
Binary files differ
diff --git a/plantlife_modpack/3dmushrooms/textures/3dmushrooms_brown_inv.png b/plantlife_modpack/3dmushrooms/textures/3dmushrooms_brown_inv.png
new file mode 100644
index 0000000..c9a7b3c
--- /dev/null
+++ b/plantlife_modpack/3dmushrooms/textures/3dmushrooms_brown_inv.png
Binary files differ
diff --git a/plantlife_modpack/3dmushrooms/textures/3dmushrooms_red.png b/plantlife_modpack/3dmushrooms/textures/3dmushrooms_red.png
new file mode 100644
index 0000000..dc80e32
--- /dev/null
+++ b/plantlife_modpack/3dmushrooms/textures/3dmushrooms_red.png
Binary files differ
diff --git a/plantlife_modpack/3dmushrooms/textures/3dmushrooms_red_inv.png b/plantlife_modpack/3dmushrooms/textures/3dmushrooms_red_inv.png
new file mode 100644
index 0000000..796f867
--- /dev/null
+++ b/plantlife_modpack/3dmushrooms/textures/3dmushrooms_red_inv.png
Binary files differ
diff --git a/plantlife_modpack/LICENSE b/plantlife_modpack/LICENSE
new file mode 100644
index 0000000..594ea2a
--- /dev/null
+++ b/plantlife_modpack/LICENSE
@@ -0,0 +1,336 @@
+Sunflower model and textures by kaeza (CC-BY-SA 3.0).
+
+For the code, Ironzorg's textures, and everything else: WTFPL
+
+For Mossmanikin's mods (Ferns, Dryplans, and the components
+from the Undergrowth modpack), and all of my own textures:
+CC-By-SA 3.0
+
+----------
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
+
+ This license is also known as "WTFPL"
+
+-----------
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
+CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
+PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
+WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW
+IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
+AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS
+LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS
+YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE
+OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+ "Collective Work" means a work, such as a periodical issue,
+anthology or encyclopedia, in which the Work in its entirety in
+unmodified form, along with one or more other contributions,
+constituting separate and independent works in themselves, are
+assembled into a collective whole. A work that constitutes a
+Collective Work will not be considered a Derivative Work (as
+defined below) for the purposes of this License.
+ "Creative Commons Compatible License" means a license that is
+listed at http://creativecommons.org/compatiblelicenses that has
+been approved by Creative Commons as being essentially equivalent
+to this License, including, at a minimum, because that license:
+(i) contains terms that have the same purpose, meaning and effect
+as the License Elements of this License; and, (ii) explicitly
+permits the relicensing of derivatives of works made available
+under that license under this License or either a Creative Commons
+unported license or a Creative Commons jurisdiction license with
+the same License Elements as this License.
+ "Derivative Work" means a work based upon the Work or upon the
+Work and other pre-existing works, such as a translation, musical
+arrangement, dramatization, fictionalization, motion picture
+version, sound recording, art reproduction, abridgment,
+condensation, or any other form in which the Work may be recast,
+transformed, or adapted, except that a work that constitutes a
+Collective Work will not be considered a Derivative Work for the
+purpose of this License. For the avoidance of doubt, where the
+Work is a musical composition or sound recording, the
+synchronization of the Work in timed-relation with a moving image
+("synching") will be considered a Derivative Work for the purpose
+of this License.
+ "License Elements" means the following high-level license
+attributes as selected by Licensor and indicated in the title of
+this License: Attribution, ShareAlike.
+ "Licensor" means the individual, individuals, entity or
+entities that offers the Work under the terms of this License.
+ "Original Author" means the individual, individuals, entity or
+entities who created the Work.
+ "Work" means the copyrightable work of authorship offered
+under the terms of this License.
+ "You" means an individual or entity exercising rights under
+this License who has not previously violated the terms of this
+License with respect to the Work, or who has received express
+permission from the Licensor to exercise rights under this License
+despite a previous violation.
+
+2. Fair Use Rights. Nothing in this license is intended to reduce,
+limit, or restrict any rights arising from fair use, first sale or
+other limitations on the exclusive rights of the copyright owner
+under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this
+License, Licensor hereby grants You a worldwide, royalty-free,
+non-exclusive, perpetual (for the duration of the applicable
+copyright) license to exercise the rights in the Work as stated
+below:
+
+ to reproduce the Work, to incorporate the Work into one or
+more Collective Works, and to reproduce the Work as incorporated
+in the Collective Works;
+ to create and reproduce Derivative Works provided that any
+such Derivative Work, including any translation in any medium,
+takes reasonable steps to clearly label, demarcate or otherwise
+identify that changes were made to the original Work. For example,
+a translation could be marked "The original work was translated
+from English to Spanish," or a modification could indicate "The
+original work has been modified.";
+ to distribute copies or phonorecords of, display publicly,
+perform publicly, and perform publicly by means of a digital audio
+transmission the Work including as incorporated in Collective
+Works;
+ to distribute copies or phonorecords of, display publicly,
+perform publicly, and perform publicly by means of a digital audio
+transmission Derivative Works.
+
+ For the avoidance of doubt, where the Work is a musical
+composition:
+ Performance Royalties Under Blanket Licenses. Licensor
+waives the exclusive right to collect, whether individually or, in
+the event that Licensor is a member of a performance rights
+society (e.g. ASCAP, BMI, SESAC), via that society, royalties for
+the public performance or public digital performance (e.g.
+webcast) of the Work.
+ Mechanical Rights and Statutory Royalties. Licensor waives
+the exclusive right to collect, whether individually or via a
+music rights agency or designated agent (e.g. Harry Fox Agency),
+royalties for any phonorecord You create from the Work ("cover
+version") and distribute, subject to the compulsory license
+created by 17 USC Section 115 of the US Copyright Act (or the
+equivalent in other jurisdictions).
+ Webcasting Rights and Statutory Royalties. For the avoidance
+of doubt, where the Work is a sound recording, Licensor waives the
+exclusive right to collect, whether individually or via a
+performance-rights society (e.g. SoundExchange), royalties for the
+public digital performance (e.g. webcast) of the Work, subject to
+the compulsory license created by 17 USC Section 114 of the US
+Copyright Act (or the equivalent in other jurisdictions).
+
+The above rights may be exercised in all media and formats whether
+now known or hereafter devised. The above rights include the right
+to make such modifications as are technically necessary to
+exercise the rights in other media and formats. All rights not
+expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is
+expressly made subject to and limited by the following
+restrictions:
+
+ You may distribute, publicly display, publicly perform, or
+publicly digitally perform the Work only under the terms of this
+License, and You must include a copy of, or the Uniform Resource
+Identifier for, this License with every copy or phonorecord of the
+Work You distribute, publicly display, publicly perform, or
+publicly digitally perform. You may not offer or impose any terms
+on the Work that restrict the terms of this License or the ability
+of a recipient of the Work to exercise of the rights granted to
+that recipient under the terms of the License. You may not
+sublicense the Work. You must keep intact all notices that refer
+to this License and to the disclaimer of warranties. When You
+distribute, publicly display, publicly perform, or publicly
+digitally perform the Work, You may not impose any technological
+measures on the Work that restrict the ability of a recipient of
+the Work from You to exercise of the rights granted to that
+recipient under the terms of the License. This Section 4(a)
+applies to the Work as incorporated in a Collective Work, but this
+does not require the Collective Work apart from the Work itself to
+be made subject to the terms of this License. If You create a
+Collective Work, upon notice from any Licensor You must, to the
+extent practicable, remove from the Collective Work any credit as
+required by Section 4(c), as requested. If You create a Derivative
+Work, upon notice from any Licensor You must, to the extent
+practicable, remove from the Derivative Work any credit as
+required by Section 4(c), as requested.
+ You may distribute, publicly display, publicly perform, or
+publicly digitally perform a Derivative Work only under: (i) the
+terms of this License; (ii) a later version of this License with
+the same License Elements as this License; (iii) either the
+Creative Commons (Unported) license or a Creative Commons
+jurisdiction license (either this or a later license version) that
+contains the same License Elements as this License (e.g.
+Attribution-ShareAlike 3.0 (Unported)); (iv) a Creative Commons
+Compatible License. If you license the Derivative Work under one
+of the licenses mentioned in (iv), you must comply with the terms
+of that license. If you license the Derivative Work under the
+terms of any of the licenses mentioned in (i), (ii) or (iii) (the
+"Applicable License"), you must comply with the terms of the
+Applicable License generally and with the following provisions:
+(I) You must include a copy of, or the Uniform Resource Identifier
+for, the Applicable License with every copy or phonorecord of each
+Derivative Work You distribute, publicly display, publicly
+perform, or publicly digitally perform; (II) You may not offer or
+impose any terms on the Derivative Works that restrict the terms
+of the Applicable License or the ability of a recipient of the
+Work to exercise the rights granted to that recipient under the
+terms of the Applicable License; (III) You must keep intact all
+notices that refer to the Applicable License and to the disclaimer
+of warranties; and, (IV) when You distribute, publicly display,
+publicly perform, or publicly digitally perform the Work, You may
+not impose any technological measures on the Derivative Work that
+restrict the ability of a recipient of the Derivative Work from
+You to exercise the rights granted to that recipient under the
+terms of the Applicable License. This Section 4(b) applies to the
+Derivative Work as incorporated in a Collective Work, but this
+does not require the Collective Work apart from the Derivative
+Work itself to be made subject to the terms of the Applicable
+License.
+ If You distribute, publicly display, publicly perform, or
+publicly digitally perform the Work (as defined in Section 1
+above) or any Derivative Works (as defined in Section 1 above) or
+Collective Works (as defined in Section 1 above), You must, unless
+a request has been made pursuant to Section 4(a), keep intact all
+copyright notices for the Work and provide, reasonable to the
+medium or means You are utilizing: (i) the name of the Original
+Author (or pseudonym, if applicable) if supplied, and/or (ii) if
+the Original Author and/or Licensor designate another party or
+parties (e.g. a sponsor institute, publishing entity, journal) for
+attribution ("Attribution Parties") in Licensor's copyright
+notice, terms of service or by other reasonable means, the name of
+such party or parties; the title of the Work if supplied; to the
+extent reasonably practicable, the Uniform Resource Identifier, if
+any, that Licensor specifies to be associated with the Work,
+unless such URI does not refer to the copyright notice or
+licensing information for the Work; and, consistent with Section
+3(b) in the case of a Derivative Work, a credit identifying the
+use of the Work in the Derivative Work (e.g., "French translation
+of the Work by Original Author," or "Screenplay based on original
+Work by Original Author"). The credit required by this Section
+4(c) may be implemented in any reasonable manner; provided,
+however, that in the case of a Derivative Work or Collective Work,
+at a minimum such credit will appear, if a credit for all
+contributing authors of the Derivative Work or Collective Work
+appears, then as part of these credits and in a manner at least as
+prominent as the credits for the other contributing authors. For
+the avoidance of doubt, You may only use the credit required by
+this Section for the purpose of attribution in the manner set out
+above and, by exercising Your rights under this License, You may
+not implicitly or explicitly assert or imply any connection with,
+sponsorship or endorsement by the Original Author, Licensor and/or
+Attribution Parties, as appropriate, of You or Your use of the
+Work, without the separate, express prior written permission of
+the Original Author, Licensor and/or Attribution Parties.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
+LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY
+RIGHTS HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR
+MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE
+WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT
+LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY,
+FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE
+OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE
+OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT
+ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY
+NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY
+APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY
+LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE
+OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE
+WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+7. Termination
+
+ This License and the rights granted hereunder will terminate
+automatically upon any breach by You of the terms of this License.
+Individuals or entities who have received Derivative Works or
+Collective Works from You under this License, however, will not
+have their licenses terminated provided such individuals or
+entities remain in full compliance with those licenses. Sections
+1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+ Subject to the above terms and conditions, the license granted
+here is perpetual (for the duration of the applicable copyright in
+the Work). Notwithstanding the above, Licensor reserves the right
+to release the Work under different license terms or to stop
+distributing the Work at any time; provided, however that any such
+election will not serve to withdraw this License (or any other
+license that has been, or is required to be, granted under the
+terms of this License), and this License will continue in full
+force and effect unless terminated as stated above.
+
+8. Miscellaneous
+
+ Each time You distribute or publicly digitally perform the
+Work (as defined in Section 1 above) or a Collective Work (as
+defined in Section 1 above), the Licensor offers to the recipient
+a license to the Work on the same terms and conditions as the
+license granted to You under this License.
+ Each time You distribute or publicly digitally perform a
+Derivative Work, Licensor offers to the recipient a license to the
+original Work on the same terms and conditions as the license
+granted to You under this License.
+ If any provision of this License is invalid or unenforceable
+under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this License, and
+without further action by the parties to this agreement, such
+provision shall be reformed to the minimum extent necessary to
+make such provision valid and enforceable.
+ No term or provision of this License shall be deemed waived
+and no breach consented to unless such waiver or consent shall be
+in writing and signed by the party to be charged with such waiver
+or consent.
+ This License constitutes the entire agreement between the
+parties with respect to the Work licensed here. There are no
+understandings, agreements or representations with respect to the
+Work not specified here. Licensor shall not be bound by any
+additional provisions that may appear in any communication from
+You. This License may not be modified without the mutual written
+agreement of the Licensor and You.
+
+ Creative Commons Notice
+
+ Creative Commons is not a party to this License, and makes no
+warranty whatsoever in connection with the Work. Creative Commons
+will not be liable to You or any party on any legal theory for any
+damages whatsoever, including without limitation any general,
+special, incidental or consequential damages arising in connection
+to this license. Notwithstanding the foregoing two (2) sentences,
+if Creative Commons has expressly identified itself as the
+Licensor hereunder, it shall have all rights and obligations of
+Licensor.
+
+ Except for the limited purpose of indicating to the public
+that the Work is licensed under the CCPL, Creative Commons does
+not authorize the use by either party of the trademark "Creative
+Commons" or any related trademark or logo of Creative Commons
+without the prior written consent of Creative Commons. Any
+permitted use will be in compliance with Creative Commons'
+then-current trademark usage guidelines, as may be published on
+its website or otherwise made available upon request from time to
+time. For the avoidance of doubt, this trademark restriction does
+not form part of this License.
+
+ Creative Commons may be contacted at
+http://creativecommons.org/.
+
diff --git a/plantlife_modpack/README b/plantlife_modpack/README
new file mode 100644
index 0000000..8c62e49
--- /dev/null
+++ b/plantlife_modpack/README
@@ -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. ;-)
diff --git a/plantlife_modpack/along_shore/depends.txt b/plantlife_modpack/along_shore/depends.txt
new file mode 100644
index 0000000..a63765a
--- /dev/null
+++ b/plantlife_modpack/along_shore/depends.txt
@@ -0,0 +1,3 @@
+default
+biome_lib
+flowers_plus? \ No newline at end of file
diff --git a/plantlife_modpack/along_shore/init.lua b/plantlife_modpack/along_shore/init.lua
new file mode 100644
index 0000000..719d324
--- /dev/null
+++ b/plantlife_modpack/along_shore/init.lua
@@ -0,0 +1,9 @@
+-----------------------------------------------------------------------------------------------
+local title = "Along the Shore"
+local version = "0.0.4"
+local mname = "along_shore"
+-----------------------------------------------------------------------------------------------
+
+-----------------------------------------------------------------------------------------------
+print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
+----------------------------------------------------------------------------------------------- \ No newline at end of file
diff --git a/plantlife_modpack/along_shore/textures/along_shore_seaweed_1Darker.png b/plantlife_modpack/along_shore/textures/along_shore_seaweed_1Darker.png
new file mode 100644
index 0000000..b5bd99c
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/along_shore_seaweed_1Darker.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/credit_textures.txt b/plantlife_modpack/along_shore/textures/credit_textures.txt
new file mode 100644
index 0000000..89b4ce7
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/credit_textures.txt
@@ -0,0 +1,30 @@
+-------------------------------------------------------------
+Credit for textures of "along_shore"
+-------------------------------------------------------------
+(If more than one author is listed the names are in alphabetical order)
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+FOLDER TEXTURE AUTHORS
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+../along_shore/textures along_shore_seaweed_1Darker.png Neuromancer, VanessaE
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+../along_shore/textures/old (along_shore_empty.png) (Mossmanikin)
+ along_shore_lilypads_1.png Mossmanikin, Neuromancer
+ along_shore_lilypads_2.png Mossmanikin, Neuromancer
+ along_shore_lilypads_3.png Mossmanikin, Neuromancer
+ along_shore_lilypads_4.png Mossmanikin, Neuromancer
+ along_shore_pondscum_1.png Neuromancer
+ along_shore_seaweed_1.png Neuromancer, VanessaE
+ along_shore_seaweed_2.png Mossmanikin, Neuromancer, VanessaE
+ along_shore_seaweed_3.png Mossmanikin, Neuromancer, VanessaE
+ along_shore_seaweed_4.png Mossmanikin, Neuromancer, VanessaE
+ flowers_seaweed.png Neuromancer, VanessaE
+ flowers_waterlily.png Mossmanikin, VanessaE
+ flowers_waterlily_22.5.png Mossmanikin, VanessaE
+ flowers_waterlily_45.png Mossmanikin, VanessaE
+ flowers_waterlily_67.5.png Mossmanikin, VanessaE
+ lillypad3Flower16x.png Neuromancer
+ LillyPad3x16.png Neuromancer
+ lillyPad5x16.png Neuromancer
+ MultiLilly16x.png Neuromancer
+ pondscum16xc.png Neuromancer
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/plantlife_modpack/along_shore/textures/old/LillyPad3x16.png b/plantlife_modpack/along_shore/textures/old/LillyPad3x16.png
new file mode 100644
index 0000000..7d840bd
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/LillyPad3x16.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/MultiLilly16x.png b/plantlife_modpack/along_shore/textures/old/MultiLilly16x.png
new file mode 100644
index 0000000..474ad05
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/MultiLilly16x.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_empty.png b/plantlife_modpack/along_shore/textures/old/along_shore_empty.png
new file mode 100644
index 0000000..2f6464b
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_empty.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_1.png b/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_1.png
new file mode 100644
index 0000000..a075ba9
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_1.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_2.png b/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_2.png
new file mode 100644
index 0000000..90f5364
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_2.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_3.png b/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_3.png
new file mode 100644
index 0000000..94d00d2
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_3.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_4.png b/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_4.png
new file mode 100644
index 0000000..9b6387f
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_lilypads_4.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_pondscum_1.png b/plantlife_modpack/along_shore/textures/old/along_shore_pondscum_1.png
new file mode 100644
index 0000000..3502354
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_pondscum_1.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_1.png b/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_1.png
new file mode 100644
index 0000000..7595ebc
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_1.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_2.png b/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_2.png
new file mode 100644
index 0000000..0b24730
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_2.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_3.png b/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_3.png
new file mode 100644
index 0000000..d9b7f43
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_3.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_4.png b/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_4.png
new file mode 100644
index 0000000..887c183
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/along_shore_seaweed_4.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/flowers_seaweed.png b/plantlife_modpack/along_shore/textures/old/flowers_seaweed.png
new file mode 100644
index 0000000..7595ebc
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/flowers_seaweed.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/flowers_waterlily.png b/plantlife_modpack/along_shore/textures/old/flowers_waterlily.png
new file mode 100644
index 0000000..040a397
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/flowers_waterlily.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/flowers_waterlily_22.5.png b/plantlife_modpack/along_shore/textures/old/flowers_waterlily_22.5.png
new file mode 100644
index 0000000..c409bcb
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/flowers_waterlily_22.5.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/flowers_waterlily_45.png b/plantlife_modpack/along_shore/textures/old/flowers_waterlily_45.png
new file mode 100644
index 0000000..c870df4
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/flowers_waterlily_45.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/flowers_waterlily_67.5.png b/plantlife_modpack/along_shore/textures/old/flowers_waterlily_67.5.png
new file mode 100644
index 0000000..5b9291b
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/flowers_waterlily_67.5.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/lillyPad5x16.png b/plantlife_modpack/along_shore/textures/old/lillyPad5x16.png
new file mode 100644
index 0000000..761beb9
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/lillyPad5x16.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/lillypad3Flower16x.png b/plantlife_modpack/along_shore/textures/old/lillypad3Flower16x.png
new file mode 100644
index 0000000..541200f
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/lillypad3Flower16x.png
Binary files differ
diff --git a/plantlife_modpack/along_shore/textures/old/pondscum16xc.png b/plantlife_modpack/along_shore/textures/old/pondscum16xc.png
new file mode 100644
index 0000000..3502354
--- /dev/null
+++ b/plantlife_modpack/along_shore/textures/old/pondscum16xc.png
Binary files differ
diff --git a/plantlife_modpack/bushes/depends.txt b/plantlife_modpack/bushes/depends.txt
new file mode 100644
index 0000000..f82a423
--- /dev/null
+++ b/plantlife_modpack/bushes/depends.txt
@@ -0,0 +1,4 @@
+default
+biome_lib
+stonage?
+sumpf?
diff --git a/plantlife_modpack/bushes/init.lua b/plantlife_modpack/bushes/init.lua
new file mode 100644
index 0000000..3dc9801
--- /dev/null
+++ b/plantlife_modpack/bushes/init.lua
@@ -0,0 +1,257 @@
+-- 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 cc-by-sa 3.0. from VannessaE's moretrees mod. (Leaf texture created by RealBadAngel or VanessaE)
+-- Branch textures created by Neuromancer.
+-- Licence for Code and Non-Bush leaf code is WTFPL.
+
+ abstract_bushes = {}
+
+ minetest.register_node("bushes:youngtree2_bottom", {
+ description = "Young Tree 2 (bottom)",
+ drawtype="nodebox",
+ tiles = {"bushes_youngtree2trunk.png"},
+ inventory_image = "bushes_youngtree2trunk_inv.png",
+ wield_image = "bushes_youngtree2trunk_inv.png",
+paramtype = "light",
+ walkable = false,
+ is_ground_content = true,
+node_box = {
+ type = "fixed",
+ fixed = {
+ --{0.375000,-0.500000,-0.500000,0.500000,0.500000,-0.375000}, --NodeBox 1
+ {-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1
+ }
+},
+ groups = {snappy=3,flammable=2},
+ 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 = "Bush Branches "..Num,
+ drawtype = "nodebox",
+ tiles = {
+ "bushes_leaves_"..TexNum..".png",
+ "bushes_branches_center_"..TexNum..".png"
+ },
+ 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
+ },
+ 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 = "Bush Branches "..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"
+ },
+ 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
+ },
+ 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 = "Bush Leaves "..Num,
+ drawtype = "allfaces_optional",
+ tiles = {"bushes_leaves_"..Num..".png"},
+ paramtype = "light",
+ groups = { -- MM: Should we add leafdecay?
+ snappy=3,
+ flammable=2,
+ attached_node=1
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ })
+end
+
+abstract_bushes.grow_bush = function(pos)
+ local leaf_type = math.random(1,2)
+ local bush_side_height = math.random(0,1)
+ local chance_of_bush_node_right = math.random(1,10)
+ if chance_of_bush_node_right> 5 then
+ local right_pos = {x=pos.x+1, y=pos.y+bush_side_height, z=pos.z}
+ abstract_bushes.grow_bush_node(right_pos,3,leaf_type)
+ end
+ local chance_of_bush_node_left = math.random(1,10)
+ if chance_of_bush_node_left> 5 then
+ bush_side_height = math.random(0,1)
+ local left_pos = {x=pos.x-1, y=pos.y+bush_side_height, z=pos.z}
+ abstract_bushes.grow_bush_node(left_pos,1,leaf_type)
+ end
+ local chance_of_bush_node_front = math.random(1,10)
+ if chance_of_bush_node_front> 5 then
+ bush_side_height = math.random(0,1)
+ local front_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z+1}
+ abstract_bushes.grow_bush_node(front_pos,2,leaf_type)
+ end
+ local chance_of_bush_node_back = math.random(1,10)
+ if chance_of_bush_node_back> 5 then
+ bush_side_height = math.random(0,1)
+ local back_pos = {x=pos.x, y=pos.y+bush_side_height, z=pos.z-1}
+ abstract_bushes.grow_bush_node(back_pos,0,leaf_type)
+ end
+
+abstract_bushes.grow_bush_node(pos,5,leaf_type)
+end
+
+abstract_bushes.grow_bush_node = function(pos,dir, leaf_type)
+
+
+ local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
+ local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z}
+
+ local bush_branch_type = 2
+
+ -- MM: I'm not sure if it's slower now than before...
+ if dir ~= 5 and leaf_type == 1 then
+ bush_branch_type = 2
+ end
+ 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
+
+ if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
+ or minetest.get_node(right_here).name == "default:junglegrass" then
+ minetest.set_node(right_here, {name="bushes:bushbranches"..bush_branch_type , param2=dir})
+ --minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")")
+ minetest.set_node(above_right_here, {name="bushes:BushLeaves"..leaf_type})
+ local chance_of_high_leaves = math.random(1,10)
+ if chance_of_high_leaves> 5 then
+ local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
+ --minetest.chat_send_all("leaf_type: (" .. leaf_type .. ")")
+ minetest.set_node(two_above_right_here, {name="bushes:BushLeaves"..leaf_type})
+ end
+ end
+end
+
+
+biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "stoneage:grass_with_silex",
+ "sumpf:peat",
+ "sumpf:sumpf"
+ },
+ max_count = 15, --10,15
+ rarity = 101 - 4, --3,4
+ min_elevation = 1, -- above sea level
+ plantlife_limit = -0.9,
+ },
+ abstract_bushes.grow_bush
+)
+
+ abstract_bushes.grow_youngtree2 = function(pos)
+ local height = math.random(4,5)
+ abstract_bushes.grow_youngtree_node2(pos,height)
+end
+
+abstract_bushes.grow_youngtree_node2 = function(pos, height)
+
+
+ local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
+ local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z}
+ local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
+ local three_above_right_here = {x=pos.x, y=pos.y+4, z=pos.z}
+
+ if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
+ or minetest.get_node(right_here).name == "default:junglegrass" then
+ if height == 4 then
+ local two_above_right_here_south = {x=pos.x, y=pos.y+3, z=pos.z-1}
+ local three_above_right_here_south = {x=pos.x, y=pos.y+4, z=pos.z-1}
+ minetest.set_node(right_here, {name="bushes:youngtree2_bottom"})
+ minetest.set_node(above_right_here, {name="bushes:youngtree2_bottom"})
+ minetest.set_node(two_above_right_here, {name="bushes:bushbranches2" , param2=2})
+ minetest.set_node(two_above_right_here_south, {name="bushes:bushbranches2" , param2=0})
+ minetest.set_node(three_above_right_here, {name="bushes:BushLeaves1" })
+ minetest.set_node(three_above_right_here_south, {name="bushes:BushLeaves1" })
+ end
+
+ end
+end
+
+
+biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "stoneage:grass_with_silex",
+ "sumpf:peat",
+ "sumpf:sumpf"
+ },
+ max_count = 55, --10,15
+ rarity = 101 - 4, --3,4
+ min_elevation = 1, -- above sea level
+ plantlife_limit = -0.9,
+ },
+ abstract_bushes.grow_youngtree2
+)
+
+ --http://dev.minetest.net/Node_Drawtypes
diff --git a/plantlife_modpack/bushes/textures/bushes_branches_center_1.png b/plantlife_modpack/bushes/textures/bushes_branches_center_1.png
new file mode 100644
index 0000000..bac3ee4
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_branches_center_1.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_branches_center_2.png b/plantlife_modpack/bushes/textures/bushes_branches_center_2.png
new file mode 100644
index 0000000..c21edf6
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_branches_center_2.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_branches_left_1.png b/plantlife_modpack/bushes/textures/bushes_branches_left_1.png
new file mode 100644
index 0000000..120f100
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_branches_left_1.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_branches_left_2.png b/plantlife_modpack/bushes/textures/bushes_branches_left_2.png
new file mode 100644
index 0000000..1c17bac
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_branches_left_2.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_branches_right_1.png b/plantlife_modpack/bushes/textures/bushes_branches_right_1.png
new file mode 100644
index 0000000..af5de67
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_branches_right_1.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_branches_right_2.png b/plantlife_modpack/bushes/textures/bushes_branches_right_2.png
new file mode 100644
index 0000000..8fb8332
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_branches_right_2.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_leaves_1.png b/plantlife_modpack/bushes/textures/bushes_leaves_1.png
new file mode 100644
index 0000000..594c958
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_leaves_1.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_leaves_2.png b/plantlife_modpack/bushes/textures/bushes_leaves_2.png
new file mode 100644
index 0000000..e6de482
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_leaves_2.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_youngtree2trunk.png b/plantlife_modpack/bushes/textures/bushes_youngtree2trunk.png
new file mode 100644
index 0000000..ea685e3
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_youngtree2trunk.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/bushes_youngtree2trunk_inv.png b/plantlife_modpack/bushes/textures/bushes_youngtree2trunk_inv.png
new file mode 100644
index 0000000..7d6728f
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/bushes_youngtree2trunk_inv.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BlockBranch1.png b/plantlife_modpack/bushes/textures/old & unused/BlockBranch1.png
new file mode 100644
index 0000000..28fe91f
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BlockBranch1.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BlockBranch1L.png b/plantlife_modpack/bushes/textures/old & unused/BlockBranch1L.png
new file mode 100644
index 0000000..1d8a8e2
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BlockBranch1L.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BlockBranch1R.png b/plantlife_modpack/bushes/textures/old & unused/BlockBranch1R.png
new file mode 100644
index 0000000..514b888
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BlockBranch1R.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BushBranches1.png b/plantlife_modpack/bushes/textures/old & unused/BushBranches1.png
new file mode 100644
index 0000000..5bb2b46
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BushBranches1.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm.png b/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm.png
new file mode 100644
index 0000000..5574f38
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm2.png b/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm2.png
new file mode 100644
index 0000000..6ffd2f3
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm2.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm3.png b/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm3.png
new file mode 100644
index 0000000..5bb9bf5
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm3.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm4.png b/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm4.png
new file mode 100644
index 0000000..b204fef
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BushBranches1sm4.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BushBranchesCenter.png b/plantlife_modpack/bushes/textures/old & unused/BushBranchesCenter.png
new file mode 100644
index 0000000..0c9b5af
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BushBranchesCenter.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BushBranchesSide1.png b/plantlife_modpack/bushes/textures/old & unused/BushBranchesSide1.png
new file mode 100644
index 0000000..ca95dd3
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BushBranchesSide1.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/BushBranchesSide2.png b/plantlife_modpack/bushes/textures/old & unused/BushBranchesSide2.png
new file mode 100644
index 0000000..d62499e
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/BushBranchesSide2.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/blank.png b/plantlife_modpack/bushes/textures/old & unused/blank.png
new file mode 100644
index 0000000..ed495a8
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/blank.png
Binary files differ
diff --git a/plantlife_modpack/bushes/textures/old & unused/moretrees_pine_leaves3.png b/plantlife_modpack/bushes/textures/old & unused/moretrees_pine_leaves3.png
new file mode 100644
index 0000000..57d077d
--- /dev/null
+++ b/plantlife_modpack/bushes/textures/old & unused/moretrees_pine_leaves3.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/cooking.lua b/plantlife_modpack/bushes_classic/cooking.lua
new file mode 100644
index 0000000..c672975
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/cooking.lua
@@ -0,0 +1,118 @@
+local S = biome_lib.intllib
+
+-- Basket
+
+minetest.register_craft({
+ output = "bushes:basket_empty",
+ recipe = {
+ { "default:stick", "default:stick", "default:stick" },
+ { "", "default:stick", "" },
+ },
+})
+
+-- Sugar
+
+minetest.register_craftitem(":bushes:sugar", {
+ description = S("Sugar"),
+ inventory_image = "bushes_sugar.png",
+ on_use = minetest.item_eat(1),
+ groups = {food_sugar=1}
+})
+
+minetest.register_craft({
+ output = "bushes:sugar 1",
+ recipe = {
+ { "default:papyrus", "default:papyrus" },
+ },
+})
+
+for i, berry in ipairs(bushes_classic.bushes) do
+ local desc = bushes_classic.bushes_descriptions[i]
+
+ minetest.register_craftitem(":bushes:"..berry.."_pie_raw", {
+ description = S("Raw "..desc.." pie"),
+ inventory_image = "bushes_"..berry.."_pie_raw.png",
+ on_use = minetest.item_eat(4),
+ })
+
+ if berry ~= "mixed_berry" then
+
+ if berry == "strawberry" and minetest.registered_nodes["farming_plus:strawberry"] then
+ -- Special case for strawberries, when farming_plus is in use. Use
+ -- the item from that mod, but redefine it so it has the right
+ -- groups and does't look so ugly!
+ minetest.register_craftitem(":farming_plus:strawberry_item", {
+ description = S("Strawberry"),
+ inventory_image = "bushes_"..berry..".png",
+ on_use = minetest.item_eat(2),
+ groups = {berry=1, strawberry=1}
+ })
+ minetest.register_alias("bushes:strawberry", "farming_plus:strawberry_item")
+ else
+ minetest.register_craftitem(":bushes:"..berry, {
+ description = desc,
+ inventory_image = "bushes_"..berry..".png",
+ groups = {berry = 1, [berry] = 1},
+ on_use = minetest.item_eat(1),
+ })
+ end
+ minetest.register_craft({
+ output = "bushes:"..berry.."_pie_raw 1",
+ recipe = {
+ { "group:food_sugar", "farming:flour", "group:food_sugar" },
+ { "group:"..berry, "group:"..berry, "group:"..berry },
+ },
+ })
+ end
+
+ -- Cooked pie
+
+ minetest.register_craftitem(":bushes:"..berry.."_pie_cooked", {
+ description = S("Cooked "..desc.." pie"),
+ 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 = S("Slice of "..desc.." pie"),
+ 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
+
+minetest.register_craft({
+ output = "bushes:mixed_berry_pie_raw 2",
+ recipe = {
+ { "group:food_sugar", "farming:flour", "group:food_sugar" },
+ { "group:berry", "group:berry", "group:berry" },
+ { "group:berry", "group:berry", "group:berry" },
+ },
+})
+
+
diff --git a/plantlife_modpack/bushes_classic/depends.txt b/plantlife_modpack/bushes_classic/depends.txt
new file mode 100644
index 0000000..16347c6
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/depends.txt
@@ -0,0 +1,3 @@
+biome_lib
+farming?
+farming_plus?
diff --git a/plantlife_modpack/bushes_classic/image_credits.txt b/plantlife_modpack/bushes_classic/image_credits.txt
new file mode 100644
index 0000000..a4ddc51
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/image_credits.txt
@@ -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
diff --git a/plantlife_modpack/bushes_classic/init.lua b/plantlife_modpack/bushes_classic/init.lua
new file mode 100644
index 0000000..021f569
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/init.lua
@@ -0,0 +1,59 @@
+-- Bushes classic mod originally by unknown
+-- now maintained by VanessaE
+--
+-- License: WTFPL
+
+local S = biome_lib.intllib
+
+bushes_classic = {}
+
+bushes_classic.bushes = {
+ "strawberry",
+ "blackberry",
+ "blueberry",
+ "raspberry",
+ "gooseberry",
+ "mixed_berry"
+}
+
+bushes_classic.bushes_descriptions = {
+ "Strawberry",
+ "Blackberry",
+ "Blueberry",
+ "Raspberry",
+ "Gooseberry",
+ "Mixed Berry"
+}
+
+bushes_classic.spawn_list = {}
+
+local modpath = minetest.get_modpath('bushes_classic')
+dofile(modpath..'/cooking.lua')
+dofile(modpath..'/nodes.lua')
+
+biome_lib:spawn_on_surfaces({
+ spawn_delay = 3600,
+ spawn_plants = bushes_classic.spawn_list,
+ avoid_radius = 10,
+ spawn_chance = 100,
+ spawn_surfaces = {
+ "default:dirt_with_grass",
+ "woodsoils:dirt_with_leaves_1",
+ "woodsoils:grass_with_leaves_1",
+ "woodsoils:grass_with_leaves_2",
+ "farming:soil",
+ "farming:soil_wet"
+ },
+ avoid_nodes = {"group:bush"},
+ seed_diff = 545342534, -- chosen by a fair mashing of the keyboard - guaranteed to be random :P
+ plantlife_limit = -0.1,
+ light_min = 10,
+ temp_min = 0.15, -- approx 20C
+ temp_max = -0.15, -- approx 35C
+ humidity_min = 0, -- 50% RH
+ humidity_max = -1, -- 100% RH
+})
+
+minetest.register_alias("bushes:basket_pies", "bushes:basket_strawberry")
+
+print(S("[Bushes] Loaded."))
diff --git a/plantlife_modpack/bushes_classic/locale/de.txt b/plantlife_modpack/bushes_classic/locale/de.txt
new file mode 100644
index 0000000..3724274
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/locale/de.txt
@@ -0,0 +1,43 @@
+# Translation by Xanthin
+
+Strawberry = Erdbeere
+Blackberry = Brombeere
+Blueberry = Blaubeere
+Raspberry = Himbeere
+Gooseberry = Stachelbeere
+Mixed Berry = Beerenmix
+Basket with Strawberry Pies = Korb mit Erdbeertorten
+Basket with Blackberry Pies = Korb mit Brombeertorten
+Basket with Blueberry Pies = Korb mit Blaubeertorten
+Basket with Raspberry Pies = Korb mit Himbeertorten
+Basket with Gooseberry Pies = Korb mit Stachelbeertorten
+Basket with Mixed Berry Pies = Korb mit Beerenmixtorten
+currently fruitless = zur Zeit fruechteloser
+Strawberry Bush = Erdbeerbusch
+Blackberry Bush = Brombeerbusch
+Blueberry Bush = Blaubeerbusch
+Raspberry Bush = Himbeerbusch
+Gooseberry Bush = Stachelbeerbusch
+Mixed Berry Bush = Beerenmixbusch
+Basket = Korb
+Sugar = Zucker
+Raw Strawberry pie = Rohe Erdbeertorte
+Raw Blackberry pie = Rohe Brombeertorte
+Raw Blueberry pie = Rohe Blaubeertorte
+Raw Raspberry pie = Rohe Himbeertorte
+Raw Gooseberry pie = Rohe Stachelbeertorte
+Raw Mixed Berry pie = Rohe Beerenmixtorte
+Cooked Strawberry pie = Erdbeertorte
+Cooked Blackberry pie = Brombeertorte
+Cooked Blueberry pie = Blaubeertorte
+Cooked Raspberry pie = Himbeertorte
+Cooked Gooseberry pie = Stachelbeertorte
+Cooked Mixed Berry pie = Beerenmixtorte
+Slice of Strawberry pie = Erdbeertortenstueck
+Slice of Blackberry pie = Brombeertortenstueck
+Slice of Blueberry pie = Blaubeertortenstueck
+Slice of Raspberry pie = Himbeertortenstueck
+Slice of Gooseberry pie = Stachelbeertortenstueck
+Slice of Mixed Berry pie = Beerenmixtortenstueck
+
+[Bushes] Loaded. = [Bushes] Geladen.
diff --git a/plantlife_modpack/bushes_classic/locale/fr.txt b/plantlife_modpack/bushes_classic/locale/fr.txt
new file mode 100644
index 0000000..ce80613
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/locale/fr.txt
@@ -0,0 +1,43 @@
+# Template
+
+Strawberry = Fraise
+Blackberry = Mûre
+Blueberry = Myrtille
+Raspberry = Framboise
+Gooseberry = Groseille
+Mixed Berry = Mélange de baies
+Basket with Strawberry Pies = Panier de tartes aux fraises
+Basket with Blackberry Pies = Panier de tartes aux mûres
+Basket with Blueberry Pies = Panier de tartes aux myrtilles
+Basket with Raspberry Pies = Panier de tartes aux framboises
+Basket with Gooseberry Pies = Panier de tartes aux groseilles
+Basket with Mixed Berry Pies = Panier de tartes au mélange de baies
+currently fruitless = actuellement sans fruit
+Strawberry Bush = Buisson à fraise
+Blackberry Bush = Buisson à mûre
+Blueberry Bush = Buisson à myrtille
+Raspberry Bush = Buisson à framboise
+Gooseberry Bush = Buisson à groseille
+Mixed Berry Bush = Buisson de baies mélangées
+Basket = Panier
+Sugar = Sucre
+Raw Strawberry pie = Tarte crue aux fraises
+Raw Blackberry pie = Tarte crue aux mûres
+Raw Blueberry pie = Tarte crue aux myrtilles
+Raw Raspberry pie = Tarte crue aux framboises
+Raw Gooseberry pie = Tarte crue aux groseilles
+Raw Mixed Berry pie = Tarte crue au mélange de baies
+Cooked Strawberry pie = Tarte cuite aux fraises
+Cooked Blackberry pie = Tarte cuite aux mûres
+Cooked Blueberry pie = Tarte cuite aux myrtilles
+Cooked Raspberry pie = Tarte cuite aux framboises
+Cooked Gooseberry pie = Tarte cuite aux groseilles
+Cooked Mixed Berry pie = Tarte cuite au mélange de baies
+Slice of Strawberry pie = Part de tarte aux fraises
+Slice of Blackberry pie = Part de tarte aux mûres
+Slice of Blueberry pie = Part de tarte aux myrtilles
+Slice of Raspberry pie = Part de tarts aux framboises
+Slice of Gooseberry pie = Part de tarte aux groseilles
+Slice of Mixed Berry pie = Part de tarte au mélange de baies
+
+[Bushes] Loaded. = [Buissons] Chargés.
diff --git a/plantlife_modpack/bushes_classic/locale/template.txt b/plantlife_modpack/bushes_classic/locale/template.txt
new file mode 100644
index 0000000..6c35312
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/locale/template.txt
@@ -0,0 +1,43 @@
+# Template
+
+Strawberry =
+Blackberry =
+Blueberry =
+Raspberry =
+Gooseberry =
+Mixed Berry =
+Basket with Strawberry Pies =
+Basket with Blackberry Pies =
+Basket with Blueberry Pies =
+Basket with Raspberry Pies =
+Basket with Gooseberry Pies =
+Basket with Mixed Berry Pies =
+currently fruitless =
+Strawberry Bush =
+Blackberry Bush =
+Blueberry Bush =
+Raspberry Bush =
+Gooseberry Bush =
+Mixed Berry Bush =
+Basket =
+Sugar =
+Raw Strawberry pie =
+Raw Blackberry pie =
+Raw Blueberry pie =
+Raw Raspberry pie =
+Raw Gooseberry pie =
+Raw Mixed Berry pie =
+Cooked Strawberry pie =
+Cooked Blackberry pie =
+Cooked Blueberry pie =
+Cooked Raspberry pie =
+Cooked Gooseberry pie =
+Cooked Mixed Berry pie =
+Slice of Strawberry pie =
+Slice of Blackberry pie =
+Slice of Blueberry pie =
+Slice of Raspberry pie =
+Slice of Gooseberry pie =
+Slice of Mixed Berry pie =
+
+[Bushes] Loaded. =
diff --git a/plantlife_modpack/bushes_classic/locale/tr.txt b/plantlife_modpack/bushes_classic/locale/tr.txt
new file mode 100644
index 0000000..0472921
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/locale/tr.txt
@@ -0,0 +1,44 @@
+# Turkish translation
+# mahmutelmas06@hotmail.com
+
+Strawberry = Çilek
+Blackberry = Böğürtlen
+Blueberry = Yaban mersini
+Raspberry = Ahududu
+Gooseberry = Bektaşi üzümü
+Mixed Berry = Dut
+Basket with Strawberry Pies = Çilekli pasta sepeti
+Basket with Blackberry Pies = Böğürtlenli pasta sepeti
+Basket with Blueberry Pies = Yaban mersini pastalı sepet
+Basket with Raspberry Pies = Ahududulu pasta sepeti
+Basket with Gooseberry Pies = Bektaşi üzümlü pasta sepeti
+Basket with Mixed Berry Pies = Dutlu pasta sepeti
+currently fruitless = ÅŸu anda meyvesiz
+Strawberry Bush = Çilek fidanı
+Blackberry Bush = Böğürtlen fidanı
+Blueberry Bush = Yaban mersini fidanı
+Raspberry Bush = Ahududu fidanı
+Gooseberry Bush = Bektaşi üzümü fidanı
+Mixed Berry Bush = Dut fidanı
+Basket = Sepet
+Sugar = Åžeker
+Raw Strawberry pie = Çilekli çiğ pasta
+Raw Blackberry pie = Böğürtlenli çiğ pasta
+Raw Blueberry pie = Yaban mersinli çiğ pasta
+Raw Raspberry pie = Ahududulu çiğ pasta
+Raw Gooseberry pie = Bektaşi üzümlü çiğ pasta
+Raw Mixed Berry pie = Dutlu çiğ pasta
+Cooked Strawberry pie = Pişmiş çilekli pasta
+Cooked Blackberry pie = Pişmiş böğürtlenli pasta
+Cooked Blueberry pie = PiÅŸmiÅŸ yaban mersinli pasta
+Cooked Raspberry pie = PiÅŸmiÅŸ ahududulu pasta
+Cooked Gooseberry pie = Pişmiş bektaşi üzümlü pasta
+Cooked Mixed Berry pie = PiÅŸmiÅŸ dutlu pasta
+Slice of Strawberry pie = Çilekli pasta dilimi
+Slice of Blackberry pie = Böğürtlenli pasta dilimi
+Slice of Blueberry pie = Yaban mersinli pasta dilimi
+Slice of Raspberry pie = Ahududulu pasta dilimi
+Slice of Gooseberry pie = Bektaşi üzümlü pasta dilimi
+Slice of Mixed Berry pie = Dutlu pasta dilimi
+
+[Bushes] Loaded. = [Bushes] yüklendi.
diff --git a/plantlife_modpack/bushes_classic/models/bushes_basket_empty.obj b/plantlife_modpack/bushes_classic/models/bushes_basket_empty.obj
new file mode 100644
index 0000000..0179c31
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/models/bushes_basket_empty.obj
@@ -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
diff --git a/plantlife_modpack/bushes_classic/models/bushes_basket_full.obj b/plantlife_modpack/bushes_classic/models/bushes_basket_full.obj
new file mode 100644
index 0000000..5a3e1a8
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/models/bushes_basket_full.obj
@@ -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
diff --git a/plantlife_modpack/bushes_classic/models/bushes_bush.obj b/plantlife_modpack/bushes_classic/models/bushes_bush.obj
new file mode 100644
index 0000000..a69bfce
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/models/bushes_bush.obj
@@ -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
diff --git a/plantlife_modpack/bushes_classic/nodes.lua b/plantlife_modpack/bushes_classic/nodes.lua
new file mode 100644
index 0000000..352e2a9
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/nodes.lua
@@ -0,0 +1,214 @@
+local S = biome_lib.intllib
+
+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.set_node(pos, {type = "node", name = "bushes:fruitless_bush"})
+ local meta = minetest.get_meta(pos)
+ meta:set_string('bush_type', bush_name)
+
+ -- construct the stack of fruits the player will get
+ -- only bushes that have grown fruits can actually give fruits
+ if can_harvest then
+ local amount = "4"
+ harvested = "bushes:" .. bush_name .. " " .. amount
+ end
+
+ -- something like a shovel
+ elseif groupcaps.crumbly then
+
+ -- with a chance of 1/3, return 2 bushes
+ local amount
+ if 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.set_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.set_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
+
+ local desc = bushes_classic.bushes_descriptions[i]
+
+ minetest.register_node(":bushes:basket_"..bush_name, {
+ description = S("Basket with "..desc.." Pies"),
+ 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 },
+ })
+
+ local texture_top, texture_bottom
+
+ local groups = {snappy = 3, bush = 1, flammable = 2, attached_node=1}
+ if bush_name == "mixed_berry" then
+ bush_name = "fruitless";
+ desc = S("currently fruitless");
+ texture_top = "bushes_fruitless_bush_top.png"
+ texture_bottom = "bushes_fruitless_bush_bottom.png"
+ groups.not_in_creative_inventory = 1
+ else
+ texture_top = "bushes_bush_top.png"
+ texture_bottom = "bushes_bush_bottom.png"
+ end
+
+ minetest.register_node(":bushes:" .. bush_name .. "_bush", {
+ description = S(desc.." Bush"),
+ 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 = "",
+ 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 },
+})
+
+
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_basket.png b/plantlife_modpack/bushes_classic/textures/bushes_basket.png
new file mode 100644
index 0000000..4384fba
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_basket.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_blackberry.png b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_blackberry.png
new file mode 100644
index 0000000..83ee63c
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_blackberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_blueberry.png b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_blueberry.png
new file mode 100644
index 0000000..9f9b2c6
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_blueberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_gooseberry.png b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_gooseberry.png
new file mode 100644
index 0000000..d6bdff4
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_gooseberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_mixed_berry.png b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_mixed_berry.png
new file mode 100644
index 0000000..ff271ff
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_mixed_berry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_raspberry.png b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_raspberry.png
new file mode 100644
index 0000000..3bfd42f
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_raspberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_strawberry.png b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_strawberry.png
new file mode 100644
index 0000000..c27b0b3
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_basket_pie_strawberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_blackberry.png b/plantlife_modpack/bushes_classic/textures/bushes_blackberry.png
new file mode 100644
index 0000000..76b742b
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_blackberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_cooked.png b/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_cooked.png
new file mode 100644
index 0000000..a6af5ca
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_cooked.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_raw.png b/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_raw.png
new file mode 100644
index 0000000..c37f987
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_raw.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_slice.png b/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_slice.png
new file mode 100644
index 0000000..90be80e
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_blackberry_pie_slice.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_blueberry.png b/plantlife_modpack/bushes_classic/textures/bushes_blueberry.png
new file mode 100644
index 0000000..e15047f
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_blueberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_cooked.png b/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_cooked.png
new file mode 100644
index 0000000..11ce60f
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_cooked.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_raw.png b/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_raw.png
new file mode 100644
index 0000000..6e8dd9e
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_raw.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_slice.png b/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_slice.png
new file mode 100644
index 0000000..eb6bf5a
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_blueberry_pie_slice.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_bush_blackberry.png b/plantlife_modpack/bushes_classic/textures/bushes_bush_blackberry.png
new file mode 100644
index 0000000..fa76c61
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_bush_blackberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_bush_blueberry.png b/plantlife_modpack/bushes_classic/textures/bushes_bush_blueberry.png
new file mode 100644
index 0000000..3a305ca
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_bush_blueberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_bush_fruitless.png b/plantlife_modpack/bushes_classic/textures/bushes_bush_fruitless.png
new file mode 100644
index 0000000..ffa2e0a
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_bush_fruitless.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_bush_gooseberry.png b/plantlife_modpack/bushes_classic/textures/bushes_bush_gooseberry.png
new file mode 100644
index 0000000..52eca60
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_bush_gooseberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_bush_raspberry.png b/plantlife_modpack/bushes_classic/textures/bushes_bush_raspberry.png
new file mode 100644
index 0000000..01809de
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_bush_raspberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_bush_strawberry.png b/plantlife_modpack/bushes_classic/textures/bushes_bush_strawberry.png
new file mode 100644
index 0000000..a5060e2
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_bush_strawberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_gooseberry.png b/plantlife_modpack/bushes_classic/textures/bushes_gooseberry.png
new file mode 100644
index 0000000..e712cad
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_gooseberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_cooked.png b/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_cooked.png
new file mode 100644
index 0000000..caa4e92
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_cooked.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_raw.png b/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_raw.png
new file mode 100644
index 0000000..baf5af7
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_raw.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_slice.png b/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_slice.png
new file mode 100644
index 0000000..5cf2844
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_gooseberry_pie_slice.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_cooked.png b/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_cooked.png
new file mode 100644
index 0000000..351a269
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_cooked.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_raw.png b/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_raw.png
new file mode 100644
index 0000000..6486989
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_raw.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_slice.png b/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_slice.png
new file mode 100644
index 0000000..8844c3d
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_mixed_berry_pie_slice.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_raspberry.png b/plantlife_modpack/bushes_classic/textures/bushes_raspberry.png
new file mode 100644
index 0000000..034fd48
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_raspberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_cooked.png b/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_cooked.png
new file mode 100644
index 0000000..afeb7d8
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_cooked.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_raw.png b/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_raw.png
new file mode 100644
index 0000000..bb76a1d
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_raw.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_slice.png b/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_slice.png
new file mode 100644
index 0000000..a094488
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_raspberry_pie_slice.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_strawberry.png b/plantlife_modpack/bushes_classic/textures/bushes_strawberry.png
new file mode 100644
index 0000000..b6a74b6
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_strawberry.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_cooked.png b/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_cooked.png
new file mode 100644
index 0000000..3d034ea
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_cooked.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_raw.png b/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_raw.png
new file mode 100644
index 0000000..932c073
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_raw.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_slice.png b/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_slice.png
new file mode 100644
index 0000000..f8d1d36
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_strawberry_pie_slice.png
Binary files differ
diff --git a/plantlife_modpack/bushes_classic/textures/bushes_sugar.png b/plantlife_modpack/bushes_classic/textures/bushes_sugar.png
new file mode 100644
index 0000000..726196b
--- /dev/null
+++ b/plantlife_modpack/bushes_classic/textures/bushes_sugar.png
Binary files differ
diff --git a/plantlife_modpack/cavestuff/depends.txt b/plantlife_modpack/cavestuff/depends.txt
new file mode 100644
index 0000000..3a7daa1
--- /dev/null
+++ b/plantlife_modpack/cavestuff/depends.txt
@@ -0,0 +1,2 @@
+default
+
diff --git a/plantlife_modpack/cavestuff/init.lua b/plantlife_modpack/cavestuff/init.lua
new file mode 100644
index 0000000..f2bed1a
--- /dev/null
+++ b/plantlife_modpack/cavestuff/init.lua
@@ -0,0 +1,12 @@
+-----------------------------------------------------------------------------------------------
+local title = "Cave Stuff"
+local version = "0.0.3"
+local mname = "cavestuff"
+-----------------------------------------------------------------------------------------------
+
+dofile(minetest.get_modpath("cavestuff").."/nodes.lua")
+dofile(minetest.get_modpath("cavestuff").."/mapgen.lua")
+
+-----------------------------------------------------------------------------------------------
+
+print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
diff --git a/plantlife_modpack/cavestuff/mapgen.lua b/plantlife_modpack/cavestuff/mapgen.lua
new file mode 100644
index 0000000..a91a2f0
--- /dev/null
+++ b/plantlife_modpack/cavestuff/mapgen.lua
@@ -0,0 +1,52 @@
+--Map Generation Stuff
+
+minetest.register_on_generated(function(minp, maxp, seed)
+ if maxp.y >= 2 and minp.y <= 0 then
+ -- Generate pebbles
+ local perlin1 = minetest.get_perlin(329, 3, 0.6, 100)
+ -- Assume X and Z lengths are equal
+ local divlen = 16
+ local divs = (maxp.x-minp.x)/divlen+1;
+ for divx=0,divs-1 do
+ for divz=0,divs-1 do
+ local x0 = minp.x + math.floor((divx+0)*divlen)
+ local z0 = minp.z + math.floor((divz+0)*divlen)
+ local x1 = minp.x + math.floor((divx+1)*divlen)
+ local z1 = minp.z + math.floor((divz+1)*divlen)
+ -- Determine pebble amount from perlin noise
+ local pebble_amount = math.floor(perlin1:get2d({x=x0, y=z0}) ^ 2 * 2)
+ -- Find random positions for pebbles based on this random
+ local pr = PseudoRandom(seed+1)
+ for i=0,pebble_amount do
+ local x = pr:next(x0, x1)
+ local z = pr:next(z0, z1)
+ -- Find ground level (0...15)
+ local ground_y = nil
+ for y=30,0,-1 do
+ if minetest.get_node({x=x,y=y,z=z}).name ~= "air" then
+ ground_y = y
+ break
+ end
+ end
+
+ if ground_y then
+ local p = {x=x,y=ground_y+1,z=z}
+ local nn = minetest.get_node(p).name
+ -- Check if the node can be replaced
+ if minetest.registered_nodes[nn] and
+ minetest.registered_nodes[nn].buildable_to then
+ nn = minetest.get_node({x=x,y=ground_y,z=z}).name
+ -- If desert sand, add dry shrub
+ if nn == "default:dirt_with_grass" then
+ minetest.set_node(p,{name="cavestuff:pebble_"..pr:next(1,2), param2=math.random(0,3)})
+ elseif nn == "default:desert_sand" then
+ minetest.set_node(p,{name="cavestuff:desert_pebble_"..pr:next(1,2), param2=math.random(0,3)})
+ end
+ end
+ end
+
+ end
+ end
+ end
+ end
+end)
diff --git a/plantlife_modpack/cavestuff/models/cavestuff_pebble.obj b/plantlife_modpack/cavestuff/models/cavestuff_pebble.obj
new file mode 100644
index 0000000..243d1ce
--- /dev/null
+++ b/plantlife_modpack/cavestuff/models/cavestuff_pebble.obj
@@ -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
diff --git a/plantlife_modpack/cavestuff/nodes.lua b/plantlife_modpack/cavestuff/nodes.lua
new file mode 100644
index 0000000..dc537cf
--- /dev/null
+++ b/plantlife_modpack/cavestuff/nodes.lua
@@ -0,0 +1,145 @@
+--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 = "Pebble",
+ drawtype = "mesh",
+ mesh = "cavestuff_pebble.obj",
+ tiles = {"undergrowth_pebble.png"},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky=3, stone=1},
+ selection_box = cbox,
+ collision_box = cbox,
+ on_place = function(itemstack, placer, pointed_thing)
+ -- 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",
+ tiles = {"undergrowth_pebble.png"},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky=3, stone=1, not_in_creative_inventory=1},
+ selection_box = cbox,
+ collision_box = cbox,
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("cavestuff:desert_pebble_1",{
+ description = "Desert Pebble",
+ drawtype = "mesh",
+ mesh = "cavestuff_pebble.obj",
+ tiles = {"default_desert_stone.png"},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky=3, stone=1},
+ 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, not_in_creative__inventory=1},
+ 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},
+ description = "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 pt = pointed_thing
+ if minetest.get_node(pt.under).name=="default:stone"
+ and minetest.get_node({x=pt.under.x, y=pt.under.y-1, z=pt.under.z}).name=="air"
+ and minetest.get_node({x=pt.under.x, y=pt.under.y-2, z=pt.under.z}).name=="air" then
+ minetest.set_node({x=pt.under.x, y=pt.under.y-1, z=pt.under.z}, {name="cavestuff:stalactite_"..math.random(1,3)})
+ if not minetest.setting_getbool("creative_mode") then
+ 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},
+ 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},
+ 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},
+ }
+ },
+})
+
+--Stalagmites
+
+
+
diff --git a/plantlife_modpack/cavestuff/textures/undergrowth_desert_pebble.png b/plantlife_modpack/cavestuff/textures/undergrowth_desert_pebble.png
new file mode 100644
index 0000000..966e937
--- /dev/null
+++ b/plantlife_modpack/cavestuff/textures/undergrowth_desert_pebble.png
Binary files differ
diff --git a/plantlife_modpack/cavestuff/textures/undergrowth_pebble.png b/plantlife_modpack/cavestuff/textures/undergrowth_pebble.png
new file mode 100644
index 0000000..306ca6a
--- /dev/null
+++ b/plantlife_modpack/cavestuff/textures/undergrowth_pebble.png
Binary files differ
diff --git a/plantlife_modpack/copyright.txt b/plantlife_modpack/copyright.txt
new file mode 100644
index 0000000..63d2431
--- /dev/null
+++ b/plantlife_modpack/copyright.txt
@@ -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.
diff --git a/plantlife_modpack/dryplants/crafting.lua b/plantlife_modpack/dryplants/crafting.lua
new file mode 100644
index 0000000..69154b5
--- /dev/null
+++ b/plantlife_modpack/dryplants/crafting.lua
@@ -0,0 +1,360 @@
+-----------------------------------------------------------------------------------------------
+-- Dry Plants - Recipes 0.1.0 -- Short Grass -> Dirt
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- License (everything): WTFPL
+-- 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") ~= nil then
+ minetest.register_craft({
+ output = "dryplants:sickle",
+ recipe = {
+ {"flint:flintstone",""},
+ {"", "default:stick"},
+ {"default:stick",""}
+ }
+ })
+end
+if minetest.get_modpath("stoneage") ~= nil 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"}
+ },
+})]] \ No newline at end of file
diff --git a/plantlife_modpack/dryplants/depends.txt b/plantlife_modpack/dryplants/depends.txt
new file mode 100644
index 0000000..059033e
--- /dev/null
+++ b/plantlife_modpack/dryplants/depends.txt
@@ -0,0 +1,3 @@
+default
+biome_lib
+farming?
diff --git a/plantlife_modpack/dryplants/init.lua b/plantlife_modpack/dryplants/init.lua
new file mode 100644
index 0000000..e6baa7a
--- /dev/null
+++ b/plantlife_modpack/dryplants/init.lua
@@ -0,0 +1,203 @@
+-----------------------------------------------------------------------------------------------
+local title = "Grasses" -- former "Dry plants"
+local version = "0.1.5"
+local mname = "dryplants"
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- textures & ideas partly by Neuromancer
+
+-- License (everything): WTFPL
+-- Contains code from: default, farming
+-- Looked at code from: darkage, sickle, stairs
+-- Dependencies: default, farming, biome_lib
+-- Supports:
+-----------------------------------------------------------------------------------------------
+abstract_dryplants = {}
+
+dofile(minetest.get_modpath("dryplants").."/crafting.lua")
+dofile(minetest.get_modpath("dryplants").."/settings.txt")
+dofile(minetest.get_modpath("dryplants").."/reed.lua")
+if REEDMACE_GENERATES == true then
+dofile(minetest.get_modpath("dryplants").."/reedmace.lua")
+end
+if SMALL_JUNCUS_GENERATES == true then
+dofile(minetest.get_modpath("dryplants").."/juncus.lua")
+end
+if EXTRA_TALL_GRASS_GENERATES == true then
+dofile(minetest.get_modpath("dryplants").."/moregrass.lua")
+end
+--dofile(minetest.get_modpath("dryplants").."/meadowvariation.lua")
+
+-----------------------------------------------------------------------------------------------
+-- 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.set_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.set_node(pt.under, {name="dryplants:grass_short"})
+ minetest.set_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 = "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 = "Cut Grass",
+ inventory_image = "dryplants_grass.png",
+ wield_image = "dryplants_grass.png",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = {"dryplants_grass.png"},
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5 , -0.5 , -0.5 , 0.5 , -0.4375, 0.5 },
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Cut Grass becomes Hay over time
+-----------------------------------------------------------------------------------------------
+minetest.register_abm({
+ nodenames = {"dryplants:grass"},
+ interval = HAY_DRYING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle
+ chance = 1,
+ action = function(pos)
+ minetest.set_node(pos, {name="dryplants:hay"})
+ end,
+})
+
+-----------------------------------------------------------------------------------------------
+-- Hay
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:hay", {
+ description = "Hay",
+ inventory_image = "dryplants_hay.png",
+ wield_image = "dryplants_hay.png",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = {"dryplants_hay.png"},
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5 , -0.5 , -0.5 , 0.5 , -0.4375, 0.5 },
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Short Grass
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:grass_short", {
+ description = "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 = GRASS_REGROWING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle
+ chance = 100/GRASS_REGROWING_CHANCE,
+ 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.set_node(pos, {name="default:dirt_with_grass"})
+ end
+ end,
+})
+
+-----------------------------------------------------------------------------------------------
+print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
+-----------------------------------------------------------------------------------------------
diff --git a/plantlife_modpack/dryplants/juncus.lua b/plantlife_modpack/dryplants/juncus.lua
new file mode 100644
index 0000000..bfbf23c
--- /dev/null
+++ b/plantlife_modpack/dryplants/juncus.lua
@@ -0,0 +1,133 @@
+-----------------------------------------------------------------------------------------------
+-- Grasses - Juncus 0.0.5
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- textures & ideas partly by Neuromancer
+
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: default
+-----------------------------------------------------------------------------------------------
+
+abstract_dryplants.grow_juncus = function(pos)
+ local juncus_type = math.random(2,3)
+ local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
+ if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
+ or minetest.get_node(right_here).name == "default:junglegrass" then
+ if juncus_type == 2 then
+ minetest.set_node(right_here, {name="dryplants:juncus_02"})
+ else
+ minetest.set_node(right_here, {name="dryplants:juncus"})
+ end
+ end
+end
+
+minetest.register_node("dryplants:juncus", {
+ description = "Juncus",
+ drawtype = "plantlike",
+ visual_scale = 2,
+ 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)
+ 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.set_node(right_here, {name="dryplants:juncus_02"})
+ else
+ minetest.set_node(right_here, {name="dryplants:juncus"})
+ end
+ if not minetest.setting_getbool("creative_mode") then
+ itemstack:take_item()
+ end
+ return itemstack
+ end,
+})
+minetest.register_node("dryplants:juncus_02", {
+ description = "Juncus",
+ drawtype = "plantlike",
+ visual_scale = 2,
+ 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
+biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ --"default:desert_sand",
+ --"default:sand",
+ "stoneage:grass_with_silex",
+ "sumpf:peat",
+ "sumpf:sumpf"
+ },
+ max_count = JUNCUS_NEAR_WATER_PER_MAPBLOCK,
+ rarity = 101 - JUNCUS_NEAR_WATER_RARITY,
+ min_elevation = 1, -- above sea level
+ near_nodes = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_dryplants.grow_juncus
+)
+-- at dunes/beach
+biome_lib:register_generate_plant({
+ surface = {
+ --"default:dirt_with_grass",
+ --"default:desert_sand",
+ "default:sand",
+ --"stoneage:grass_with_silex",
+ --"sumpf:peat",
+ --"sumpf:sumpf"
+ },
+ max_count = JUNCUS_AT_BEACH_PER_MAPBLOCK,
+ rarity = 101 - JUNCUS_AT_BEACH_RARITY,
+ min_elevation = 1, -- above sea level
+ near_nodes = {"default:dirt_with_grass"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_dryplants.grow_juncus
+)
diff --git a/plantlife_modpack/dryplants/meadowvariation.lua b/plantlife_modpack/dryplants/meadowvariation.lua
new file mode 100644
index 0000000..8477657
--- /dev/null
+++ b/plantlife_modpack/dryplants/meadowvariation.lua
@@ -0,0 +1,26 @@
+-----------------------------------------------------------------------------------------------
+-- Grasses - Meadow Variation 0.0.1
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: default
+-----------------------------------------------------------------------------------------------
+
+abstract_dryplants.grow_grass_variation = function(pos)
+ local right_here = {x=pos.x, y=pos.y, z=pos.z}
+ minetest.set_node(right_here, {name="dryplants:grass_short"})
+end
+
+biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ },
+ max_count = 4800,
+ rarity = 25,
+ min_elevation = 1, -- above sea level
+ plantlife_limit = -0.9,
+ },
+ abstract_dryplants.grow_grass_variation
+)
diff --git a/plantlife_modpack/dryplants/models/plantlike.obj b/plantlife_modpack/dryplants/models/plantlike.obj
new file mode 100644
index 0000000..4b38d39
--- /dev/null
+++ b/plantlife_modpack/dryplants/models/plantlike.obj
@@ -0,0 +1,28 @@
+# Blender v2.73 (sub 0) OBJ File: ''
+# www.blender.org
+o Cylinder
+v 0.359670 -0.500000 0.347329
+v 0.359670 0.500000 0.347329
+v -0.359670 -0.500000 -0.347329
+v -0.359670 0.500000 -0.347329
+v 0.347329 0.500000 -0.359670
+v 0.347329 -0.500000 -0.359670
+v -0.347329 0.500000 0.359670
+v -0.347329 -0.500000 0.359670
+v 0.359670 -0.500000 0.347329
+v 0.359670 0.500000 0.347329
+v -0.359670 -0.500000 -0.347329
+v -0.359670 0.500000 -0.347329
+v 0.347329 0.500000 -0.359670
+v 0.347329 -0.500000 -0.359670
+v -0.347329 0.500000 0.359670
+v -0.347329 -0.500000 0.359670
+vt 1.000000 -0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt -0.000000 0.000000
+s off
+f 1/1 2/2 4/3 3/4
+f 8/1 7/2 5/3 6/4
+f 9/1 11/4 12/3 10/2
+f 16/1 14/4 13/3 15/2
diff --git a/plantlife_modpack/dryplants/moregrass.lua b/plantlife_modpack/dryplants/moregrass.lua
new file mode 100644
index 0000000..88761c8
--- /dev/null
+++ b/plantlife_modpack/dryplants/moregrass.lua
@@ -0,0 +1,33 @@
+-----------------------------------------------------------------------------------------------
+-- Grasses - More Tall Grass 0.0.2
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: default
+-----------------------------------------------------------------------------------------------
+
+abstract_dryplants.grow_grass = function(pos)
+ local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
+ local grass_size = math.random(1,5)
+ if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
+ or minetest.get_node(right_here).name == "default:junglegrass" then
+ minetest.set_node(right_here, {name="default:grass_"..grass_size})
+ end
+end
+
+biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "stoneage:grass_with_silex",
+ "sumpf:peat",
+ "sumpf:sumpf"
+ },
+ max_count = TALL_GRASS_PER_MAPBLOCK,
+ rarity = 101 - TALL_GRASS_RARITY,
+ min_elevation = 1, -- above sea level
+ plantlife_limit = -0.9,
+ },
+ abstract_dryplants.grow_grass
+)
diff --git a/plantlife_modpack/dryplants/reed.lua b/plantlife_modpack/dryplants/reed.lua
new file mode 100644
index 0000000..6f29028
--- /dev/null
+++ b/plantlife_modpack/dryplants/reed.lua
@@ -0,0 +1,380 @@
+-----------------------------------------------------------------------------------------------
+-- Dry Plants - Reed 0.0.5
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- License (everything): WTFPL
+-- Looked at code from: darkage, default, stairs
+-- Dependencies: default
+-----------------------------------------------------------------------------------------------
+minetest.register_alias("stairs:stair_wetreed", "dryplants:wetreed_roof")
+minetest.register_alias("stairs:slab_wetreed", "dryplants:wetreed_slab")
+minetest.register_alias("stairs:stair_reed", "dryplants:reed_roof")
+minetest.register_alias("stairs:slab_reed", "dryplants:reed_slab")
+
+
+-----------------------------------------------------------------------------------------------
+-- Wet Reed
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:wetreed", {
+ description = "Wet Reed",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed_wet.png"},
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Wet Reed Slab
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:wetreed_slab", {
+ description = "Wet Reed Slab",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed_wet.png"},
+ node_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Wet Reed Roof
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:wetreed_roof", {
+ description = "Wet Reed Roof",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed_wet.png"},
+ node_box = {
+ type = "fixed",
+-- { left , bottom , front , right , top , back }
+ fixed = {
+ {-1/2, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 0, 0},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 0, 0},
+ }
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+if AUTO_ROOF_CORNER == true then
+
+ local CoRNeR = {
+-- MaTeRiaL
+ {"wetreed"},
+ {"reed"}
+ }
+
+ for i in pairs(CoRNeR) do
+
+ local MaTeRiaL = CoRNeR[i][1]
+ local roof = "dryplants:"..MaTeRiaL.."_roof"
+ local corner = "dryplants:"..MaTeRiaL.."_roof_corner"
+ local corner_2 = "dryplants:"..MaTeRiaL.."_roof_corner_2"
+
+ minetest.register_abm({
+ nodenames = {roof},
+ interval = 1,
+ chance = 1,
+ action = function(pos)
+
+ local node_east = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z })
+ local node_west = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z })
+ local node_north = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
+ local node_south = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
+ -- corner 1
+ if ((node_west.name == roof and node_west.param2 == 0)
+ or (node_west.name == corner and node_west.param2 == 1))
+ and ((node_north.name == roof and node_north.param2 == 3)
+ or (node_north.name == corner and node_north.param2 == 3))
+ then
+ minetest.set_node(pos, {name=corner, param2=0})
+ end
+
+ if ((node_north.name == roof and node_north.param2 == 1)
+ or (node_north.name == corner and node_north.param2 == 2))
+ and ((node_east.name == roof and node_east.param2 == 0)
+ or (node_east.name == corner and node_east.param2 == 0))
+ then
+ minetest.set_node(pos, {name=corner, param2=1})
+ end
+
+ if ((node_east.name == roof and node_east.param2 == 2)
+ or (node_east.name == corner and node_east.param2 == 3))
+ and ((node_south.name == roof and node_south.param2 == 1)
+ or (node_south.name == corner and node_south.param2 == 1))
+ then
+ minetest.set_node(pos, {name=corner, param2=2})
+ end
+
+ if ((node_south.name == roof and node_south.param2 == 3)
+ or (node_south.name == corner and node_south.param2 == 0))
+ and ((node_west.name == roof and node_west.param2 == 2)
+ or (node_west.name == corner and node_west.param2 == 2))
+ then
+ minetest.set_node(pos, {name=corner, param2=3})
+ end
+ -- corner 2
+ if ((node_west.name == roof and node_west.param2 == 2)
+ or (node_west.name == corner_2 and node_west.param2 == 1))
+ and ((node_north.name == roof and node_north.param2 == 1)
+ or (node_north.name == corner_2 and node_north.param2 == 3))
+ then
+ minetest.set_node(pos, {name=corner_2, param2=0})
+ end
+
+ if ((node_north.name == roof and node_north.param2 == 3)
+ or (node_north.name == corner_2 and node_north.param2 == 2))
+ and ((node_east.name == roof and node_east.param2 == 2)
+ or (node_east.name == corner_2 and node_east.param2 == 0))
+ then
+ minetest.set_node(pos, {name=corner_2, param2=1})
+ end
+
+ if ((node_east.name == roof and node_east.param2 == 0)
+ or (node_east.name == corner_2 and node_east.param2 == 3))
+ and ((node_south.name == roof and node_south.param2 == 3)
+ or (node_south.name == corner_2 and node_south.param2 == 1))
+ then
+ minetest.set_node(pos, {name=corner_2, param2=2})
+ end
+
+ if ((node_south.name == roof and node_south.param2 == 1)
+ or (node_south.name == corner_2 and node_south.param2 == 0))
+ and ((node_west.name == roof and node_west.param2 == 0)
+ or (node_west.name == corner_2 and node_west.param2 == 2))
+ then
+ minetest.set_node(pos, {name=corner_2, param2=3})
+ end
+
+ end,
+ })
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+-- Wet Reed Roof Corner
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:wetreed_roof_corner", {
+ description = "Wet Reed Roof Corner",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed_wet.png"},
+ node_box = {
+ type = "fixed",
+-- { left , bottom , front , right , top , back }
+ fixed = {
+ {-1/2, 0, 0, 0, 1/2, 1/2},
+ {0, -1/2, 0, 1/2, 0, 1/2},
+ {-1/2, -1/2, -1/2, 0, 0, 0},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 0, 0, 0, 1/2, 1/2},
+ {0, -1/2, 0, 1/2, 0, 1/2},
+ {-1/2, -1/2, -1/2, 0, 0, 0},
+ }
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Wet Reed Roof Corner 2
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:wetreed_roof_corner_2", {
+ description = "Wet Reed Roof Corner 2",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed_wet.png"},
+ node_box = {
+ type = "fixed",
+-- { left , bottom , front , right , top , back }
+ fixed = {
+ {-1/2, -1/2, 0, 0, 0, 1/2},
+ {0, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, 0, -1/2, 0, 1/2, 0},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/2, 0, 0, 0, 1/2},
+ {0, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, 0, -1/2, 0, 1/2, 0},
+ }
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Wet Reed becomes (dry) Reed over time
+-----------------------------------------------------------------------------------------------
+if REED_WILL_DRY == true then
+
+ local DRyiNG = {
+-- WeT DRy
+ {"dryplants:wetreed", "dryplants:reed"},
+ {"dryplants:wetreed_slab", "dryplants:reed_slab"},
+ {"dryplants:wetreed_roof", "dryplants:reed_roof"},
+ {"dryplants:wetreed_roof_corner", "dryplants:reed_roof_corner"},
+ {"dryplants:wetreed_roof_corner_2", "dryplants:reed_roof_corner_2"}
+ }
+ for i in pairs(DRyiNG) do
+
+ local WeT = DRyiNG[i][1]
+ local DRy = DRyiNG[i][2]
+
+ minetest.register_abm({
+ nodenames = {WeT},
+ interval = REED_DRYING_TIME, --1200, -- 20 minutes: a minetest-day/night-cycle
+ chance = 1,
+ action = function(pos)
+ local direction = minetest.get_node(pos).param2
+ minetest.set_node(pos, {name=DRy, param2=direction})
+ end,
+ })
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+-- Reed
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reed", {
+ description = "Reed",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed.png"},
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Reed Slab
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reed_slab", {
+ description = "Reed Slab",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed.png"},
+ node_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Reed Roof
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reed_roof", {
+ description = "Reed Roof",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed.png"},
+ node_box = {
+ type = "fixed",
+-- { left , bottom , front , right , top , back }
+ fixed = {
+ {-1/2, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 0, 0},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 0, 0},
+ }
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Reed Roof Corner
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reed_roof_corner", {
+ description = "Reed Roof Corner",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed.png"},
+ node_box = {
+ type = "fixed",
+-- { left , bottom , front , right , top , back }
+ fixed = {
+ {-1/2, 0, 0, 0, 1/2, 1/2},
+ {0, -1/2, 0, 1/2, 0, 1/2},
+ {-1/2, -1/2, -1/2, 0, 0, 0},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 0, 0, 0, 1/2, 1/2},
+ {0, -1/2, 0, 1/2, 0, 1/2},
+ {-1/2, -1/2, -1/2, 0, 0, 0},
+ }
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- Reed Roof Corner 2
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reed_roof_corner_2", {
+ description = "Reed Roof Corner 2",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"dryplants_reed.png"},
+ node_box = {
+ type = "fixed",
+-- { left , bottom , front , right , top , back }
+ fixed = {
+ {-1/2, -1/2, 0, 0, 0, 1/2},
+ {0, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, 0, -1/2, 0, 1/2, 0},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/2, 0, 0, 0, 1/2},
+ {0, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, 0, -1/2, 0, 1/2, 0},
+ }
+ },
+ groups = {snappy=3, flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+})
diff --git a/plantlife_modpack/dryplants/reedmace.lua b/plantlife_modpack/dryplants/reedmace.lua
new file mode 100644
index 0000000..9547c7a
--- /dev/null
+++ b/plantlife_modpack/dryplants/reedmace.lua
@@ -0,0 +1,411 @@
+-----------------------------------------------------------------------------------------------
+-- Grasses - Reedmace 0.1.1
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- textures & ideas partly by Neuromancer
+
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: default, trees
+-----------------------------------------------------------------------------------------------
+
+-- NOTES (from wikipedia, some of this might get implemented)
+-- rhizomes are edible
+-- outer portion of young plants can be peeled and the heart can be eaten raw or boiled and eaten like asparagus
+-- leaf bases can be eaten raw or cooked
+-- sheath can be removed from the developing green flower spike, which can then be boiled and eaten like corn on the cob
+-- pollen can be collected and used as a flour supplement or thickener
+-- Typha stems and leaves can be used to make paper
+-- The seed hairs were used by some Native American groups as tinder for starting fires
+
+-----------------------------------------------------------------------------------------------
+-- REEDMACE SHAPES
+-----------------------------------------------------------------------------------------------
+
+abstract_dryplants.grow_reedmace = function(pos)
+ local size = math.random(1,3)
+ local spikes = math.random(1,3)
+ local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z}
+ local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z}
+ local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z}
+ if minetest.get_node(pos_01).name == "air" -- bug fix
+ or minetest.get_node(pos_01).name == "dryplants:reedmace_sapling" then
+ if minetest.get_node(pos_02).name ~= "air" then
+ minetest.set_node(pos_01, {name="dryplants:reedmace_top"})
+ elseif minetest.get_node(pos_03).name ~= "air" then
+ minetest.set_node(pos_01, {name="dryplants:reedmace_height_2"})
+ elseif size == 1 then
+ minetest.set_node(pos_01, {name="dryplants:reedmace_top"})
+ elseif size == 2 then
+ minetest.set_node(pos_01, {name="dryplants:reedmace_height_2"})
+ elseif size == 3 then
+ if spikes == 1 then
+ minetest.set_node(pos_01, {name="dryplants:reedmace_height_3_spikes"})
+ else
+ minetest.set_node(pos_01, {name="dryplants:reedmace_height_3"})
+ end
+ end
+ end
+end
+
+abstract_dryplants.grow_reedmace_water = function(pos)
+ local size = math.random(1,3)
+ local spikes = math.random(1,3)
+ local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z}
+ local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z}
+ local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z}
+ local pos_04 = {x = pos.x, y = pos.y + 4, z = pos.z}
+ minetest.add_entity(pos_01, "dryplants:reedmace_water_entity")
+ if minetest.get_node(pos_02).name == "air" then -- bug fix
+ if minetest.get_node(pos_03).name ~= "air" then
+ minetest.set_node(pos_02, {name="dryplants:reedmace_top"})
+ elseif minetest.get_node(pos_04).name ~= "air" then
+ minetest.set_node(pos_02, {name="dryplants:reedmace_height_2"})
+ elseif size == 1 then
+ minetest.set_node(pos_02, {name="dryplants:reedmace_top"})
+ elseif size == 2 then
+ minetest.set_node(pos_02, {name="dryplants:reedmace_height_2"})
+ elseif size == 3 then
+ if spikes == 1 then
+ minetest.set_node(pos_02, {name="dryplants:reedmace_height_3_spikes"})
+ else
+ minetest.set_node(pos_02, {name="dryplants:reedmace_height_3"})
+ end
+ end
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+-- REEDMACE SPIKES
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace_spikes", {
+ description = "Reedmace",
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {"dryplants_reedmace_spikes.png"},
+ inventory_image = "dryplants_reedmace_spikes.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2,
+ not_in_creative_inventory=1
+ },
+ drop = 'dryplants:reedmace_sapling',
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE height: 1
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace_top", {
+ description = "Reedmace, height: 1",
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {"dryplants_reedmace_top.png"},
+ inventory_image = "dryplants_reedmace_top.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2,
+ not_in_creative_inventory=1
+ },
+ drop = 'dryplants:reedmace_sapling',
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE height: 2
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace_height_2", {
+ description = "Reedmace, height: 2",
+ drawtype = "plantlike",
+ visual_scale = 2,
+ paramtype = "light",
+ tiles = {"dryplants_reedmace_height_2.png"},
+ inventory_image = "dryplants_reedmace_top.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2--,
+ --not_in_creative_inventory=1
+ },
+ drop = 'dryplants:reedmace_sapling',
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE height: 3
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace_height_3", {
+ description = "Reedmace, height: 3",
+ drawtype = "plantlike",
+ visual_scale = 2,
+ paramtype = "light",
+ tiles = {"dryplants_reedmace_height_3.png"},
+ inventory_image = "dryplants_reedmace_top.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2--,
+ --not_in_creative_inventory=1
+ },
+ drop = 'dryplants:reedmace_sapling',
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE height: 3 & Spikes
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace_height_3_spikes", {
+ description = "Reedmace, height: 3 & Spikes",
+ drawtype = "plantlike",
+ visual_scale = 2,
+ paramtype = "light",
+ tiles = {"dryplants_reedmace_height_3_spikes.png"},
+ inventory_image = "dryplants_reedmace_top.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2--,
+ --not_in_creative_inventory=1
+ },
+ drop = 'dryplants:reedmace_sapling',
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE STEMS
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace", {
+ description = "Reedmace",
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {"dryplants_reedmace.png"},
+ inventory_image = "dryplants_reedmace.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2,
+ not_in_creative_inventory=1
+ },
+ drop = 'dryplants:reedmace_sapling',
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+ after_destruct = function(pos,oldnode)
+ local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
+ if node.name == "dryplants:reedmace_top"
+ or node.name == "dryplants:reedmace_spikes" then
+ minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
+ minetest.add_item(pos,"dryplants:reedmace_sapling")
+ end
+ end,
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE BOTTOM
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace_bottom", {
+ description = "Reedmace",
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {"dryplants_reedmace_bottom.png"},
+ inventory_image = "dryplants_reedmace_bottom.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2,
+ not_in_creative_inventory=1
+ },
+ drop = 'dryplants:reedmace_sapling',
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+ after_destruct = function(pos,oldnode)
+ local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
+ if node.name == "dryplants:reedmace"
+ or node.name == "dryplants:reedmace_top"
+ or node.name == "dryplants:reedmace_spikes" then
+ minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
+ minetest.add_item(pos,"dryplants:reedmace_sapling")
+ end
+ end,
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE "SAPLING" (the drop from the above)
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace_sapling", {
+ description = "Reedmace",
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {"dryplants_reedmace_sapling.png"},
+ inventory_image = "dryplants_reedmace_sapling.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2,
+ attached_node=1
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+})
+-- abm
+minetest.register_abm({
+ nodenames = "dryplants:reedmace_sapling",
+ interval = REEDMACE_GROWING_TIME,
+ chance = 100/REEDMACE_GROWING_CHANCE,
+ action = function(pos, node, _, _)
+ if string.find(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z }).name, "default:water")
+ or string.find(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}).name, "default:water")
+ or string.find(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z }).name, "default:water")
+ or string.find(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}).name, "default:water") then
+ if minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then
+ abstract_dryplants.grow_reedmace_water({x = pos.x, y = pos.y - 1, z = pos.z})
+ end
+ minetest.set_node({x=pos.x, y=pos.y, z=pos.z}, {name="default:water_source"})
+ else
+ abstract_dryplants.grow_reedmace({x = pos.x, y = pos.y - 1, z = pos.z})
+ end
+ end
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE WATER (for entity)
+-----------------------------------------------------------------------------------------------
+minetest.register_node("dryplants:reedmace_water", {
+ description = "Reedmace",
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {"dryplants_reedmace_water.png"},
+ inventory_image = "dryplants_reedmace_water.png",
+ groups = {not_in_creative_inventory=1},
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- REEDMACE WATER ENTITY
+-----------------------------------------------------------------------------------------------
+minetest.register_entity("dryplants:reedmace_water_entity",{
+ visual = "mesh",
+ mesh = "plantlike.obj",
+ visual_size = {x=10, y=10},
+ textures = {"dryplants_reedmace_water.png"},
+ collisionbox = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3},
+ on_punch = function(self, puncher)
+ if puncher:is_player() and puncher:get_inventory() then
+ if not minetest.setting_getbool("creative_mode") then
+ puncher:get_inventory():add_item("main", "dryplants:reedmace_sapling")
+ end
+ self.object:remove()
+ end
+ end,
+})
+-----------------------------------------------------------------------------------------------
+-- SPAWN REEDMACE
+-----------------------------------------------------------------------------------------------
+--[[biome_lib:spawn_on_surfaces({
+ spawn_delay = 1200,
+ spawn_plants = {"dryplants:reedmace_sapling"},
+ spawn_chance = 400,
+ spawn_surfaces = {
+ "default:dirt_with_grass",
+ "default:desert_sand",
+ "default:sand",
+ "dryplants:grass_short",
+ "stoneage:grass_with_silex"
+ },
+ seed_diff = 329,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+})]]
+-----------------------------------------------------------------------------------------------
+-- GENERATE REEDMACE
+-----------------------------------------------------------------------------------------------
+-- near water or swamp
+biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "default:desert_sand",
+ "stoneage:grass_with_silex",
+ "sumpf:peat",
+ "sumpf:sumpf"
+ },
+ max_count = REEDMACE_NEAR_WATER_PER_MAPBLOCK,
+ rarity = 101 - REEDMACE_NEAR_WATER_RARITY,
+ --rarity = 60,
+ min_elevation = 1, -- above sea level
+ near_nodes = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_dryplants.grow_reedmace
+)
+-- in water
+biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt",
+ "default:dirt_with_grass",
+ --"default:desert_sand",
+ --"stoneage:grass_with_silex",
+ "stoneage:sand_with_silex",
+ "sumpf:peat",
+ "sumpf:sumpf"
+ },
+ max_count = REEDMACE_IN_WATER_PER_MAPBLOCK,
+ rarity = 101 - REEDMACE_IN_WATER_RARITY,
+ --rarity = 35,
+ min_elevation = 0, -- a bit below sea level
+ max_elevation = 0, -- ""
+ near_nodes = {"default:water_source","sumpf:dirtywater_source"},
+ near_nodes_size = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_dryplants.grow_reedmace_water
+)
+-- for oases & tropical beaches & tropical swamps
+biome_lib:register_generate_plant({
+ surface = {
+ "default:sand",
+ "sumpf:sumpf"
+ },
+ max_count = REEDMACE_FOR_OASES_PER_MAPBLOCK,
+ rarity = 101 - REEDMACE_FOR_OASES_RARITY,
+ --rarity = 10,
+ neighbors = {"default:water_source","sumpf:dirtywater_source","sumpf:sumpf"},
+ ncount = 1,
+ min_elevation = 1, -- above sea level
+ near_nodes = {"default:desert_sand","sumpf:sumpf"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_dryplants.grow_reedmace
+)
diff --git a/plantlife_modpack/dryplants/settings.txt b/plantlife_modpack/dryplants/settings.txt
new file mode 100644
index 0000000..cc12a9c
--- /dev/null
+++ b/plantlife_modpack/dryplants/settings.txt
@@ -0,0 +1,52 @@
+-- Here you can enable/disable the different plants
+REEDMACE_GENERATES = true
+SMALL_JUNCUS_GENERATES = true
+EXTRA_TALL_GRASS_GENERATES = true
+
+
+
+-- Amount of Reedmace near water or swamp
+REEDMACE_NEAR_WATER_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number)
+REEDMACE_NEAR_WATER_RARITY = 40 -- percent
+
+-- Amount of Reedmace in water
+REEDMACE_IN_WATER_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number)
+REEDMACE_IN_WATER_RARITY = 65 -- percent
+
+-- Amount of Reedmace for oases, tropical beaches and tropical swamps
+REEDMACE_FOR_OASES_PER_MAPBLOCK = 35 -- plants per 80x80x80 nodes (absolute maximum number)
+REEDMACE_FOR_OASES_RARITY = 90 -- percent
+
+-- growing of reedmace sapling
+REEDMACE_GROWING_TIME = 600 -- seconds
+REEDMACE_GROWING_CHANCE = 5 -- percent
+
+
+
+-- Amount of small Juncus near water or swamp
+JUNCUS_NEAR_WATER_PER_MAPBLOCK = 70 -- plants per 80x80x80 nodes (absolute maximum number)
+JUNCUS_NEAR_WATER_RARITY = 75 -- percent
+
+-- Amount of small Juncus at dunes/beach
+JUNCUS_AT_BEACH_PER_MAPBLOCK = 70 -- plants per 80x80x80 nodes (absolute maximum number)
+JUNCUS_AT_BEACH_RARITY = 75 -- percent
+
+
+
+-- Tall Grass on dirt with grass
+TALL_GRASS_PER_MAPBLOCK = 4800 -- plants per 80x80x80 nodes (absolute maximum number)
+TALL_GRASS_RARITY = 75 -- percent
+
+
+
+-- short grass becomes dirt with grass again
+GRASS_REGROWING_TIME = 1200 -- seconds
+GRASS_REGROWING_CHANCE = 5 -- percent
+
+HAY_DRYING_TIME = 3600 -- seconds
+
+REED_WILL_DRY = false -- wet reed nodes will become dry reed nodes
+REED_DRYING_TIME = 3600 -- seconds
+
+AUTO_ROOF_CORNER = true
+
diff --git a/plantlife_modpack/dryplants/textures/default_grass_1.png b/plantlife_modpack/dryplants/textures/default_grass_1.png
new file mode 100644
index 0000000..8820e7e
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/default_grass_1.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/default_grass_2.png b/plantlife_modpack/dryplants/textures/default_grass_2.png
new file mode 100644
index 0000000..9929548
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/default_grass_2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/default_grass_3.png b/plantlife_modpack/dryplants/textures/default_grass_3.png
new file mode 100644
index 0000000..4d62f69
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/default_grass_3.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/default_grass_4.png b/plantlife_modpack/dryplants/textures/default_grass_4.png
new file mode 100644
index 0000000..8ad76c5
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/default_grass_4.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/default_grass_5.png b/plantlife_modpack/dryplants/textures/default_grass_5.png
new file mode 100644
index 0000000..799b0fd
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/default_grass_5.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_grass.png b/plantlife_modpack/dryplants/textures/dryplants_grass.png
new file mode 100644
index 0000000..cbd276e
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_grass.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_grass_short.png b/plantlife_modpack/dryplants/textures/dryplants_grass_short.png
new file mode 100644
index 0000000..30553aa
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_grass_short.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_grass_short_side.png b/plantlife_modpack/dryplants/textures/dryplants_grass_short_side.png
new file mode 100644
index 0000000..bc27507
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_grass_short_side.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_hay.png b/plantlife_modpack/dryplants/textures/dryplants_hay.png
new file mode 100644
index 0000000..600c508
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_hay.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_juncus_02.png b/plantlife_modpack/dryplants/textures/dryplants_juncus_02.png
new file mode 100644
index 0000000..2e4f840
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_juncus_02.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_juncus_03.png b/plantlife_modpack/dryplants/textures/dryplants_juncus_03.png
new file mode 100644
index 0000000..ff3d9c5
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_juncus_03.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_juncus_inv.png b/plantlife_modpack/dryplants/textures/dryplants_juncus_inv.png
new file mode 100644
index 0000000..d5b9dca
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_juncus_inv.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reed.png b/plantlife_modpack/dryplants/textures/dryplants_reed.png
new file mode 100644
index 0000000..b350a78
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reed.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reed_wet.png b/plantlife_modpack/dryplants/textures/dryplants_reed_wet.png
new file mode 100644
index 0000000..cd4488a
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reed_wet.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace.png
new file mode 100644
index 0000000..d14686f
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace_bottom.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace_bottom.png
new file mode 100644
index 0000000..d83c36d
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace_bottom.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_2.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_2.png
new file mode 100644
index 0000000..4ac816a
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_3.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_3.png
new file mode 100644
index 0000000..5cbd8d8
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_3.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_3_spikes.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_3_spikes.png
new file mode 100644
index 0000000..16a29b3
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace_height_3_spikes.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace_sapling.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace_sapling.png
new file mode 100644
index 0000000..04b8c1f
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace_sapling.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace_spikes.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace_spikes.png
new file mode 100644
index 0000000..4a23745
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace_spikes.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace_top.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace_top.png
new file mode 100644
index 0000000..8532ece
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace_top.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_reedmace_water.png b/plantlife_modpack/dryplants/textures/dryplants_reedmace_water.png
new file mode 100644
index 0000000..3ebf93c
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_reedmace_water.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/dryplants_sickle.png b/plantlife_modpack/dryplants/textures/dryplants_sickle.png
new file mode 100644
index 0000000..e496062
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/dryplants_sickle.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/big_pic_8.png b/plantlife_modpack/dryplants/textures/not_in_use/big_pic_8.png
new file mode 100644
index 0000000..aac9520
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/big_pic_8.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/big_pic_9.png b/plantlife_modpack/dryplants/textures/not_in_use/big_pic_9.png
new file mode 100644
index 0000000..1ebe95c
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/big_pic_9.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_cattailsG_m2.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_cattailsG_m2.png
new file mode 100644
index 0000000..0a2cae1
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_cattailsG_m2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_left.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_left.png
new file mode 100644
index 0000000..b771a55
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_left.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_right.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_right.png
new file mode 100644
index 0000000..a9f4b7e
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_right.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_whole2.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_whole2.png
new file mode 100644
index 0000000..67c3cb8
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_02_whole2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_left.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_left.png
new file mode 100644
index 0000000..dc8a33e
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_left.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_right.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_right.png
new file mode 100644
index 0000000..23b5cf3
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_right.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_whole2.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_whole2.png
new file mode 100644
index 0000000..d494ae4
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_juncus_03_whole2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_01.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_01.png
new file mode 100644
index 0000000..aaab5fe
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_01.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_02.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_02.png
new file mode 100644
index 0000000..5c8751a
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_02.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_03.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_03.png
new file mode 100644
index 0000000..342b8b8
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_03.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_04.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_04.png
new file mode 100644
index 0000000..a1d708d
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_04.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_bottom_left.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_bottom_left.png
new file mode 100644
index 0000000..643bbea
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_bottom_left.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_bottom_right.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_bottom_right.png
new file mode 100644
index 0000000..d415003
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_bottom_right.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_left.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_left.png
new file mode 100644
index 0000000..1a3bd92
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_left.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_right.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_right.png
new file mode 100644
index 0000000..b178d4a
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_right.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_top_left.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_top_left.png
new file mode 100644
index 0000000..18ae716
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_top_left.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_top_right.png b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_top_right.png
new file mode 100644
index 0000000..e511b24
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/dryplants_reedmace_top_right.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/reedmace2.png b/plantlife_modpack/dryplants/textures/not_in_use/reedmace2.png
new file mode 100644
index 0000000..ca505bd
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/reedmace2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/reedmace3.png b/plantlife_modpack/dryplants/textures/not_in_use/reedmace3.png
new file mode 100644
index 0000000..d2ec729
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/reedmace3.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/reedmace4.png b/plantlife_modpack/dryplants/textures/not_in_use/reedmace4.png
new file mode 100644
index 0000000..9ba759b
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/reedmace4.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/reedtest.png b/plantlife_modpack/dryplants/textures/not_in_use/reedtest.png
new file mode 100644
index 0000000..33822ef
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/reedtest.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/not_in_use/texturing.png b/plantlife_modpack/dryplants/textures/not_in_use/texturing.png
new file mode 100644
index 0000000..6a18fda
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/not_in_use/texturing.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_grass_short_old3.png b/plantlife_modpack/dryplants/textures/old/dryplants_grass_short_old3.png
new file mode 100644
index 0000000..f6f6c5b
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_grass_short_old3.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_grass_short_old4.png b/plantlife_modpack/dryplants/textures/old/dryplants_grass_short_old4.png
new file mode 100644
index 0000000..6e7611c
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_grass_short_old4.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_juncus_02_left_old.png b/plantlife_modpack/dryplants/textures/old/dryplants_juncus_02_left_old.png
new file mode 100644
index 0000000..ce49ec2
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_juncus_02_left_old.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_juncus_02_right_old.png b/plantlife_modpack/dryplants/textures/old/dryplants_juncus_02_right_old.png
new file mode 100644
index 0000000..e512a77
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_juncus_02_right_old.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_juncus_03_left_old.png b/plantlife_modpack/dryplants/textures/old/dryplants_juncus_03_left_old.png
new file mode 100644
index 0000000..7644a0d
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_juncus_03_left_old.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_juncus_03_right_old.png b/plantlife_modpack/dryplants/textures/old/dryplants_juncus_03_right_old.png
new file mode 100644
index 0000000..801cf23
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_juncus_03_right_old.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_left_old2.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_left_old2.png
new file mode 100644
index 0000000..7d25e49
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_left_old2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_old4.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_old4.png
new file mode 100644
index 0000000..a02b19b
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_old4.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_right_old2.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_right_old2.png
new file mode 100644
index 0000000..0b13beb
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_bottom_right_old2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_left_old2.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_left_old2.png
new file mode 100644
index 0000000..784d45d
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_left_old2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_old8.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_old8.png
new file mode 100644
index 0000000..1498b5f
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_old8.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_right_old2.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_right_old2.png
new file mode 100644
index 0000000..db758c4
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_right_old2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_spikes_old3.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_spikes_old3.png
new file mode 100644
index 0000000..207a747
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_spikes_old3.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_left_old2.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_left_old2.png
new file mode 100644
index 0000000..6d9afce
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_left_old2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_old3.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_old3.png
new file mode 100644
index 0000000..6eedad4
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_old3.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_right_old2.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_right_old2.png
new file mode 100644
index 0000000..333f587
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_top_right_old2.png
Binary files differ
diff --git a/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_water_old2.png b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_water_old2.png
new file mode 100644
index 0000000..6b10bff
--- /dev/null
+++ b/plantlife_modpack/dryplants/textures/old/dryplants_reedmace_water_old2.png
Binary files differ
diff --git a/plantlife_modpack/ferns/crafting.lua b/plantlife_modpack/ferns/crafting.lua
new file mode 100644
index 0000000..8d8b3ed
--- /dev/null
+++ b/plantlife_modpack/ferns/crafting.lua
@@ -0,0 +1,104 @@
+-----------------------------------------------------------------------------------------------
+-- Ferns - Crafting 0.0.5
+-----------------------------------------------------------------------------------------------
+-- (by Mossmanikin)
+-- License (everything): WTFPL
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({
+ type = "shapeless",
+ output = "ferns:fiddlehead 3",
+ recipe = {"ferns:fern_01"},
+ replacements = {
+ {"ferns:fern_01", "ferns:ferntuber"}
+ },
+})
+
+minetest.register_craft({
+ type = "shapeless",
+ output = "ferns:fiddlehead 3",
+ recipe = {"ferns:tree_fern_leaves"},
+ replacements = {
+ {"ferns:tree_fern_leaves", "ferns:sapling_tree_fern"}
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- FIDDLEHEAD
+-----------------------------------------------------------------------------------------------
+minetest.register_alias("archaeplantae:fiddlehead", "ferns:fiddlehead")
+
+minetest.register_craftitem("ferns:fiddlehead", {
+ description = "Fiddlehead",
+ inventory_image = "ferns_fiddlehead.png",
+ on_use = minetest.item_eat(-1), -- slightly poisonous when raw
+})
+minetest.register_craft({
+ type = "cooking",
+ output = "ferns:fiddlehead_roasted",
+ recipe = "ferns:fiddlehead",
+ cooktime = 1,
+})
+minetest.register_craftitem("ferns:fiddlehead_roasted", {
+ description = "Roasted Fiddlehead",
+ inventory_image = "ferns_fiddlehead_roasted.png",
+ on_use = minetest.item_eat(1), -- edible when cooked
+})
+-----------------------------------------------------------------------------------------------
+-- FERN TUBER
+-----------------------------------------------------------------------------------------------
+minetest.register_alias("archaeplantae:ferntuber", "ferns:ferntuber")
+
+minetest.register_craftitem("ferns:ferntuber", {
+ description = "Fern Tuber",
+ inventory_image = "ferns_ferntuber.png",
+})
+minetest.register_craft({
+ type = "cooking",
+ output = "ferns:ferntuber_roasted",
+ recipe = "ferns:ferntuber",
+ cooktime = 3,
+})
+
+minetest.register_alias("archaeplantae:ferntuber_roasted", "ferns:ferntuber_roasted")
+
+minetest.register_craftitem("ferns:ferntuber_roasted", {
+ description = "Roasted Fern Tuber",
+ inventory_image = "ferns_ferntuber_roasted.png",
+ on_use = minetest.item_eat(3),
+})
+-----------------------------------------------------------------------------------------------
+-- HORSETAIL (EQUISETUM) --> GREEN DYE https://en.wikipedia.org/wiki/Equisetum
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({
+ type = "shapeless",
+ output = "dye:green",
+ recipe = {"group:horsetail"},
+})
+-----------------------------------------------------------------------------------------------
+-- GLUE WOODEN TOOLS with RESIN & POLISH them with HORSETAIL (planned)
+-----------------------------------------------------------------------------------------------
+--[[minetest.register_craft({
+ type = "shapeless",
+ output = "default:pick_wood",
+ recipe = {"default:pick_wood","group:horsetail","farming:string","default:stick"},
+})
+minetest.register_craft({
+ type = "shapeless",
+ output = "default:shovel_wood",
+ recipe = {"default:shovel_wood","group:horsetail","farming:string","default:stick"},
+})
+minetest.register_craft({
+ type = "shapeless",
+ output = "default:axe_wood",
+ recipe = {"default:axe_wood","group:horsetail","farming:string","default:stick"},
+})
+minetest.register_craft({
+ type = "shapeless",
+ output = "default:sword_wood",
+ recipe = {"default:sword_wood","group:horsetail","farming:string","default:stick"},
+})
+minetest.register_craft({
+ type = "shapeless",
+ output = "farming:hoe_wood",
+ recipe = {"farming:hoe_wood","group:horsetail","farming:string","default:stick"},
+})]]
+
diff --git a/plantlife_modpack/ferns/depends.txt b/plantlife_modpack/ferns/depends.txt
new file mode 100644
index 0000000..9d994c0
--- /dev/null
+++ b/plantlife_modpack/ferns/depends.txt
@@ -0,0 +1,2 @@
+default
+biome_lib \ No newline at end of file
diff --git a/plantlife_modpack/ferns/fern.lua b/plantlife_modpack/ferns/fern.lua
new file mode 100644
index 0000000..51cac8f
--- /dev/null
+++ b/plantlife_modpack/ferns/fern.lua
@@ -0,0 +1,196 @@
+-----------------------------------------------------------------------------------------------
+-- Ferns - Fern 0.1.0
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: default, flowers, painting, trees
+-- Dependencies: biome_lib
+-- Supports: dryplants, stoneage, sumpf
+-----------------------------------------------------------------------------------------------
+-- some inspiration from here
+-- https://en.wikipedia.org/wiki/Athyrium_yokoscense
+-- http://www.mygarden.net.au/gardening/athyrium-yokoscense/3900/1
+-----------------------------------------------------------------------------------------------
+
+assert(abstract_ferns.config.enable_lady_fern == true)
+
+-- Maintain backward compatibilty
+minetest.register_alias("archaeplantae:fern", "ferns:fern_03")
+minetest.register_alias("archaeplantae:fern_mid", "ferns:fern_02")
+minetest.register_alias("archaeplantae:fern_small", "ferns:fern_01")
+minetest.register_alias("ferns:fern_04", "ferns:fern_02") -- for placing
+
+local nodenames = {}
+
+local function create_nodes()
+ local images = { "ferns_fern.png", "ferns_fern_mid.png", "ferns_fern_big.png" }
+ local vscales = { 1, 2, 2.2 }
+ local descs = { "Lady-fern (Athyrium)", nil, nil }
+
+ for i = 1, 3 do
+ local node_on_place = nil
+ if i == 1 then
+ node_on_place = function(itemstack, placer, pointed_thing)
+ -- place a random fern
+ local stack = ItemStack("ferns:fern_0"..math.random(1,4))
+ local ret = minetest.item_place(stack, placer, pointed_thing)
+ return ItemStack("ferns:fern_01 "..itemstack:get_count()-(1-ret:get_count())) -- TODO FIXME?
+ end
+ end
+ nodenames[i] = "ferns:fern_"..string.format("%02d", i)
+ minetest.register_node(nodenames[i], {
+ description = descs[i] or ("Lady-fern (Athyrium) " .. string.format("%02d", i)),
+ inventory_image = "ferns_fern.png",
+ drawtype = "plantlike",
+ visual_scale = vscales[i],
+ paramtype = "light",
+ tiles = { images[i] },
+ walkable = false,
+ buildable_to = true,
+ groups = {snappy=3,flammable=2,attached_node=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 = "ferns:fern_01",
+ on_place = node_on_place
+ })
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+-- Init
+-----------------------------------------------------------------------------------------------
+
+create_nodes()
+
+-----------------------------------------------------------------------------------------------
+-- Spawning
+-----------------------------------------------------------------------------------------------
+
+if abstract_ferns.config.lady_ferns_near_tree == true then
+ biome_lib:register_generate_plant({ -- near trees (woodlands)
+ surface = {
+ "default:dirt_with_grass",
+ "default:mossycobble",
+ "default:desert_sand",
+ "default:sand",
+ "default:jungletree",
+ "stoneage:grass_with_silex",
+ "sumpf:sumpf"
+ },
+ max_count = 30,
+ rarity = 62,--63,
+ min_elevation = 1, -- above sea level
+ near_nodes = {"group:tree"},
+ near_nodes_size = 3,--4,
+ near_nodes_vertical = 2,--3,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 0.4,
+ temp_max = -0.5, -- 55 °C (too hot?)
+ temp_min = 0.75, -- -12 °C
+ random_facedir = { 0, 179 },
+ },
+ nodenames
+ )
+end
+
+if abstract_ferns.config.lady_ferns_near_rock == true then
+ biome_lib:register_generate_plant({ -- near stone (mountains)
+ surface = {
+ "default:dirt_with_grass",
+ "default:mossycobble",
+ "group:falling_node",
+ --"default:jungletree",
+ "stoneage:grass_with_silex",
+ "sumpf:sumpf"
+ },
+ max_count = 35,
+ rarity = 40,
+ min_elevation = 1, -- above sea level
+ near_nodes = {"group:stone"},
+ near_nodes_size = 1,
+ near_nodes_count = 16,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 0.4,
+ temp_max = -0.5, -- 55 °C (too hot?)
+ temp_min = 0.75, -- -12 °C
+ random_facedir = { 0, 179 },
+ },
+ nodenames
+ )
+end
+
+if abstract_ferns.config.lady_ferns_near_ores == true then -- this one causes a huge fps drop
+ biome_lib:register_generate_plant({ -- near ores (potential mining sites)
+ surface = {
+ "default:dirt_with_grass",
+ "default:mossycobble",
+ "default:stone_with_coal",
+ "default:stone_with_iron",
+ "moreores:mineral_tin",
+ "moreores:mineral_silver",
+ "sumpf:sumpf"
+ },
+ max_count = 1200,--1600, -- maybe too much? :D
+ rarity = 25,--15,
+ min_elevation = 1, -- above sea level
+ near_nodes = {
+ "default:stone_with_iron",
+ --"default:stone_with_copper",
+ --"default:stone_with_mese",
+ --"default:stone_with_gold",
+ --"default:stone_with_diamond",
+ "moreores:mineral_tin",
+ "moreores:mineral_silver"
+ --"moreores:mineral_mithril"
+ },
+ near_nodes_size = 2,
+ near_nodes_vertical = 4,--5,--6,
+ near_nodes_count = 2,--3,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 0.4,
+ temp_max = -0.5, -- 55 °C (too hot?)
+ temp_min = 0.75, -- -12 °C
+ random_facedir = { 0, 179 },
+ },
+ nodenames
+ )
+end
+
+if abstract_ferns.config.lady_ferns_in_groups == true then -- this one is meant as a replacement of Ferns_near_Ores
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "default:mossycobble",
+ "default:stone_with_coal",
+ "default:stone_with_iron",
+ "moreores:mineral_tin",
+ "moreores:mineral_silver",
+ "sumpf:sumpf"
+ },
+ max_count = 70,
+ rarity = 25,--15,
+ min_elevation = 1, -- above sea level
+ near_nodes = {
+ "default:stone"
+ },
+ near_nodes_size = 2,
+ near_nodes_vertical = 2,--6,
+ near_nodes_count = 3,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 0.4,
+ temp_max = -0.5, -- 55 °C (too hot?)
+ temp_min = 0.75, -- -12 °C
+ random_facedir = { 0, 179 },
+ },
+ nodenames
+ )
+end
diff --git a/plantlife_modpack/ferns/gianttreefern.lua b/plantlife_modpack/ferns/gianttreefern.lua
new file mode 100644
index 0000000..bc6516b
--- /dev/null
+++ b/plantlife_modpack/ferns/gianttreefern.lua
@@ -0,0 +1,336 @@
+-----------------------------------------------------------------------------------------------
+-- Ferns - Giant Tree Fern 0.1.1
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: 4seasons, default
+-- Supports: vines
+-----------------------------------------------------------------------------------------------
+
+assert(abstract_ferns.config.enable_giant_treefern == true)
+
+-- lot of code, lot to load
+
+abstract_ferns.grow_giant_tree_fern = function(pos)
+ local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z}
+ if minetest.get_node(pos_01).name ~= "air"
+ and minetest.get_node(pos_01).name ~= "ferns:sapling_giant_tree_fern"
+ and minetest.get_node(pos_01).name ~= "default:junglegrass" then
+ return
+ end
+
+ local size = math.random(12,16) -- min of range must be >= 4
+
+ local leafchecks = {
+ {
+ direction = 3,
+ positions = {
+ {x = pos.x + 1, y = pos.y + size - 1, z = pos.z },
+ {x = pos.x + 2, y = pos.y + size , z = pos.z },
+ {x = pos.x + 3, y = pos.y + size - 1, z = pos.z },
+ {x = pos.x + 4, y = pos.y + size - 2, z = pos.z }
+ }
+ },
+ {
+ direction = 1,
+ positions = {
+ {x = pos.x - 1, y = pos.y + size - 1, z = pos.z },
+ {x = pos.x - 2, y = pos.y + size, z = pos.z },
+ {x = pos.x - 3, y = pos.y + size - 1, z = pos.z },
+ {x = pos.x - 4, y = pos.y + size - 2, z = pos.z }
+ }
+ },
+ {
+ direction = 2,
+ positions = {
+ {x = pos.x , y = pos.y + size - 1, z = pos.z + 1},
+ {x = pos.x , y = pos.y + size , z = pos.z + 2},
+ {x = pos.x , y = pos.y + size - 1, z = pos.z + 3},
+ {x = pos.x , y = pos.y + size - 2, z = pos.z + 4}
+ }
+ },
+ {
+ direction = 0,
+ positions = {
+ {x = pos.x , y = pos.y + size - 1, z = pos.z - 1},
+ {x = pos.x , y = pos.y + size , z = pos.z - 2},
+ {x = pos.x , y = pos.y + size - 1, z = pos.z - 3},
+ {x = pos.x , y = pos.y + size - 2, z = pos.z - 4}
+ }
+ }
+ }
+
+ for i = 1, size-3 do
+ minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, {name="ferns:fern_trunk_big"})
+ end
+ minetest.set_node({x = pos.x, y = pos.y + size-2, z = pos.z}, {name="ferns:fern_trunk_big_top"})
+ minetest.set_node({x = pos.x, y = pos.y + size-1, z = pos.z}, {name="ferns:tree_fern_leaves_giant"})
+
+ -- all the checking for air below is to prevent some ugly bugs (incomplete trunks of neighbouring trees), it's a bit slower, but worth the result
+
+ -- assert(#leafchecks == 4)
+ for i = 1, 4 do
+ local positions = leafchecks[i].positions
+ local rot = leafchecks[i].direction
+ local endpos = 4 -- If the loop below adds all intermediate leaves then the "terminating" leaf will be at positions[4]
+ -- assert(#positions == 4)
+ -- add leaves so long as the destination nodes are air
+ for j = 1, 3 do
+ if minetest.get_node(positions[j]).name == "air" then
+ minetest.set_node(positions[j], {name="ferns:tree_fern_leave_big"})
+ else
+ endpos = j
+ break
+ end
+ end
+ -- add the terminating leaf if required and possible
+ if endpos == 4 and minetest.get_node(positions[endpos]).name == "air" then
+ minetest.set_node(positions[endpos], {name="ferns:tree_fern_leave_big_end", param2=rot})
+ end
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN LEAVES
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:tree_fern_leaves_giant", {
+ description = "Tree Fern Crown (Dicksonia)",
+ drawtype = "plantlike",
+ visual_scale = math.sqrt(8),
+ wield_scale = {x=0.175, y=0.175, z=0.175},
+ paramtype = "light",
+ tiles = {"ferns_fern_tree_giant.png"},
+ inventory_image = "ferns_fern_tree.png",
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2,
+ attached_node=1,
+ not_in_creative_inventory=1
+ },
+ drop = {
+ max_items = 2,
+ items = {
+ {
+ -- occasionally, drop a second sapling instead of leaves
+ -- (extra saplings can also be obtained by replanting and
+ -- reharvesting leaves)
+ items = {"ferns:sapling_giant_tree_fern"},
+ rarity = 10,
+ },
+ {
+ items = {"ferns:sapling_giant_tree_fern"},
+ },
+ {
+ items = {"ferns:tree_fern_leaves_giant"},
+ }
+ }
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN LEAVE PART
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:tree_fern_leave_big", {
+ description = "Giant Tree Fern Leaves",
+ drawtype = "raillike",
+ paramtype = "light",
+ tiles = {
+ "ferns_tree_fern_leave_big.png",
+ },
+ walkable = false,
+ groups = {
+ snappy=3,
+ flammable=2,
+ attached_node=1,
+ not_in_creative_inventory=1
+ },
+ drop = "",
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN LEAVE END
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:tree_fern_leave_big_end", {
+ description = "Giant Tree Fern Leave End",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = { "ferns_tree_fern_leave_big_end.png" },
+ walkable = false,
+ node_box = {
+ type = "fixed",
+-- {left, bottom, front, right, top, back }
+ fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, 1/2, 1/2, 33/64, 1/2},
+ },
+ groups = {
+ snappy=3,
+ flammable=2,
+ attached_node=1,
+ not_in_creative_inventory=1
+ },
+ drop = "",
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN TRUNK TOP
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:fern_trunk_big_top", {
+ description = "Giant Fern Trunk",
+ drawtype = "nodebox",
+ paramtype = "light",
+ tiles = {
+ "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png",
+ "ferns_fern_trunk_big_top.png^ferns_tree_fern_leave_big_cross.png",
+ "ferns_fern_trunk_big.png"
+ },
+ node_box = {
+ type = "fixed",
+-- {left, bottom, front, right, top, back }
+ fixed = {
+ {-1/2, 33/64, -1/2, 1/2, 33/64, 1/2},
+ {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ groups = {
+ tree=1,
+ choppy=2,
+ oddly_breakable_by_hand=2,
+ flammable=3,
+ wood=1,
+ not_in_creative_inventory=1,
+ leafdecay=3 -- to support vines
+ },
+ drop = "ferns:fern_trunk_big",
+ sounds = default.node_sound_wood_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN TRUNK
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:fern_trunk_big", {
+ description = "Giant Fern Trunk",
+ drawtype = "nodebox",
+ paramtype = "light",
+ tiles = {
+ "ferns_fern_trunk_big_top.png",
+ "ferns_fern_trunk_big_top.png",
+ "ferns_fern_trunk_big.png"
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+ after_destruct = function(pos,oldnode)
+ local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
+ if node.name == "ferns:fern_trunk_big" or node.name == "ferns:fern_trunk_big_top" then
+ minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
+ minetest.add_item(pos,"ferns:fern_trunk_big")
+ end
+ end,
+})
+
+-----------------------------------------------------------------------------------------------
+-- GIANT TREE FERN SAPLING
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:sapling_giant_tree_fern", {
+ description = "Giant Tree Fern Sapling",
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {"ferns_sapling_tree_fern_giant.png"},
+ inventory_image = "ferns_sapling_tree_fern_giant.png",
+ walkable = false,
+ groups = {snappy=3,flammable=2,flora=1,attached_node=1},
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+
+-- abm
+minetest.register_abm({
+ nodenames = "ferns:sapling_giant_tree_fern",
+ interval = 1000,
+ chance = 4,
+ action = function(pos, node, _, _)
+ abstract_ferns.grow_giant_tree_fern({x = pos.x, y = pos.y-1, z = pos.z})
+ end
+})
+
+-----------------------------------------------------------------------------------------------
+-- GENERATE GIANT TREE FERN
+-----------------------------------------------------------------------------------------------
+
+-- in jungles
+if abstract_ferns.config.enable_giant_treeferns_in_jungle == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "default:sand",
+ "default:desert_sand"--,
+ --"dryplants:grass_short"
+ },
+ max_count = 12,--27,
+ avoid_nodes = {"group:tree"},
+ avoid_radius = 3,--4,
+ rarity = 85,
+ seed_diff = 329,
+ min_elevation = 1,
+ near_nodes = {"default:jungletree"},
+ near_nodes_size = 6,
+ near_nodes_vertical = 2,--4,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_ferns.grow_giant_tree_fern
+ )
+end
+
+-- for oases & tropical beaches
+if abstract_ferns.config.enable_giant_treeferns_in_oases == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:sand"--,
+ --"default:desert_sand"
+ },
+ max_count = 10,--27,
+ rarity = 90,
+ seed_diff = 329,
+ neighbors = {"default:desert_sand"},
+ ncount = 1,
+ min_elevation = 1,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 1.0,
+ temp_max = -1.0,
+ temp_min = 1.0,
+ },
+ abstract_ferns.grow_giant_tree_fern
+ )
+end
diff --git a/plantlife_modpack/ferns/horsetail.lua b/plantlife_modpack/ferns/horsetail.lua
new file mode 100644
index 0000000..b87f1f9
--- /dev/null
+++ b/plantlife_modpack/ferns/horsetail.lua
@@ -0,0 +1,156 @@
+-----------------------------------------------------------------------------------------------
+-- Archae Plantae - Horsetail 0.0.5
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: default, flowers, trees
+-- Dependencies: biome_lib
+-- Supports: dryplants, stoneage, sumpf
+-----------------------------------------------------------------------------------------------
+
+assert(abstract_ferns.config.enable_horsetails == true)
+
+-----------------------------------------------------------------------------------------------
+-- HORSETAIL (EQUISETUM)
+-----------------------------------------------------------------------------------------------
+
+local node_names = {}
+
+local function create_nodes()
+ local selection_boxes = {
+ { -0.15, -1/2, -0.15, 0.15, -1/16, 0.15 },
+ { -0.15, -1/2, -0.15, 0.15, 1/16, 0.15 },
+ { -0.15, -1/2, -0.15, 0.15, 4/16, 0.15 },
+ { -0.15, -1/2, -0.15, 0.15, 7/16, 0.15 },
+ }
+
+ for i = 1, 4 do
+ local node_name = "ferns:horsetail_" .. string.format("%02d", i)
+ local node_img = "ferns_horsetail_" .. string.format("%02d", i) .. ".png"
+ local node_desc
+ local node_on_use = nil
+ local node_drop = "ferns:horsetail_04"
+
+ if i == 1 then
+ node_desc = "Young Horsetail (Equisetum)"
+ node_on_use = minetest.item_eat(1) -- young ones edible https://en.wikipedia.org/wiki/Equisetum
+ node_drop = node_name
+ elseif i == 4 then
+ node_desc = "Horsetail (Equisetum)"
+ else
+ node_desc = "Horsetail (Equisetum) ".. string.format("%02d", i)
+ end
+
+ node_names[i] = node_name
+
+ minetest.register_node(node_name, {
+ description = node_desc,
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = { node_img },
+ inventory_image = node_img,
+ walkable = false,
+ buildable_to = true,
+ groups = {snappy=3,flammable=2,attached_node=1,horsetail=1},
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = selection_boxes[i],
+ },
+ on_use = node_on_use,
+ drop = node_drop,
+ })
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+-- Init
+-----------------------------------------------------------------------------------------------
+
+create_nodes()
+
+-----------------------------------------------------------------------------------------------
+-- Spawning
+-----------------------------------------------------------------------------------------------
+if abstract_ferns.config.enable_horsetails_spawning == true then
+ biome_lib:spawn_on_surfaces({
+ spawn_delay = 1200,
+ spawn_plants = node_names,
+ spawn_chance = 400,
+ spawn_surfaces = {
+ "default:dirt_with_grass",
+ "default:desert_sand",
+ "default:sand",
+ "dryplants:grass_short",
+ "stoneage:grass_with_silex",
+ "default:mossycobble",
+ "default:gravel"
+ },
+ seed_diff = 329,
+ min_elevation = 1, -- above sea level
+ near_nodes = {"default:water_source","default:gravel"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ --random_facedir = { 0, 179 },
+ })
+end
+
+-----------------------------------------------------------------------------------------------
+-- Generating
+-----------------------------------------------------------------------------------------------
+
+if abstract_ferns.config.enable_horsetails_on_grass == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "sumpf:sumpf"
+ },
+ max_count = 35,
+ rarity = 40,
+ min_elevation = 1, -- above sea level
+ near_nodes = {
+ "group:water", -- likes water (of course)
+ "default:gravel", -- near those on gravel
+ "default:sand", -- some like sand
+ "default:clay", -- some like clay
+ "stoneage:grass_with_silex",
+ "default:mossycobble",
+ "default:cobble",
+ "sumpf:sumpf"
+ },
+ near_nodes_size = 3,
+ near_nodes_vertical = 2,--3,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ humidity_min = 0.4,
+ temp_max = -0.5, -- 55 °C
+ temp_min = 0.53, -- 0 °C, dies back in winter
+ --random_facedir = { 0, 179 },
+ },
+ node_names
+ )
+end
+
+if abstract_ferns.config.enable_horsetails_on_stones == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:gravel", -- roots go deep
+ "default:mossycobble",
+ "stoneage:dirt_with_silex",
+ "stoneage:grass_with_silex",
+ "stoneage:sand_with_silex", -- roots go deep
+ },
+ max_count = 35,
+ rarity = 20,
+ min_elevation = 1, -- above sea level
+ plantlife_limit = -0.9,
+ humidity_min = 0.4,
+ temp_max = -0.5, -- 55 °C
+ temp_min = 0.53, -- 0 °C, dies back in winter
+ --random_facedir = { 0, 179 },
+ },
+ node_names
+ )
+end
diff --git a/plantlife_modpack/ferns/init.lua b/plantlife_modpack/ferns/init.lua
new file mode 100644
index 0000000..b629d5d
--- /dev/null
+++ b/plantlife_modpack/ferns/init.lua
@@ -0,0 +1,69 @@
+-----------------------------------------------------------------------------------------------
+local title = "Ferns" -- former "Archae Plantae"
+local version = "0.2.0"
+local mname = "ferns" -- former "archaeplantae"
+-----------------------------------------------------------------------------------------------
+-- (by Mossmanikin)
+-- License (everything): WTFPL
+-----------------------------------------------------------------------------------------------
+
+abstract_ferns = {}
+
+dofile(minetest.get_modpath("ferns").."/settings.lua")
+
+if abstract_ferns.config.enable_lady_fern == true then
+ dofile(minetest.get_modpath("ferns").."/fern.lua")
+end
+
+if abstract_ferns.config.enable_horsetails == true then
+ dofile(minetest.get_modpath("ferns").."/horsetail.lua")
+end
+
+if abstract_ferns.config.enable_treefern == true then
+ dofile(minetest.get_modpath("ferns").."/treefern.lua")
+end
+
+if abstract_ferns.config.enable_giant_treefern == true then
+ dofile(minetest.get_modpath("ferns").."/gianttreefern.lua")
+end
+
+dofile(minetest.get_modpath("ferns").."/crafting.lua")
+
+
+-----------------------------------------------------------------------------
+-- TESTS
+-----------------------------------------------------------------------------
+local run_tests = true -- set to false to skip
+
+if run_tests then
+
+ -- These are, essentially, unit tests to make sure that all required item
+ -- strings are registered. The init sequence is not time critical so leaving
+ -- them here won't affect performance.
+
+ -- Check node names
+ if abstract_ferns.config.enable_horsetails then
+ print("[Mod] " ..title.. " Checking horsetail item strings")
+ assert(minetest.registered_items["ferns:horsetail_01"] ~= nil)
+ assert(minetest.registered_items["ferns:horsetail_02"] ~= nil)
+ assert(minetest.registered_items["ferns:horsetail_03"] ~= nil)
+ assert(minetest.registered_items["ferns:horsetail_04"] ~= nil)
+ end
+ if abstract_ferns.config.enable_lady_fern then
+ print("[Mod] ".. title .." Checking lady fern item strings")
+ assert(minetest.registered_items["ferns:fern_01"] ~= nil)
+ assert(minetest.registered_items["ferns:fern_02"] ~= nil)
+ assert(minetest.registered_items["ferns:fern_03"] ~= nil)
+ end
+ if abstract_ferns.config.enable_treefern then
+ print("[Mod] ".. title .." Checking tree fern item strings")
+ assert(minetest.registered_items["ferns:tree_fern_leaves"] ~= nil)
+ assert(minetest.registered_items["ferns:tree_fern_leaves_02"] ~= nil)
+ assert(minetest.registered_items["ferns:fern_trunk"] ~= nil)
+ assert(minetest.registered_items["ferns:sapling_tree_fern"] ~= nil)
+ end
+end
+
+-----------------------------------------------------------------------------------------------
+print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
+-----------------------------------------------------------------------------------------------
diff --git a/plantlife_modpack/ferns/settings.lua b/plantlife_modpack/ferns/settings.lua
new file mode 100644
index 0000000..8254fcf
--- /dev/null
+++ b/plantlife_modpack/ferns/settings.lua
@@ -0,0 +1,43 @@
+-- In case you don't wanna have errors:
+
+-- Only change what's behind a "=" (or "--").
+-- Don't use caps (behind a "=").
+
+-- If there's a "false" (behind a "=") you can change it to "true" (and the other way around).
+-- Spelling is important.
+-- If "true" or "false" is necessary as setting, everything(!) which is not spelled "true" will be read as if it were "false" (even "1", "True"...)
+
+-- If you wanna comment something (for example to remember the default value), you can do this by putting "--" in front of the comment.
+-- You can put "--" at the end of a line with "=" in it, or at the beginning of an empty/new line (minetest will ignore what's behind it then).
+-- But don't put "--" in front of a line with "=" in it (or else minetest will ignore the setting and you might get an error).
+
+-- If something is still unclear, don't hesitate to post your question @ https://forum.minetest.net/viewtopic.php?id=6921
+
+abstract_ferns.config = {}
+
+-- Which plants should generate/spawn?
+abstract_ferns.config.enable_lady_fern = true
+abstract_ferns.config.enable_horsetails = true
+abstract_ferns.config.enable_treefern = true
+abstract_ferns.config.enable_giant_treefern = true
+
+-- Where should they generate/spawn? (if they generate/spawn)
+--
+-- Lady-Fern
+abstract_ferns.config.lady_ferns_near_tree = true
+abstract_ferns.config.lady_ferns_near_rock = true
+abstract_ferns.config.lady_ferns_near_ores = true -- if there's a bunch of ferns there's ores nearby, this one causes a huge fps drop
+abstract_ferns.config.lady_ferns_in_groups = false -- this one is meant as a replacement of Ferns_near_Ores: ferns tend to generate in groups, less fps drop, no hint for nearby ores
+--
+-- Horsetails
+abstract_ferns.config.enable_horsetails_spawning = false -- horsetails will grow in already explored areas, over time, near water or gravel
+abstract_ferns.config.enable_horsetails_on_grass = true -- on dirt with grass and swamp (sumpf mod)
+abstract_ferns.config.enable_horsetails_on_stones = true -- on gravel, mossy cobble and silex (stoneage mod)
+--
+-- Tree_Fern
+abstract_ferns.config.enable_treeferns_in_jungle = true
+abstract_ferns.config.enable_treeferns_in_oases = true -- for oases and tropical beaches
+--
+-- Giant_Tree_Fern
+abstract_ferns.config.enable_giant_treeferns_in_jungle = true
+abstract_ferns.config.enable_giant_treeferns_in_oases = true -- for oases and tropical beaches
diff --git a/plantlife_modpack/ferns/textures/ferns_5.png b/plantlife_modpack/ferns/textures/ferns_5.png
new file mode 100644
index 0000000..7e40665
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_5.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_6.png b/plantlife_modpack/ferns/textures/ferns_6.png
new file mode 100644
index 0000000..107bbf6
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_6.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_7.png b/plantlife_modpack/ferns/textures/ferns_7.png
new file mode 100644
index 0000000..b1ac1f5
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_7.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_8.png b/plantlife_modpack/ferns/textures/ferns_8.png
new file mode 100644
index 0000000..db5510b
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_8.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern.png b/plantlife_modpack/ferns/textures/ferns_fern.png
new file mode 100644
index 0000000..7884e5a
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_big.png b/plantlife_modpack/ferns/textures/ferns_fern_big.png
new file mode 100644
index 0000000..42deb95
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_big.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_mid.png b/plantlife_modpack/ferns/textures/ferns_fern_mid.png
new file mode 100644
index 0000000..3213308
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_mid.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_tree.png b/plantlife_modpack/ferns/textures/ferns_fern_tree.png
new file mode 100644
index 0000000..8daeafd
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_tree.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_tree_giant.png b/plantlife_modpack/ferns/textures/ferns_fern_tree_giant.png
new file mode 100644
index 0000000..2e3adb7
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_tree_giant.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_tree_inv.png b/plantlife_modpack/ferns/textures/ferns_fern_tree_inv.png
new file mode 100644
index 0000000..5417669
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_tree_inv.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_tree_tl.png b/plantlife_modpack/ferns/textures/ferns_fern_tree_tl.png
new file mode 100644
index 0000000..16b6e3a
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_tree_tl.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_tree_tr.png b/plantlife_modpack/ferns/textures/ferns_fern_tree_tr.png
new file mode 100644
index 0000000..768430f
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_tree_tr.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_trunk.png b/plantlife_modpack/ferns/textures/ferns_fern_trunk.png
new file mode 100644
index 0000000..a8e1bf6
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_trunk.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_trunk_big.png b/plantlife_modpack/ferns/textures/ferns_fern_trunk_big.png
new file mode 100644
index 0000000..24ede0a
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_trunk_big.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_trunk_big_top.png b/plantlife_modpack/ferns/textures/ferns_fern_trunk_big_top.png
new file mode 100644
index 0000000..3e3c829
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_trunk_big_top.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fern_trunk_top.png b/plantlife_modpack/ferns/textures/ferns_fern_trunk_top.png
new file mode 100644
index 0000000..8b259cc
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fern_trunk_top.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_ferntuber.png b/plantlife_modpack/ferns/textures/ferns_ferntuber.png
new file mode 100644
index 0000000..2d6785d
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_ferntuber.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_ferntuber_roasted.png b/plantlife_modpack/ferns/textures/ferns_ferntuber_roasted.png
new file mode 100644
index 0000000..f62a88d
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_ferntuber_roasted.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fiddlehead.png b/plantlife_modpack/ferns/textures/ferns_fiddlehead.png
new file mode 100644
index 0000000..0925c78
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fiddlehead.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_fiddlehead_roasted.png b/plantlife_modpack/ferns/textures/ferns_fiddlehead_roasted.png
new file mode 100644
index 0000000..9f4943c
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_fiddlehead_roasted.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_horsetail_01.png b/plantlife_modpack/ferns/textures/ferns_horsetail_01.png
new file mode 100644
index 0000000..60d3ca6
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_horsetail_01.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_horsetail_02.png b/plantlife_modpack/ferns/textures/ferns_horsetail_02.png
new file mode 100644
index 0000000..3c7edf7
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_horsetail_02.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_horsetail_03.png b/plantlife_modpack/ferns/textures/ferns_horsetail_03.png
new file mode 100644
index 0000000..5d28a46
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_horsetail_03.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_horsetail_04.png b/plantlife_modpack/ferns/textures/ferns_horsetail_04.png
new file mode 100644
index 0000000..a8254ed
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_horsetail_04.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_sapling_tree_fern.png b/plantlife_modpack/ferns/textures/ferns_sapling_tree_fern.png
new file mode 100644
index 0000000..b459d48
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_sapling_tree_fern.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_sapling_tree_fern_giant.png b/plantlife_modpack/ferns/textures/ferns_sapling_tree_fern_giant.png
new file mode 100644
index 0000000..e556016
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_sapling_tree_fern_giant.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big.png b/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big.png
new file mode 100644
index 0000000..09cc001
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big_cross.png b/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big_cross.png
new file mode 100644
index 0000000..48f7e2c
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big_cross.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big_end.png b/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big_end.png
new file mode 100644
index 0000000..d0064fe
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/ferns_tree_fern_leave_big_end.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/archaeplantae_horsetails.png b/plantlife_modpack/ferns/textures/not_in_use/archaeplantae_horsetails.png
new file mode 100644
index 0000000..6ba89c1
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/archaeplantae_horsetails.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/big picture 3.png b/plantlife_modpack/ferns/textures/not_in_use/big picture 3.png
new file mode 100644
index 0000000..de344e6
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/big picture 3.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_big_left.png b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_big_left.png
new file mode 100644
index 0000000..0fdf515
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_big_left.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_big_right.png b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_big_right.png
new file mode 100644
index 0000000..d30def0
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_big_right.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_mid_left.png b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_mid_left.png
new file mode 100644
index 0000000..d146df3
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_mid_left.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_mid_right.png b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_mid_right.png
new file mode 100644
index 0000000..e10460a
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_mid_right.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_tree_bl.png b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_tree_bl.png
new file mode 100644
index 0000000..e2fdb67
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_tree_bl.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_tree_br.png b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_tree_br.png
new file mode 100644
index 0000000..eb547e8
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_tree_br.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png
new file mode 100644
index 0000000..7a12671
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/not_in_use/ferns_fern_trunk_big_crown.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/archaeplantae_fern_old4.png b/plantlife_modpack/ferns/textures/old/archaeplantae_fern_old4.png
new file mode 100644
index 0000000..a3d403c
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/archaeplantae_fern_old4.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/comb.png b/plantlife_modpack/ferns/textures/old/comb.png
new file mode 100644
index 0000000..ea1e19f
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/comb.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_5_old.png b/plantlife_modpack/ferns/textures/old/ferns_5_old.png
new file mode 100644
index 0000000..5676278
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_5_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_6_old.png b/plantlife_modpack/ferns/textures/old/ferns_6_old.png
new file mode 100644
index 0000000..36d6040
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_6_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_7_old.png b/plantlife_modpack/ferns/textures/old/ferns_7_old.png
new file mode 100644
index 0000000..8aabe61
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_7_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_fern_big_old.png b/plantlife_modpack/ferns/textures/old/ferns_fern_big_old.png
new file mode 100644
index 0000000..d17ed11
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_fern_big_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_fern_mid_old.png b/plantlife_modpack/ferns/textures/old/ferns_fern_mid_old.png
new file mode 100644
index 0000000..08513c2
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_fern_mid_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_fern_tree_old.png b/plantlife_modpack/ferns/textures/old/ferns_fern_tree_old.png
new file mode 100644
index 0000000..4599672
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_fern_tree_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_old2.png b/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_old2.png
new file mode 100644
index 0000000..a048ee0
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_old2.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_top_old.png b/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_top_old.png
new file mode 100644
index 0000000..d83151f
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_top_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_top_old2.png b/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_top_old2.png
new file mode 100644
index 0000000..244ddfe
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_big_top_old2.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_top_old.png b/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_top_old.png
new file mode 100644
index 0000000..872fdab
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_fern_trunk_top_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_horsetail_01_old2.png b/plantlife_modpack/ferns/textures/old/ferns_horsetail_01_old2.png
new file mode 100644
index 0000000..7d55718
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_horsetail_01_old2.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_horsetail_02_old2.png b/plantlife_modpack/ferns/textures/old/ferns_horsetail_02_old2.png
new file mode 100644
index 0000000..d0b5563
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_horsetail_02_old2.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_horsetail_03_old2.png b/plantlife_modpack/ferns/textures/old/ferns_horsetail_03_old2.png
new file mode 100644
index 0000000..42cf76e
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_horsetail_03_old2.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_horsetail_04_old2.png b/plantlife_modpack/ferns/textures/old/ferns_horsetail_04_old2.png
new file mode 100644
index 0000000..600ebe7
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_horsetail_04_old2.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png b/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png
new file mode 100644
index 0000000..00ec9d8
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_cross_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png b/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png
new file mode 100644
index 0000000..ce1a87d
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_end_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_old.png b/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_old.png
new file mode 100644
index 0000000..b568383
--- /dev/null
+++ b/plantlife_modpack/ferns/textures/old/ferns_tree_fern_leave_big_old.png
Binary files differ
diff --git a/plantlife_modpack/ferns/treefern.lua b/plantlife_modpack/ferns/treefern.lua
new file mode 100644
index 0000000..4ba502b
--- /dev/null
+++ b/plantlife_modpack/ferns/treefern.lua
@@ -0,0 +1,228 @@
+-----------------------------------------------------------------------------------------------
+-- Ferns - Tree Fern 0.1.1
+-----------------------------------------------------------------------------------------------
+-- by Mossmanikin
+-- License (everything): WTFPL
+-- Contains code from: biome_lib
+-- Looked at code from: default , trees
+-----------------------------------------------------------------------------------------------
+
+assert(abstract_ferns.config.enable_treefern == true)
+
+abstract_ferns.grow_tree_fern = function(pos)
+
+ local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z}
+ if minetest.get_node(pos_01).name ~= "air"
+ and minetest.get_node(pos_01).name ~= "ferns:sapling_tree_fern"
+ and minetest.get_node(pos_01).name ~= "default:junglegrass" then
+ return
+ end
+
+ local size = math.random(1, 4) + math.random(1, 4)
+ if (size > 5) then
+ size = 10 - size
+ end
+ size = size + 1
+ local crown = ({ "ferns:tree_fern_leaves", "ferns:tree_fern_leaves_02" })[math.random(1, 2)]
+
+ local i = 1
+ while (i < size-1) do
+ if minetest.get_node({x = pos.x, y = pos.y + i + 1, z = pos.z}).name ~= "air" then
+ break
+ end
+ minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, { name = "ferns:fern_trunk" })
+ i = i + 1
+ end
+
+ minetest.set_node({x = pos.x, y = pos.y + i, z = pos.z}, { name = crown })
+end
+
+-----------------------------------------------------------------------------------------------
+-- TREE FERN LEAVES
+-----------------------------------------------------------------------------------------------
+
+-- TODO: Both of these nodes look the same?
+
+minetest.register_node("ferns:tree_fern_leaves", {
+ description = "Tree Fern Crown (Dicksonia)",
+ drawtype = "plantlike",
+ visual_scale = 2,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ --tiles = {"[combine:32x32:0,0=top_left.png:0,16=bottom_left.png:16,0=top_right.png:16,16=bottom_right.png"},
+ tiles = {"ferns_fern_tree.png"},
+ inventory_image = "ferns_fern_tree_inv.png",
+ walkable = false,
+ groups = {snappy=3,flammable=2,attached_node=1},
+ drop = {
+ max_items = 2,
+ items = {
+ {
+ -- occasionally, drop a second sapling instead of leaves
+ -- (extra saplings can also be obtained by replanting and
+ -- reharvesting leaves)
+ items = {"ferns:sapling_tree_fern"},
+ rarity = 10,
+ },
+ {
+ items = {"ferns:sapling_tree_fern"},
+ },
+ {
+ items = {"ferns:tree_fern_leaves"},
+ }
+ }
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+minetest.register_node("ferns:tree_fern_leaves_02", {
+ drawtype = "plantlike",
+ visual_scale = 2,
+ paramtype = "light",
+ tiles = {"ferns_fern_big.png"},
+ walkable = false,
+ groups = {snappy=3,flammable=2,attached_node=1,not_in_creative_inventory=1},
+ drop = {
+ max_items = 2,
+ items = {
+ {
+ -- occasionally, drop a second sapling instead of leaves
+ -- (extra saplings can also be obtained by replanting and
+ -- reharvesting leaves)
+ items = {"ferns:sapling_tree_fern"},
+ rarity = 10,
+ },
+ {
+ items = {"ferns:sapling_tree_fern"},
+ },
+ {
+ items = {"ferns:tree_fern_leaves"},
+ }
+ }
+ },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+-----------------------------------------------------------------------------------------------
+-- FERN TRUNK
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:fern_trunk", {
+ description = "Fern Trunk (Dicksonia)",
+ drawtype = "nodebox",
+ paramtype = "light",
+ tiles = {
+ "ferns_fern_trunk_top.png",
+ "ferns_fern_trunk_top.png",
+ "ferns_fern_trunk.png"
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+ },
+ groups = {tree=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+ after_destruct = function(pos,oldnode)
+ local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
+ if node.name == "ferns:fern_trunk" then
+ minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
+ minetest.add_item(pos,"ferns:fern_trunk")
+ end
+ end,
+})
+
+-----------------------------------------------------------------------------------------------
+-- TREE FERN SAPLING
+-----------------------------------------------------------------------------------------------
+minetest.register_node("ferns:sapling_tree_fern", {
+ description = "Tree Fern Sapling (Dicksonia)",
+ drawtype = "plantlike",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"ferns_sapling_tree_fern.png"},
+ inventory_image = "ferns_sapling_tree_fern.png",
+ walkable = false,
+ groups = {snappy=3,flammable=2,flora=1,attached_node=1},
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-7/16, -1/2, -7/16, 7/16, 0, 7/16},
+ },
+})
+-- abm
+minetest.register_abm({
+ nodenames = "ferns:sapling_tree_fern",
+ interval = 1000,
+ chance = 4,
+ action = function(pos, node, _, _)
+ abstract_ferns.grow_tree_fern({x = pos.x, y = pos.y-1, z = pos.z})
+ end
+})
+
+-----------------------------------------------------------------------------------------------
+-- GENERATE TREE FERN
+-----------------------------------------------------------------------------------------------
+
+-- in jungles
+if abstract_ferns.config.enable_treeferns_in_jungle == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "default:sand",
+ "default:desert_sand",
+ },
+ max_count = 35,--27,
+ avoid_nodes = {"default:tree"},
+ avoid_radius = 4,
+ rarity = 50,
+ seed_diff = 329,
+ min_elevation = -10,
+ near_nodes = {"default:jungletree"},
+ near_nodes_size = 6,
+ near_nodes_vertical = 2,--4,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 0.4,
+ temp_max = -0.5,
+ temp_min = 0.13,
+ },
+ abstract_ferns.grow_tree_fern
+ )
+end
+
+-- for oases & tropical beaches
+if abstract_ferns.config.enable_treeferns_in_oases == true then
+ biome_lib:register_generate_plant({
+ surface = {
+ "default:sand"--,
+ --"default:desert_sand"
+ },
+ max_count = 35,
+ rarity = 50,
+ seed_diff = 329,
+ neighbors = {"default:desert_sand"},
+ ncount = 1,
+ min_elevation = 1,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ humidity_max = -1.0,
+ humidity_min = 1.0,
+ temp_max = -1.0,
+ temp_min = 1.0,
+ },
+ abstract_ferns.grow_tree_fern
+)
+end
diff --git a/plantlife_modpack/flowers_plus/depends.txt b/plantlife_modpack/flowers_plus/depends.txt
new file mode 100644
index 0000000..37952da
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/depends.txt
@@ -0,0 +1,2 @@
+biome_lib
+farming?
diff --git a/plantlife_modpack/flowers_plus/flowers-changelog.txt b/plantlife_modpack/flowers_plus/flowers-changelog.txt
new file mode 100644
index 0000000..fbe7518
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/flowers-changelog.txt
@@ -0,0 +1,24 @@
+Changelog
+---------
+
+2012-08-06: Tweaked selection boxes on all nodes. Tweaked seaweed to use
+signlike instead of raillike drawtype, (still forced to only spawn flat as
+usual). Adjusted light level limits to give it more time to grow. Created
+this changelog file using github commit messages as the basis. Shrunk the
+geranium flower down a bit to better match the others.
+
+2012-08-03: Tuned out the random-numbers-inside-ABM stuff. Uses the ABM's
+chance setting instead. Should be approximately the same as before, but
+hopefully using a tad less CPU. Minor tweak to ABM interval/growing delay.
+
+2012-08-01: Added blue geranium to the collection of flowers.
+
+2012-07-31: Disable debug by default.
+
+2012-07-30: many updates over the course of the day - first commit, removed
+some redundant files, added wield/inventory image entries for each item, to
+force the game to draw them properly (these shouldn't be needed, must be a
+bug). Tweaked spawn code so that the radius check also includes the name of
+the item being spawned as well as items in group:flower, that way all items can
+have a radius test, and not just those in group:flower. Fiddled with the spawn
+rates a bit.
diff --git a/plantlife_modpack/flowers_plus/init.lua b/plantlife_modpack/flowers_plus/init.lua
new file mode 100644
index 0000000..f8aa93d
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/init.lua
@@ -0,0 +1,479 @@
+local S = biome_lib.intllib
+
+-- This file supplies a few additional plants and some related crafts
+-- for the plantlife modpack. Last revision: 2013-04-24
+
+flowers_plus = {}
+
+local SPAWN_DELAY = 1000
+local SPAWN_CHANCE = 200
+local flowers_seed_diff = 329
+local lilies_max_count = 320
+local lilies_rarity = 33
+local seaweed_max_count = 320
+local seaweed_rarity = 33
+local sunflowers_max_count = 10
+local sunflowers_rarity = 25
+
+-- register the various rotations of waterlilies
+
+local lilies_list = {
+ { nil , nil , 1 },
+ { "225", "22.5" , 2 },
+ { "45" , "45" , 3 },
+ { "675", "67.5" , 4 },
+ { "s1" , "small_1" , 5 },
+ { "s2" , "small_2" , 6 },
+ { "s3" , "small_3" , 7 },
+ { "s4" , "small_4" , 8 },
+}
+
+for i in ipairs(lilies_list) do
+ local deg1 = ""
+ local deg2 = ""
+ local lily_groups = {snappy = 3,flammable=2,flower=1}
+
+ if lilies_list[i][1] ~= nil then
+ deg1 = "_"..lilies_list[i][1]
+ deg2 = "_"..lilies_list[i][2]
+ lily_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
+ end
+
+ minetest.register_node(":flowers:waterlily"..deg1, {
+ description = S("Waterlily"),
+ drawtype = "nodebox",
+ tiles = {
+ "flowers_waterlily"..deg2..".png",
+ "flowers_waterlily"..deg2..".png^[transformFY"
+ },
+ inventory_image = "flowers_waterlily.png",
+ wield_image = "flowers_waterlily.png",
+ sunlight_propagates = true,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = false,
+ groups = lily_groups,
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
+ },
+ buildable_to = true,
+
+ liquids_pointable = true,
+ drop = "flowers:waterlily",
+ on_place = function(itemstack, placer, pointed_thing)
+ local keys=placer:get_player_control()
+ local pt = pointed_thing
+
+ local place_pos = nil
+ local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
+ local under_node = minetest.get_node(pt.under)
+ local above_node = minetest.get_node(pt.above)
+ local top_node = minetest.get_node(top_pos)
+
+ if biome_lib:get_nodedef_field(under_node.name, "buildable_to") then
+ if under_node.name ~= "default:water_source" then
+ place_pos = pt.under
+ elseif top_node.name ~= "default:water_source"
+ and biome_lib:get_nodedef_field(top_node.name, "buildable_to") then
+ place_pos = top_pos
+ else
+ return
+ end
+ elseif biome_lib:get_nodedef_field(above_node.name, "buildable_to") then
+ place_pos = pt.above
+ end
+
+ if place_pos and not minetest.is_protected(place_pos, placer:get_player_name()) then
+
+ local nodename = "default:cobble" -- if this block appears, something went....wrong :-)
+
+ if not keys["sneak"] then
+ local node = minetest.get_node(pt.under)
+ local waterlily = math.random(1,8)
+ if waterlily == 1 then
+ nodename = "flowers:waterlily"
+ elseif waterlily == 2 then
+ nodename = "flowers:waterlily_225"
+ elseif waterlily == 3 then
+ nodename = "flowers:waterlily_45"
+ elseif waterlily == 4 then
+ nodename = "flowers:waterlily_675"
+ elseif waterlily == 5 then
+ nodename = "flowers:waterlily_s1"
+ elseif waterlily == 6 then
+ nodename = "flowers:waterlily_s2"
+ elseif waterlily == 7 then
+ nodename = "flowers:waterlily_s3"
+ elseif waterlily == 8 then
+ nodename = "flowers:waterlily_s4"
+ end
+ minetest.set_node(place_pos, {name = nodename, param2 = math.random(0,3) })
+ else
+ local fdir = minetest.dir_to_facedir(placer:get_look_dir())
+ minetest.set_node(place_pos, {name = "flowers:waterlily", param2 = fdir})
+ end
+
+ if not biome_lib.expect_infinite_stacks then
+ itemstack:take_item()
+ end
+ return itemstack
+ end
+ end,
+ })
+end
+
+local algae_list = { {nil}, {2}, {3}, {4} }
+
+for i in ipairs(algae_list) do
+ local num = ""
+ local algae_groups = {snappy = 3,flammable=2,flower=1}
+
+ if algae_list[i][1] ~= nil then
+ num = "_"..algae_list[i][1]
+ algae_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
+ end
+
+ minetest.register_node(":flowers:seaweed"..num, {
+ description = S("Seaweed"),
+ drawtype = "nodebox",
+ tiles = {
+ "flowers_seaweed"..num..".png",
+ "flowers_seaweed"..num..".png^[transformFY"
+ },
+ inventory_image = "flowers_seaweed_2.png",
+ wield_image = "flowers_seaweed_2.png",
+ sunlight_propagates = true,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = false,
+ groups = algae_groups,
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
+ },
+ buildable_to = true,
+
+ liquids_pointable = true,
+ drop = "flowers:seaweed",
+ on_place = function(itemstack, placer, pointed_thing)
+ local keys=placer:get_player_control()
+ local pt = pointed_thing
+
+ local place_pos = nil
+ local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
+ local under_node = minetest.get_node(pt.under)
+ local above_node = minetest.get_node(pt.above)
+ local top_node = minetest.get_node(top_pos)
+
+ if biome_lib:get_nodedef_field(under_node.name, "buildable_to") then
+ if under_node.name ~= "default:water_source" then
+ place_pos = pt.under
+ elseif top_node.name ~= "default:water_source"
+ and biome_lib:get_nodedef_field(top_node.name, "buildable_to") then
+ place_pos = top_pos
+ else
+ return
+ end
+ elseif biome_lib:get_nodedef_field(above_node.name, "buildable_to") then
+ place_pos = pt.above
+ end
+
+ if not minetest.is_protected(place_pos, placer:get_player_name()) then
+
+ local nodename = "default:cobble" -- :D
+
+ if not keys["sneak"] then
+ --local node = minetest.get_node(pt.under)
+ local seaweed = math.random(1,4)
+ if seaweed == 1 then
+ nodename = "flowers:seaweed"
+ elseif seaweed == 2 then
+ nodename = "flowers:seaweed_2"
+ elseif seaweed == 3 then
+ nodename = "flowers:seaweed_3"
+ elseif seaweed == 4 then
+ nodename = "flowers:seaweed_4"
+ end
+ minetest.set_node(place_pos, {name = nodename, param2 = math.random(0,3) })
+ else
+ local fdir = minetest.dir_to_facedir(placer:get_look_dir())
+ minetest.set_node(place_pos, {name = "flowers:seaweed", param2 = fdir})
+ end
+
+ if not biome_lib.expect_infinite_stacks then
+ itemstack:take_item()
+ end
+ return itemstack
+ end
+ end,
+ })
+end
+
+local box = {
+ type="fixed",
+ fixed = { { -0.2, -0.5, -0.2, 0.2, 0.5, 0.2 } },
+}
+
+local sunflower_drop = "farming:seed_wheat"
+if minetest.registered_items["farming:seed_spelt"] then
+ sunflower_drop = "farming:seed_spelt"
+end
+
+minetest.register_node(":flowers:sunflower", {
+ description = "Sunflower",
+ drawtype = "mesh",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ inventory_image = "flowers_sunflower_inv.png",
+ mesh = "flowers_sunflower.obj",
+ tiles = { "flowers_sunflower.png" },
+ walkable = false,
+ buildable_to = true,
+ is_ground_content = true,
+ groups = { dig_immediate=3, flora=1, flammable=3 },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = box,
+ collision_box = box,
+ drop = {
+ max_items = 1,
+ items = {
+ {items = {sunflower_drop}, rarity = 8},
+ {items = {"flowers:sunflower"}},
+ }
+ }
+})
+
+local extra_aliases = {
+ "waterlily",
+ "waterlily_225",
+ "waterlily_45",
+ "waterlily_675",
+ "seaweed"
+}
+
+for i in ipairs(extra_aliases) do
+ local flower = extra_aliases[i]
+ minetest.register_alias("flowers:flower_"..flower, "flowers:"..flower)
+end
+
+minetest.register_alias( "trunks:lilypad" , "flowers:waterlily_s1" )
+minetest.register_alias( "along_shore:lilypads_1" , "flowers:waterlily_s1" )
+minetest.register_alias( "along_shore:lilypads_2" , "flowers:waterlily_s2" )
+minetest.register_alias( "along_shore:lilypads_3" , "flowers:waterlily_s3" )
+minetest.register_alias( "along_shore:lilypads_4" , "flowers:waterlily_s4" )
+minetest.register_alias( "along_shore:pondscum_1" , "flowers:seaweed" )
+minetest.register_alias( "along_shore:seaweed_1" , "flowers:seaweed" )
+minetest.register_alias( "along_shore:seaweed_2" , "flowers:seaweed_2" )
+minetest.register_alias( "along_shore:seaweed_3" , "flowers:seaweed_3" )
+minetest.register_alias( "along_shore:seaweed_4" , "flowers:seaweed_4" )
+
+-- ongen registrations
+
+flowers_plus.grow_waterlily = function(pos)
+ local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
+ for i in ipairs(lilies_list) do
+ local chance = math.random(1,8)
+ local ext = ""
+ local num = lilies_list[i][3]
+
+ if lilies_list[i][1] ~= nil then
+ ext = "_"..lilies_list[i][1]
+ end
+
+ if chance == num then
+ minetest.set_node(right_here, {name="flowers:waterlily"..ext, param2=math.random(0,3)})
+ end
+ end
+end
+
+biome_lib:register_generate_plant({
+ surface = {"default:water_source"},
+ max_count = lilies_max_count,
+ rarity = lilies_rarity,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {"default:dirt_with_grass"},
+ near_nodes_size = 4,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ temp_max = -0.22,
+ temp_min = 0.22,
+ },
+ flowers_plus.grow_waterlily
+)
+
+flowers_plus.grow_seaweed = function(pos)
+ local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
+ minetest.set_node(right_here, {name="along_shore:seaweed_"..math.random(1,4), param2=math.random(1,3)})
+end
+
+biome_lib:register_generate_plant({
+ surface = {"default:water_source"},
+ max_count = seaweed_max_count,
+ rarity = seaweed_rarity,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {"default:dirt_with_grass"},
+ near_nodes_size = 4,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ flowers_plus.grow_seaweed
+)
+
+-- seaweed at beaches
+-- MM: not satisfied with it, but IMHO some beaches should have some algae
+biome_lib:register_generate_plant({
+ surface = {"default:water_source"},
+ max_count = seaweed_max_count,
+ rarity = seaweed_rarity,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {"default:sand"},
+ near_nodes_size = 1,
+ near_nodes_vertical = 0,
+ near_nodes_count = 3,
+ plantlife_limit = -0.9,
+ temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
+ temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
+ },
+ flowers_plus.grow_seaweed
+)
+biome_lib:register_generate_plant({
+ surface = {"default:sand"},
+ max_count = seaweed_max_count*2,
+ rarity = seaweed_rarity/2,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {"default:water_source"},
+ near_nodes_size = 1,
+ near_nodes_vertical = 0,
+ near_nodes_count = 3,
+ plantlife_limit = -0.9,
+ temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
+ temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
+ },
+ flowers_plus.grow_seaweed
+)
+
+biome_lib:register_generate_plant({
+ surface = {"default:dirt_with_grass"},
+ avoid_nodes = { "flowers:sunflower" },
+ max_count = sunflowers_max_count,
+ rarity = sunflowers_rarity,
+ min_elevation = 0,
+ plantlife_limit = -0.9,
+ temp_max = 0.53,
+ random_facedir = {0,3},
+ },
+ "flowers:sunflower"
+)
+
+-- spawn ABM registrations
+
+biome_lib:spawn_on_surfaces({
+ spawn_delay = SPAWN_DELAY/2,
+ spawn_plants = {
+ "flowers:waterlily",
+ "flowers:waterlily_225",
+ "flowers:waterlily_45",
+ "flowers:waterlily_675",
+ "flowers:waterlily_s1",
+ "flowers:waterlily_s2",
+ "flowers:waterlily_s3",
+ "flowers:waterlily_s4"
+ },
+ avoid_radius = 2.5,
+ spawn_chance = SPAWN_CHANCE*4,
+ spawn_surfaces = {"default:water_source"},
+ avoid_nodes = {"group:flower", "group:flora" },
+ seed_diff = flowers_seed_diff,
+ light_min = 9,
+ depth_max = 2,
+ random_facedir = {0,3}
+})
+
+biome_lib:spawn_on_surfaces({
+ spawn_delay = SPAWN_DELAY*2,
+ spawn_plants = {"flowers:seaweed"},
+ spawn_chance = SPAWN_CHANCE*2,
+ spawn_surfaces = {"default:water_source"},
+ avoid_nodes = {"group:flower", "group:flora"},
+ seed_diff = flowers_seed_diff,
+ light_min = 4,
+ light_max = 10,
+ neighbors = {"default:dirt_with_grass"},
+ facedir = 1
+})
+
+biome_lib:spawn_on_surfaces({
+ spawn_delay = SPAWN_DELAY*2,
+ spawn_plants = {"flowers:seaweed"},
+ spawn_chance = SPAWN_CHANCE*2,
+ spawn_surfaces = {"default:dirt_with_grass"},
+ avoid_nodes = {"group:flower", "group:flora" },
+ seed_diff = flowers_seed_diff,
+ light_min = 4,
+ light_max = 10,
+ neighbors = {"default:water_source"},
+ ncount = 1,
+ facedir = 1
+})
+
+biome_lib:spawn_on_surfaces({
+ spawn_delay = SPAWN_DELAY*2,
+ spawn_plants = {"flowers:seaweed"},
+ spawn_chance = SPAWN_CHANCE*2,
+ spawn_surfaces = {"default:stone"},
+ avoid_nodes = {"group:flower", "group:flora" },
+ seed_diff = flowers_seed_diff,
+ light_min = 4,
+ light_max = 10,
+ neighbors = {"default:water_source"},
+ ncount = 6,
+ facedir = 1
+})
+
+biome_lib:spawn_on_surfaces({
+ spawn_delay = SPAWN_DELAY*2,
+ spawn_plants = {"flowers:sunflower"},
+ spawn_chance = SPAWN_CHANCE*2,
+ spawn_surfaces = {"default:dirt_with_grass"},
+ avoid_nodes = {"group:flower", "flowers:sunflower"},
+ seed_diff = flowers_seed_diff,
+ light_min = 11,
+ light_max = 14,
+ min_elevation = 0,
+ plantlife_limit = -0.9,
+ temp_max = 0.53,
+ random_facedir = {0,3},
+ avoid_radius = 5
+})
+
+-- Cotton plants are now provided by the default "farming" mod.
+-- old cotton plants -> farming cotton stage 8
+-- cotton wads -> string (can be crafted into wool blocks)
+-- potted cotton plants -> potted white dandelions
+
+minetest.register_alias("flowers:cotton_plant", "farming:cotton_8")
+minetest.register_alias("flowers:flower_cotton", "farming:cotton_8")
+minetest.register_alias("flowers:flower_cotton_pot", "flowers:potted_dandelion_white")
+minetest.register_alias("flowers:potted_cotton_plant", "flowers:potted_dandelion_white")
+minetest.register_alias("flowers:cotton", "farming:string")
+minetest.register_alias("flowers:cotton_wad", "farming:string")
+minetest.register_alias("sunflower:sunflower", "flowers:sunflower")
+
+print(S("[Flowers] Loaded."))
diff --git a/plantlife_modpack/flowers_plus/locale/de.txt b/plantlife_modpack/flowers_plus/locale/de.txt
new file mode 100644
index 0000000..5195be7
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/locale/de.txt
@@ -0,0 +1,13 @@
+# Translation by Xanthin
+
+Waterlily = Seerose
+Seaweed = Seetang
+Potted Rose = Eingetopfte Rose
+Potted Tulip = Eingetopfte Tulpe
+Potted Yellow Dandelion = Eingetopfter Loewenzahn
+Potted White Dandelion = Eingetopfte Pusteblume
+Potted Blue Geranium = Eingetopfte blaue Geranie
+Potted Viola = Eingetopftes Veilchen
+Flower Pot = Blumentopf
+
+[Flowers] Loaded. = [Flowers] Geladen.
diff --git a/plantlife_modpack/flowers_plus/locale/fr.txt b/plantlife_modpack/flowers_plus/locale/fr.txt
new file mode 100644
index 0000000..c4f4737
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/locale/fr.txt
@@ -0,0 +1,13 @@
+# Template
+
+Waterlily = Nénuphar
+Seaweed = Algues
+Potted Rose = Rose en pot
+Potted Tulip = Tulipe en pot
+Potted Yellow Dandelion = Pissenlit jaune en pot
+Potted White Dandelion = Pissenlit blanc en pot
+Potted Blue Geranium = Géranium bleu en pot
+Potted Viola = Violette en pot
+Flower Pot = Fleurs en pot
+
+[Flowers] Loaded. = [Fleurs] Chargées.
diff --git a/plantlife_modpack/flowers_plus/locale/template.txt b/plantlife_modpack/flowers_plus/locale/template.txt
new file mode 100644
index 0000000..42ac830
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/locale/template.txt
@@ -0,0 +1,13 @@
+# Template
+
+Waterlily =
+Seaweed =
+Potted Rose =
+Potted Tulip =
+Potted Yellow Dandelion =
+Potted White Dandelion =
+Potted Blue Geranium =
+Potted Viola =
+Flower Pot =
+
+[Flowers] Loaded. =
diff --git a/plantlife_modpack/flowers_plus/models/flowers_sunflower.obj b/plantlife_modpack/flowers_plus/models/flowers_sunflower.obj
new file mode 100644
index 0000000..35beb8d
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/models/flowers_sunflower.obj
@@ -0,0 +1,73 @@
+# Blender v2.70 (sub 0) OBJ File: 'sunflower.blend'
+# www.blender.org
+mtllib sunflower_sunflower.mtl
+o Cube
+v -0.015625 -0.500000 0.028125
+v -0.015625 -0.500000 -0.028125
+v 0.028125 -0.500000 -0.028125
+v 0.028125 -0.500000 0.028125
+v -0.015625 0.790890 0.028125
+v -0.015625 0.689140 -0.028125
+v 0.028125 0.689140 -0.028125
+v 0.028125 0.790890 0.028125
+v 0.250000 0.533494 -0.125000
+v -0.250000 0.533494 -0.125000
+v 0.250000 0.966506 0.125000
+v -0.250000 0.966506 0.125000
+v 0.267063 0.373606 -0.088749
+v 0.044375 0.303464 -0.141576
+v 0.239202 0.473737 0.108253
+v -0.008452 0.378817 0.108253
+v 0.017721 0.016639 -0.112053
+v -0.231280 0.110242 -0.115181
+v -0.030356 -0.036246 0.146223
+v -0.252831 0.028885 0.088910
+v 0.062500 0.641747 -0.057917
+v -0.106953 0.097386 -0.113617
+v -0.006318 -0.053008 0.024707
+v 0.118968 0.360674 0.006909
+v 0.116101 0.452031 0.108253
+v 0.017962 0.298392 -0.019504
+v 0.145794 0.358736 -0.115163
+v 0.240237 0.375544 0.033323
+v -0.224509 0.021356 -0.032606
+v -0.131273 0.023638 0.117567
+v -0.102951 0.016109 -0.003950
+vt 0.750000 0.875000
+vt 0.625000 0.875000
+vt 0.625000 0.750000
+vt 0.750000 0.750000
+vt 0.750000 1.000000
+vt 0.625000 1.000000
+vt 0.625000 0.500000
+vt 0.500000 0.500000
+vt 0.500000 1.000000
+vt 0.000100 0.500100
+vt 0.499900 0.500100
+vt 0.499900 0.999900
+vt 0.000100 0.999900
+vt 0.250000 0.250000
+vt 0.500000 0.250000
+vt 0.250000 0.500000
+vt 0.000000 0.250000
+vt 0.000000 0.000000
+vt 0.250000 0.000000
+vt 0.000000 0.500000
+vt 0.500000 0.000000
+usemtl Sunflower
+s off
+f 1/1 2/2 3/3 4/4
+f 5/5 8/6 7/2 6/1
+f 1/7 5/8 6/9 2/6
+f 2/7 6/6 7/9 3/8
+f 3/7 7/8 8/9 4/6
+f 5/7 1/8 4/9 8/6
+f 9/10 10/11 12/12 11/13
+f 24/14 26/15 16/8 25/16
+f 31/14 29/17 20/18 30/19
+f 17/8 22/16 31/14 23/15
+f 22/16 18/20 29/17 31/14
+f 27/19 14/21 26/15 24/14
+f 13/18 27/19 24/14 28/17
+f 23/15 31/14 30/19 19/21
+f 28/17 24/14 25/16 15/20
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_seaweed.png b/plantlife_modpack/flowers_plus/textures/flowers_seaweed.png
new file mode 100644
index 0000000..b5bd99c
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_seaweed.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_seaweedLight.png b/plantlife_modpack/flowers_plus/textures/flowers_seaweedLight.png
new file mode 100644
index 0000000..7595ebc
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_seaweedLight.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_seaweed_2.png b/plantlife_modpack/flowers_plus/textures/flowers_seaweed_2.png
new file mode 100644
index 0000000..0b24730
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_seaweed_2.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_seaweed_3.png b/plantlife_modpack/flowers_plus/textures/flowers_seaweed_3.png
new file mode 100644
index 0000000..d9b7f43
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_seaweed_3.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_seaweed_4.png b/plantlife_modpack/flowers_plus/textures/flowers_seaweed_4.png
new file mode 100644
index 0000000..887c183
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_seaweed_4.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_sunflower.png b/plantlife_modpack/flowers_plus/textures/flowers_sunflower.png
new file mode 100644
index 0000000..fb95cb4
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_sunflower.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_sunflower_inv.png b/plantlife_modpack/flowers_plus/textures/flowers_sunflower_inv.png
new file mode 100644
index 0000000..c36ed01
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_sunflower_inv.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_waterlily.png b/plantlife_modpack/flowers_plus/textures/flowers_waterlily.png
new file mode 100644
index 0000000..7b58bb2
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_waterlily.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_waterlily_22.5.png b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_22.5.png
new file mode 100644
index 0000000..73647ac
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_22.5.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_waterlily_45.png b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_45.png
new file mode 100644
index 0000000..7ca683e
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_45.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_waterlily_67.5.png b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_67.5.png
new file mode 100644
index 0000000..234da60
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_67.5.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_1.png b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_1.png
new file mode 100644
index 0000000..a2d88cd
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_1.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_2.png b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_2.png
new file mode 100644
index 0000000..7d2ba86
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_2.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_3.png b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_3.png
new file mode 100644
index 0000000..bfcab90
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_3.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_4.png b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_4.png
new file mode 100644
index 0000000..8119ea7
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/flowers_waterlily_small_4.png
Binary files differ
diff --git a/plantlife_modpack/flowers_plus/textures/tr.txt b/plantlife_modpack/flowers_plus/textures/tr.txt
new file mode 100644
index 0000000..9e6372e
--- /dev/null
+++ b/plantlife_modpack/flowers_plus/textures/tr.txt
@@ -0,0 +1,14 @@
+# Turkish translation
+# mahmutelmas06@hotmail.com
+
+Waterlily = Nilüfer
+Seaweed = Deniz yosunu
+Potted Rose = Saksı gülü
+Potted Tulip = Saksı lalesi
+Potted Yellow Dandelion = Sarı hindiba
+Potted White Dandelion = Beyaz hindiba
+Potted Blue Geranium = Mavi hindiba
+Potted Viola = Saksı Menekşesi
+Flower Pot = Saksı
+
+[Flowers] Loaded. = [Flowers] yüklendi.
diff --git a/plantlife_modpack/junglegrass/init.lua b/plantlife_modpack/junglegrass/init.lua
new file mode 100644
index 0000000..a394d93
--- /dev/null
+++ b/plantlife_modpack/junglegrass/init.lua
@@ -0,0 +1,3 @@
+minetest.register_alias("junglegrass:shortest", "air")
+minetest.register_alias("junglegrass:short", "air")
+minetest.register_alias("junglegrass:medium", "air")
diff --git a/plantlife_modpack/modpack.txt b/plantlife_modpack/modpack.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plantlife_modpack/modpack.txt
diff --git a/plantlife_modpack/molehills/depends.txt b/plantlife_modpack/molehills/depends.txt
new file mode 100644
index 0000000..4e35179
--- /dev/null
+++ b/plantlife_modpack/molehills/depends.txt
@@ -0,0 +1,2 @@
+default
+biome_lib \ No newline at end of file
diff --git a/plantlife_modpack/molehills/init.lua b/plantlife_modpack/molehills/init.lua
new file mode 100644
index 0000000..d0a1941
--- /dev/null
+++ b/plantlife_modpack/molehills/init.lua
@@ -0,0 +1,78 @@
+-----------------------------------------------------------------------------------------------
+local title = "Mole Hills"
+local version = "0.0.3"
+local mname = "molehills"
+-----------------------------------------------------------------------------------------------
+-- Idea by Sokomine
+-- Code & textures by Mossmanikin
+
+abstract_molehills = {}
+
+dofile(minetest.get_modpath("molehills").."/molehills_settings.txt")
+
+-----------------------------------------------------------------------------------------------
+-- NoDe
+-----------------------------------------------------------------------------------------------
+
+local mh_cbox = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, -0.125, 0.5}
+}
+
+minetest.register_node("molehills:molehill",{
+ drawtype = "mesh",
+ mesh = "molehill_molehill.obj",
+ description = "Mole Hill",
+ inventory_image = "molehills_side.png",
+ tiles = { "molehills_dirt.png" },
+ paramtype = "light",
+ selection_box = mh_cbox,
+ collision_box = mh_cbox,
+ groups = {crumbly=3},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- CRaFTiNG
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({ -- molehills --> dirt
+ output = "default:dirt",
+ recipe = {
+ {"molehills:molehill","molehills:molehill"},
+ {"molehills:molehill","molehills:molehill"},
+ }
+})
+
+-----------------------------------------------------------------------------------------------
+-- GeNeRaTiNG
+-----------------------------------------------------------------------------------------------
+abstract_molehills.place_molehill = function(pos)
+ local right_here = {x=pos.x , y=pos.y+1, z=pos.z }
+ if minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z }).name ~= "air"
+ and minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z }).name ~= "air"
+ and minetest.get_node({x=pos.x , y=pos.y, z=pos.z+1}).name ~= "air"
+ and minetest.get_node({x=pos.x , y=pos.y, z=pos.z-1}).name ~= "air"
+ and minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1}).name ~= "air"
+ and minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z-1}).name ~= "air"
+ and minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1}).name ~= "air"
+ and minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1}).name ~= "air" then
+ minetest.set_node(right_here, {name="molehills:molehill"})
+ end
+end
+
+biome_lib:register_generate_plant({
+ surface = {"default:dirt_with_grass"},
+ max_count = Molehills_Max_Count,
+ rarity = Molehills_Rarity,
+ min_elevation = 1,
+ max_elevation = 40,
+ avoid_nodes = {"group:tree","group:liquid","group:stone","group:falling_node"--[[,"air"]]},
+ avoid_radius = 4,
+ plantlife_limit = -0.3,
+ },
+ abstract_molehills.place_molehill
+)
+
+-----------------------------------------------------------------------------------------------
+print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
+-----------------------------------------------------------------------------------------------
diff --git a/plantlife_modpack/molehills/models/molehill_molehill.obj b/plantlife_modpack/molehills/models/molehill_molehill.obj
new file mode 100644
index 0000000..5b9c084
--- /dev/null
+++ b/plantlife_modpack/molehills/models/molehill_molehill.obj
@@ -0,0 +1,197 @@
+# Blender v2.73 (sub 0) OBJ File: 'anthill.blend'
+# www.blender.org
+o Cylinder_Cylinder.001
+v 0.099056 -0.499969 -0.498228
+v 0.038417 -0.200463 -0.141682
+v 0.255808 -0.499933 -0.402046
+v 0.095605 -0.174690 -0.147239
+v 0.423075 -0.499913 -0.296918
+v 0.102439 -0.169033 -0.075679
+v 0.444026 -0.499843 -0.095234
+v 0.125298 -0.217477 -0.063343
+v 0.468682 -0.499958 0.074790
+v 0.157655 -0.214352 0.001348
+v 0.396548 -0.500000 0.246048
+v 0.133778 -0.189245 0.108513
+v 0.280708 -0.500000 0.383197
+v 0.070517 -0.218946 0.104754
+v 0.089852 -0.499943 0.434316
+v 0.048523 -0.205247 0.128681
+v -0.093309 -0.499902 0.467111
+v -0.039037 -0.211895 0.149030
+v -0.272965 -0.499875 0.396496
+v -0.108297 -0.175918 0.104100
+v -0.388317 -0.499877 0.239075
+v -0.139068 -0.179051 0.073370
+v -0.437531 -0.499999 0.063918
+v -0.141812 -0.255882 0.005117
+v -0.458429 -0.499805 -0.104397
+v -0.189265 -0.217436 -0.065303
+v -0.385597 -0.499914 -0.288584
+v -0.112692 -0.207830 -0.096879
+v -0.248347 -0.499927 -0.384586
+v -0.083136 -0.202256 -0.170048
+v -0.095346 -0.499958 -0.514449
+v -0.023049 -0.216681 -0.204058
+v 0.071880 -0.343843 -0.343933
+v 0.189128 -0.354687 -0.277980
+v 0.311273 -0.378789 -0.248498
+v 0.296760 -0.346318 -0.056661
+v 0.332231 -0.342427 0.044933
+v 0.259921 -0.360316 0.147910
+v 0.213270 -0.362883 0.253745
+v 0.059007 -0.360067 0.351374
+v -0.068448 -0.357957 0.335642
+v -0.164888 -0.343166 0.232553
+v -0.269761 -0.352370 0.140734
+v -0.367168 -0.370891 0.062326
+v -0.294491 -0.324099 -0.079712
+v -0.276314 -0.352585 -0.236032
+v -0.206169 -0.372829 -0.314307
+v -0.065547 -0.371444 -0.355380
+v 0.000709 -0.156135 -0.047193
+vt 0.572002 0.826281
+vt 0.535907 0.620231
+vt 0.597591 0.625892
+vt 0.604963 0.552988
+vt 0.830215 0.729053
+vt 0.629619 0.540419
+vt 0.814561 0.533613
+vt 0.664520 0.474514
+vt 0.638766 0.365335
+vt 0.774826 0.325198
+vt 0.570532 0.369165
+vt 0.724507 0.217375
+vt 0.546808 0.344788
+vt 0.452364 0.324057
+vt 0.420641 0.133939
+vt 0.377660 0.369831
+vt 0.316619 0.238965
+vt 0.344469 0.401138
+vt 0.203502 0.332509
+vt 0.341509 0.470674
+vt 0.290325 0.542416
+vt 0.176827 0.557096
+vt 0.372919 0.574586
+vt 0.196433 0.716353
+vt 0.404798 0.649130
+vt 0.469609 0.683778
+vt 0.272092 0.796098
+vt 0.770390 0.885486
+vt 0.973405 0.572910
+vt 0.591386 0.033412
+vt 0.226599 0.867698
+vt 0.423770 0.837943
+vt 0.601314 0.983475
+vt 0.078559 0.769893
+vt 0.000000 0.582245
+vt 0.098436 0.412390
+vt 0.075624 0.232320
+vt 0.200045 0.071942
+vt 0.558116 0.117912
+vt 0.922195 0.225217
+vt 0.852821 0.430110
+vt 0.698467 0.759089
+vt 0.495235 0.523967
+vt 0.391629 1.000000
+vt 0.022541 0.410768
+vt 0.797247 0.085491
+vt 0.393825 0.000000
+vt 0.950807 0.778383
+vt 1.000000 0.399692
+g Cylinder_Cylinder.001_None
+s 1
+f 33/1 2/2 4/3
+f 4/3 6/4 35/5
+f 35/5 6/4 8/6
+f 36/7 8/6 10/8
+f 10/8 12/9 38/10
+f 12/9 14/11 39/12
+f 39/12 14/11 16/13
+f 16/13 18/14 41/15
+f 18/14 20/16 42/17
+f 20/16 22/18 43/19
+f 43/19 22/18 24/20
+f 24/20 26/21 45/22
+f 26/21 28/23 46/24
+f 46/24 28/23 30/25
+f 32/26 2/2 33/1
+f 47/27 30/25 32/26
+f 3/28 7/29 15/30
+f 29/31 47/27 48/32
+f 48/32 33/1 1/33
+f 27/34 46/24 47/27
+f 25/35 45/22 46/24
+f 44/36 45/22 25/35
+f 21/37 43/19 44/36
+f 42/17 43/19 21/37
+f 41/15 42/17 19/38
+f 15/30 40/39 41/15
+f 39/12 40/39 15/30
+f 11/40 38/10 39/12
+f 37/41 38/10 11/40
+f 7/29 36/7 37/41
+f 35/5 36/7 7/29
+f 3/28 34/42 35/5
+f 33/1 34/42 3/28
+f 4/3 2/2 49/43
+f 2/2 32/26 49/43
+f 32/26 30/25 49/43
+f 30/25 28/23 49/43
+f 28/23 26/21 49/43
+f 26/21 24/20 49/43
+f 24/20 22/18 49/43
+f 22/18 20/16 49/43
+f 20/16 18/14 49/43
+f 18/14 16/13 49/43
+f 16/13 14/11 49/43
+f 14/11 12/9 49/43
+f 12/9 10/8 49/43
+f 10/8 8/6 49/43
+f 8/6 6/4 49/43
+f 6/4 4/3 49/43
+f 34/42 33/1 4/3
+f 34/42 4/3 35/5
+f 36/7 35/5 8/6
+f 37/41 36/7 10/8
+f 37/41 10/8 38/10
+f 38/10 12/9 39/12
+f 40/39 39/12 16/13
+f 40/39 16/13 41/15
+f 41/15 18/14 42/17
+f 42/17 20/16 43/19
+f 44/36 43/19 24/20
+f 44/36 24/20 45/22
+f 45/22 26/21 46/24
+f 47/27 46/24 30/25
+f 48/32 32/26 33/1
+f 48/32 47/27 32/26
+f 29/31 31/44 1/33
+f 23/45 27/34 29/31
+f 27/34 23/45 25/35
+f 15/30 19/38 21/37
+f 11/40 13/46 15/30
+f 15/30 17/47 19/38
+f 3/28 23/45 29/31
+f 29/31 1/33 3/28
+f 3/28 5/48 7/29
+f 7/29 9/49 11/40
+f 23/45 15/30 21/37
+f 15/30 23/45 3/28
+f 15/30 7/29 11/40
+f 31/44 29/31 48/32
+f 31/44 48/32 1/33
+f 29/31 27/34 47/27
+f 27/34 25/35 46/24
+f 23/45 44/36 25/35
+f 23/45 21/37 44/36
+f 19/38 42/17 21/37
+f 17/47 41/15 19/38
+f 17/47 15/30 41/15
+f 13/46 39/12 15/30
+f 13/46 11/40 39/12
+f 9/49 37/41 11/40
+f 9/49 7/29 37/41
+f 5/48 35/5 7/29
+f 5/48 3/28 35/5
+f 1/33 33/1 3/28
diff --git a/plantlife_modpack/molehills/molehills_settings.txt b/plantlife_modpack/molehills/molehills_settings.txt
new file mode 100644
index 0000000..2079574
--- /dev/null
+++ b/plantlife_modpack/molehills/molehills_settings.txt
@@ -0,0 +1,6 @@
+-- Settings for generation of stuff (at map-generation time)
+
+Molehills_Max_Count = 320 -- absolute maximum number in an area of 80x80x80 nodes
+
+Molehills_Rarity = 87 -- larger values make molehills more rare (100 means chance of 0 %)
+
diff --git a/plantlife_modpack/molehills/textures/molehills_dirt.png b/plantlife_modpack/molehills/textures/molehills_dirt.png
new file mode 100644
index 0000000..79ffa85
--- /dev/null
+++ b/plantlife_modpack/molehills/textures/molehills_dirt.png
Binary files differ
diff --git a/plantlife_modpack/molehills/textures/molehills_side.png b/plantlife_modpack/molehills/textures/molehills_side.png
new file mode 100644
index 0000000..554bbec
--- /dev/null
+++ b/plantlife_modpack/molehills/textures/molehills_side.png
Binary files differ
diff --git a/plantlife_modpack/molehills/textures/old & unused/molehill_side.png b/plantlife_modpack/molehills/textures/old & unused/molehill_side.png
new file mode 100644
index 0000000..5f0f976
--- /dev/null
+++ b/plantlife_modpack/molehills/textures/old & unused/molehill_side.png
Binary files differ
diff --git a/plantlife_modpack/molehills/textures/old & unused/molehill_top.png b/plantlife_modpack/molehills/textures/old & unused/molehill_top.png
new file mode 100644
index 0000000..55cc541
--- /dev/null
+++ b/plantlife_modpack/molehills/textures/old & unused/molehill_top.png
Binary files differ
diff --git a/plantlife_modpack/nature_classic/blossom.lua b/plantlife_modpack/nature_classic/blossom.lua
new file mode 100644
index 0000000..62947b5
--- /dev/null
+++ b/plantlife_modpack/nature_classic/blossom.lua
@@ -0,0 +1,75 @@
+-- Blossoms and such
+
+local function spawn_apple_under(pos)
+ local below = {
+ x = pos.x,
+ y = pos.y - 1,
+ z = pos.z,
+ }
+ if minetest.get_node(below).name == "air" then
+ minetest.set_node(below, { name = "default:apple" })
+ end
+end
+
+minetest.register_node(":"..nature.blossom_node, {
+ description = "Apple blossoms",
+ drawtype = "allfaces_optional",
+ tiles = nature.blossom_textures,
+ paramtype = "light",
+ groups = { snappy = 3, leafdecay = 3, flammable = 2, leafdecay = 3 },
+ sounds = default.node_sound_leaves_defaults(),
+ waving = 1
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = nature.blossom_node,
+ burntime = 2,
+})
+
+-- these ABMs can get heavy, so just enqueue the nodes
+
+-- Adding Blossoms
+-- Limit mass changes after block has not been loaded for some time:
+-- Run ABM with higher frequency, but don't enqueue all blocks
+minetest.register_abm({
+ nodenames = { nature.blossom_leaves },
+ interval = nature.blossom_delay / nature.leaves_blossom_chance,
+ chance = nature.leaves_blossom_chance,
+
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ if math.random(nature.leaves_blossom_chance) == 1 then
+ nature.enqueue_node(pos, node, nature.blossom_node)
+ end
+ end
+})
+
+-- Removing blossoms
+-- Limit mass changes after block has not been loaded for some time:
+-- Run ABM with higher frequency, but don't enqueue all blocks
+minetest.register_abm({
+ nodenames = { nature.blossom_node },
+ interval = nature.blossom_delay / nature.blossom_leaves_chance,
+ chance = nature.blossom_leaves_chance,
+
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ if math.random(nature.blossom_leaves_chance) == 1 then
+ nature.enqueue_node(pos, node, nature.blossom_leaves)
+ end
+ end
+})
+
+-- Spawning apples
+-- Limit mass changes after block has not been loaded for some time:
+-- spawn apples with 25% chance, but with 4 times higher frequency
+minetest.register_abm({
+ nodenames = { nature.blossom_node },
+ interval = nature.apple_delay / 4,
+ chance = nature.apple_chance,
+
+ action = function(pos, node, active_object_count, active_object_count_wider)
+ if math.random(4) == 1 and nature.dtime < 0.2 and not minetest.find_node_near(pos, nature.apple_spread, { "default:apple" }) then
+ spawn_apple_under(pos)
+ end
+ end
+})
diff --git a/plantlife_modpack/nature_classic/config.lua b/plantlife_modpack/nature_classic/config.lua
new file mode 100644
index 0000000..8f67b1c
--- /dev/null
+++ b/plantlife_modpack/nature_classic/config.lua
@@ -0,0 +1,6 @@
+-- Set on which distance from water can the tree still grow.
+-- Grows anywhere if set to -1.
+nature.distance_from_water = 20
+
+-- Minimum light level needed to grow. Default is 8, which means daylight.
+nature.minimum_growth_light = 8
diff --git a/plantlife_modpack/nature_classic/depends.txt b/plantlife_modpack/nature_classic/depends.txt
new file mode 100644
index 0000000..1246684
--- /dev/null
+++ b/plantlife_modpack/nature_classic/depends.txt
@@ -0,0 +1,2 @@
+default
+moretrees?
diff --git a/plantlife_modpack/nature_classic/global_function.lua b/plantlife_modpack/nature_classic/global_function.lua
new file mode 100644
index 0000000..3a5b9e3
--- /dev/null
+++ b/plantlife_modpack/nature_classic/global_function.lua
@@ -0,0 +1,82 @@
+-- helper functions
+
+local function process_blossom_queue_item()
+ local pos = nature.blossomqueue[1][1]
+ local node = nature.blossomqueue[1][2]
+ local replace = nature.blossomqueue[1][3]
+ if (nature.blossomqueue[1][3] == nature.blossom_node and not nature:is_near_water(pos)) then
+ table.remove(nature.blossomqueue, 1) -- don't grow if it's not near water, pop from queue.
+ return
+ end
+ nature:grow_node(pos, replace) -- now actually grow it.
+ table.remove(nature.blossomqueue, 1)
+end
+
+minetest.register_globalstep(function(dtime)
+ nature.dtime = dtime
+ if #nature.blossomqueue > 0 and dtime < 0.2 then
+ local i = 1
+ if dtime < 0.1 then
+ i = i + 4
+ end
+ if dtime < 0.05 then
+ i = i + 10
+ end
+ while #nature.blossomqueue > 0 and i > 0 do
+ process_blossom_queue_item()
+ i = i - 1
+ end
+ end
+end)
+
+function nature.enqueue_node(pos, node, replace)
+ local idx = #nature.blossomqueue
+ if idx < nature.blossomqueue_max then
+ local enqueue_prob = 0
+ if idx < nature.blossomqueue_max * 0.8 then
+ enqueue_prob = 1
+ else
+ -- Reduce queue growth as it gets closer to its max.
+ enqueue_prob = 1 - (idx - nature.blossomqueue_max * 0.8) / (nature.blossomqueue_max * 0.2)
+ end
+ if enqueue_prob == 1 or math.random(100) <= 100 * enqueue_prob then
+ nature.blossomqueue[idx+1] = {}
+ nature.blossomqueue[idx+1][1] = pos
+ nature.blossomqueue[idx+1][2] = node
+ nature.blossomqueue[idx+1][3] = replace
+ end
+ end
+end
+
+local function set_young_node(pos)
+ local meta = minetest.get_meta(pos)
+
+ meta:set_int(nature.meta_blossom_time, minetest.get_gametime())
+end
+
+local function is_not_young(pos)
+ local meta = minetest.get_meta(pos)
+
+ local blossom_time = meta:get_int(nature.meta_blossom_time)
+ return not (blossom_time and minetest.get_gametime() - blossom_time < nature.blossom_duration)
+end
+
+function nature:grow_node(pos, nodename)
+ if pos ~= nil then
+ local light_enough = (minetest.get_node_light(pos, nil) or 0)
+ >= nature.minimum_growth_light
+
+ if is_not_young(pos) and light_enough then
+ minetest.set_node(pos, { name = nodename })
+ set_young_node(pos)
+
+ minetest.log("info", nodename .. " has grown at " .. pos.x .. ","
+ .. pos.y .. "," .. pos.z)
+ end
+ end
+end
+
+function nature:is_near_water(pos)
+ return nature.distance_from_water == -1 or minetest.find_node_near(pos, nature.distance_from_water,
+ { "default:water_source" }) ~= nil
+end
diff --git a/plantlife_modpack/nature_classic/init.lua b/plantlife_modpack/nature_classic/init.lua
new file mode 100644
index 0000000..47fd9bf
--- /dev/null
+++ b/plantlife_modpack/nature_classic/init.lua
@@ -0,0 +1,41 @@
+-- Nature Classic mod
+-- Originally by neko259
+
+-- Nature is slowly capturing the world!
+
+local current_mod_name = minetest.get_current_modname()
+
+nature = {}
+nature.blossomqueue = {}
+nature.blossomqueue_max = 1000
+
+nature.blossom_node = "nature:blossom"
+nature.blossom_leaves = "default:leaves"
+nature.blossom_textures = { "default_leaves.png^nature_blossom.png" }
+
+if minetest.get_modpath("moretrees") then
+ nature.blossom_node = "moretrees:apple_blossoms"
+ nature.blossom_leaves = "moretrees:apple_tree_leaves"
+ nature.blossom_textures = { "moretrees_apple_tree_leaves.png^nature_blossom.png" }
+ minetest.register_alias("nature:blossom", "default:leaves")
+end
+
+nature.leaves_blossom_chance = 15
+nature.blossom_leaves_chance = 5
+nature.blossom_delay = 3600
+nature.apple_delay = 3600
+nature.apple_chance = 10
+nature.apple_spread = 2
+
+nature.meta_blossom_time = "blossom_time"
+nature.blossom_duration = nature.blossom_delay
+
+function dumppos(pos)
+ return "("..pos.x..","..pos.y..","..pos.z..")"
+end
+
+dofile(minetest.get_modpath(current_mod_name) .. "/config.lua")
+dofile(minetest.get_modpath(current_mod_name) .. "/global_function.lua")
+dofile(minetest.get_modpath(current_mod_name) .. "/blossom.lua")
+
+minetest.log("info", "[Nature Classic] loaded!")
diff --git a/plantlife_modpack/nature_classic/textures/nature_blossom.png b/plantlife_modpack/nature_classic/textures/nature_blossom.png
new file mode 100644
index 0000000..9d90336
--- /dev/null
+++ b/plantlife_modpack/nature_classic/textures/nature_blossom.png
Binary files differ
diff --git a/plantlife_modpack/poisonivy/depends.txt b/plantlife_modpack/poisonivy/depends.txt
new file mode 100644
index 0000000..249cc74
--- /dev/null
+++ b/plantlife_modpack/poisonivy/depends.txt
@@ -0,0 +1,2 @@
+biome_lib
+
diff --git a/plantlife_modpack/poisonivy/init.lua b/plantlife_modpack/poisonivy/init.lua
new file mode 100644
index 0000000..466b930
--- /dev/null
+++ b/plantlife_modpack/poisonivy/init.lua
@@ -0,0 +1,103 @@
+-- This file supplies poison ivy for the plantlife modpack
+-- Last revision: 2013-01-24
+
+local S = biome_lib.intllib
+
+local SPAWN_DELAY = 1000
+local SPAWN_CHANCE = 200
+local GROW_DELAY = 500
+local GROW_CHANCE = 30
+local poisonivy_seed_diff = 339
+local walls_list = {
+ "default:dirt",
+ "default:dirt_with_grass",
+ "default:stone",
+ "default:cobble",
+ "default:mossycobble",
+ "default:brick",
+ "default:tree",
+ "default:jungletree",
+ "default:stone_with_coal",
+ "default:stone_with_iron"
+},
+minetest.register_node('poisonivy:seedling', {
+ description = S("Poison ivy (seedling)"),
+ drawtype = 'plantlike',
+ waving = 1,
+ tiles = { 'poisonivy_seedling.png' },
+ inventory_image = 'poisonivy_seedling.png',
+ wield_image = 'poisonivy_seedling.png',
+ sunlight_propagates = true,
+ paramtype = 'light',
+ walkable = false,
+ groups = { snappy = 3, poisonivy=1, flora_block=1 },
+ sounds = default.node_sound_leaves_defaults(),
+ buildable_to = true,
+})
+
+minetest.register_node('poisonivy:sproutling', {
+ description = S("Poison ivy (sproutling)"),
+ drawtype = 'plantlike',
+ waving = 1,
+ tiles = { 'poisonivy_sproutling.png' },
+ inventory_image = 'poisonivy_sproutling.png',
+ wield_image = 'poisonivy_sproutling.png',
+ sunlight_propagates = true,
+ paramtype = 'light',
+ walkable = false,
+ groups = { snappy = 3, poisonivy=1, flora_block=1 },
+ sounds = default.node_sound_leaves_defaults(),
+ buildable_to = true,
+})
+
+minetest.register_node('poisonivy:climbing', {
+ description = S("Poison ivy (climbing plant)"),
+ drawtype = 'signlike',
+ tiles = { 'poisonivy_climbing.png' },
+ inventory_image = 'poisonivy_climbing.png',
+ wield_image = 'poisonivy_climbing.png',
+ sunlight_propagates = true,
+ paramtype = 'light',
+ paramtype2 = 'wallmounted',
+ walkable = false,
+ groups = { snappy = 3, poisonivy=1, flora_block=1 },
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "wallmounted",
+ --wall_side = = <default>
+ },
+ buildable_to = true,
+})
+
+biome_lib:spawn_on_surfaces({
+ spawn_delay = SPAWN_DELAY,
+ spawn_plants = {"poisonivy:seedling"},
+ avoid_radius = 10,
+ spawn_chance = SPAWN_CHANCE/10,
+ spawn_surfaces = {"default:dirt_with_grass"},
+ avoid_nodes = {"group:poisonivy", "group:flower", "group:flora"},
+ seed_diff = poisonivy_seed_diff,
+ light_min = 7,
+ alt_wallnode = "poisonivy:climbing",
+ verticals_list = walls_list
+})
+
+biome_lib:grow_plants({
+ grow_delay = SPAWN_DELAY,
+ grow_chance = GROW_CHANCE,
+ grow_plant = "poisonivy:seedling",
+ grow_result = "poisonivy:sproutling",
+ grow_nodes = {"default:dirt_with_grass"}
+})
+
+biome_lib:grow_plants({
+ grow_delay = GROW_DELAY,
+ grow_chance = GROW_CHANCE*2,
+ grow_plant = "poisonivy:climbing",
+ need_wall = true,
+ grow_vertically = true,
+ verticals_list = walls_list,
+ ground_nodes = {"default:dirt_with_grass"}
+})
+
+print(S("[Poison Ivy] Loaded."))
diff --git a/plantlife_modpack/poisonivy/locale/de.txt b/plantlife_modpack/poisonivy/locale/de.txt
new file mode 100644
index 0000000..5c099ce
--- /dev/null
+++ b/plantlife_modpack/poisonivy/locale/de.txt
@@ -0,0 +1,7 @@
+# Translation by Xanthin
+
+Poison ivy (seedling) = Giftefeu (Saemling)
+Poison ivy (sproutling) = Giftefeu (Sproessling)
+Poison ivy (climbing plant) = Giftefeu (Kletterpflanze)
+
+[Poison Ivy] Loaded. = [Poison Ivy] Geladen.
diff --git a/plantlife_modpack/poisonivy/locale/fr.txt b/plantlife_modpack/poisonivy/locale/fr.txt
new file mode 100644
index 0000000..f033dc3
--- /dev/null
+++ b/plantlife_modpack/poisonivy/locale/fr.txt
@@ -0,0 +1,7 @@
+# Template
+
+Poison ivy (seedling) = Sumac vénéneux (semis)
+Poison ivy (sproutling) = Sumac vénéneux (pousse)
+Poison ivy (climbing plant) = Sumac vénéneux (grimpant)
+
+[Poison Ivy] Loaded. = [Sumac vénéneux] Chargé.
diff --git a/plantlife_modpack/poisonivy/locale/template.txt b/plantlife_modpack/poisonivy/locale/template.txt
new file mode 100644
index 0000000..35fb12d
--- /dev/null
+++ b/plantlife_modpack/poisonivy/locale/template.txt
@@ -0,0 +1,7 @@
+# Template
+
+Poison ivy (seedling) =
+Poison ivy (sproutling) =
+Poison ivy (climbing plant) =
+
+[Poison Ivy] Loaded. =
diff --git a/plantlife_modpack/poisonivy/locale/tr.txt b/plantlife_modpack/poisonivy/locale/tr.txt
new file mode 100644
index 0000000..a7a5b69
--- /dev/null
+++ b/plantlife_modpack/poisonivy/locale/tr.txt
@@ -0,0 +1,7 @@
+# Turkish translation by mahmutelmas06
+
+Poison ivy (seedling) = Sarmaşık (Fidan)
+Poison ivy (sproutling) = Sarmaşık (Filiz)
+Poison ivy (climbing plant) = Sarmaşık (Dolanan)
+
+[Poison Ivy] Loaded. = Sarmaşık yüklendi
diff --git a/plantlife_modpack/poisonivy/textures/poisonivy_climbing.png b/plantlife_modpack/poisonivy/textures/poisonivy_climbing.png
new file mode 100644
index 0000000..f53f7a3
--- /dev/null
+++ b/plantlife_modpack/poisonivy/textures/poisonivy_climbing.png
Binary files differ
diff --git a/plantlife_modpack/poisonivy/textures/poisonivy_seedling.png b/plantlife_modpack/poisonivy/textures/poisonivy_seedling.png
new file mode 100644
index 0000000..281fa75
--- /dev/null
+++ b/plantlife_modpack/poisonivy/textures/poisonivy_seedling.png
Binary files differ
diff --git a/plantlife_modpack/poisonivy/textures/poisonivy_sproutling.png b/plantlife_modpack/poisonivy/textures/poisonivy_sproutling.png
new file mode 100644
index 0000000..92d2742
--- /dev/null
+++ b/plantlife_modpack/poisonivy/textures/poisonivy_sproutling.png
Binary files differ
diff --git a/plantlife_modpack/trunks/crafting.lua b/plantlife_modpack/trunks/crafting.lua
new file mode 100644
index 0000000..02f3991
--- /dev/null
+++ b/plantlife_modpack/trunks/crafting.lua
@@ -0,0 +1,133 @@
+-- Code by Mossmanikin
+-----------------------------------------------------------------------------------------------
+-- TWiGS
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({ -- *leaves --> twigs
+ output = "trunks:twig_1 2",
+ recipe = {{"group:leafdecay"}}
+})
+if minetest.get_modpath("moretrees") ~= nil then
+minetest.register_craft({ -- moretrees_leaves --> twigs
+ output = "trunks:twig_1 2",
+ recipe = {{"group:moretrees_leaves"}}
+})
+minetest.register_craft({ -- except moretrees:palm_leaves
+ output = "moretrees:palm_leaves",
+ recipe = {{"moretrees:palm_leaves"}}
+})
+end
+if minetest.get_modpath("bushes") ~= nil then
+minetest.register_craft({ -- BushLeaves --> twigs
+ output = "trunks:twig_1 2",
+ recipe = {{"bushes:BushLeaves1"}}
+})
+minetest.register_craft({
+ output = "trunks:twig_1 2",
+ recipe = {{"bushes:BushLeaves2"}}
+})
+minetest.register_craft({ -- bushbranches --> twigs
+ output = "trunks:twig_1 4",
+ recipe = {{"bushes:bushbranches1"}}
+})
+minetest.register_craft({
+ output = "trunks:twig_1 4",
+ recipe = {{"bushes:bushbranches2"}}
+})
+minetest.register_craft({
+ output = "trunks:twig_1 4",
+ recipe = {{"bushes:bushbranches2a"}}
+})
+minetest.register_craft({
+ output = "trunks:twig_1 4",
+ recipe = {{"bushes:bushbranches3"}}
+})
+end
+minetest.register_craft({ -- twigs block --> twigs
+ output = "trunks:twig_1 8",
+ recipe = {{"trunks:twigs"}}
+})
+minetest.register_craft({ -- twigs_slab --> twigs
+ output = "trunks:twig_1 4",
+ recipe = {{"trunks:twigs_slab"}}
+})
+minetest.register_craft({ -- twigs_roof --> twigs
+ output = "trunks:twig_1 4",
+ recipe = {{"trunks:twigs_roof"}}
+})
+minetest.register_craft({ -- twigs_roof_corner --> twigs
+ output = "trunks:twig_1 3",
+ recipe = {{"trunks:twigs_roof_corner"}}
+})
+minetest.register_craft({ -- twigs_roof_corner_2 --> twigs
+ output = "trunks:twig_1 3",
+ recipe = {{"trunks:twigs_roof_corner_2"}}
+})
+-----------------------------------------------------------------------------------------------
+-- STiCK
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({ -- twig --> stick
+ output = "default:stick",
+ recipe = {{"trunks:twig_1"}}
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS BLoCK
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({ -- twigs --> twigs block
+ output = "trunks:twigs",
+ recipe = {
+ {"trunks:twig_1","trunks:twig_1","trunks:twig_1"},
+ {"trunks:twig_1", "" ,"trunks:twig_1"},
+ {"trunks:twig_1","trunks:twig_1","trunks:twig_1"},
+ }
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS SLaBS
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({ -- twigs blocks --> twigs_slabs
+ output = "trunks:twigs_slab 6",
+ recipe = {
+ {"trunks:twigs","trunks:twigs","trunks:twigs"},
+ }
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS RooFS
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({ -- twigs blocks --> twigs_roofs
+ output = "trunks:twigs_roof 4",
+ recipe = {
+ {"trunks:twigs",""},
+ {"","trunks:twigs"},
+ }
+})
+minetest.register_craft({
+ output = "trunks:twigs_roof 4",
+ recipe = {
+ {"","trunks:twigs"},
+ {"trunks:twigs",""},
+ }
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS RooF CoRNeRS
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({ -- twigs blocks --> twigs_roof_corners
+ output = "trunks:twigs_roof_corner 8",
+ recipe = {
+ { "" ,"trunks:twigs", "" },
+ {"trunks:twigs", "" ,"trunks:twigs"},
+ }
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS RooF CoRNeRS 2
+-----------------------------------------------------------------------------------------------
+minetest.register_craft({ -- twigs blocks --> twigs_roof_corner_2's
+ output = "trunks:twigs_roof_corner_2 8",
+ recipe = {
+ {"trunks:twigs", "" ,"trunks:twigs"},
+ { "" ,"trunks:twigs", "" },
+ }
+}) \ No newline at end of file
diff --git a/plantlife_modpack/trunks/depends.txt b/plantlife_modpack/trunks/depends.txt
new file mode 100644
index 0000000..99cfba1
--- /dev/null
+++ b/plantlife_modpack/trunks/depends.txt
@@ -0,0 +1,6 @@
+default
+biome_lib
+bushes?
+ferns?
+moretrees?
+trees? \ No newline at end of file
diff --git a/plantlife_modpack/trunks/generating.lua b/plantlife_modpack/trunks/generating.lua
new file mode 100644
index 0000000..e544a21
--- /dev/null
+++ b/plantlife_modpack/trunks/generating.lua
@@ -0,0 +1,554 @@
+-- Code by Mossmanikin, Neuromancer, and others
+
+local function clone_node(name)
+ local node2 = {}
+ local node = minetest.registered_nodes[name]
+ for k,v in pairs(node) do
+ node2[k]=v
+ end
+ return node2
+end
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS
+-----------------------------------------------------------------------------------------------
+
+abstract_trunks.place_twig = function(pos)
+ local twig_size = math.random(1,27)
+
+ local right_here = {x=pos.x , y=pos.y+1, z=pos.z }
+ local north = {x=pos.x , y=pos.y+1, z=pos.z+1}
+ local north_east = {x=pos.x+1, y=pos.y+1, z=pos.z+1}
+ local east = {x=pos.x+1, y=pos.y+1, z=pos.z }
+ local south_east = {x=pos.x+1, y=pos.y+1, z=pos.z-1}
+ local south = {x=pos.x , y=pos.y+1, z=pos.z-1}
+ local south_west = {x=pos.x-1, y=pos.y+1, z=pos.z-1}
+ local west = {x=pos.x-1, y=pos.y+1, z=pos.z }
+ local north_west = {x=pos.x-1, y=pos.y+1, z=pos.z+1}
+
+ local node_here = minetest.get_node(right_here)
+ local node_north = minetest.get_node(north)
+ local node_n_e = minetest.get_node(north_east)
+ local node_east = minetest.get_node(east)
+ local node_s_e = minetest.get_node(south_east)
+ local node_south = minetest.get_node(south)
+ local node_s_w = minetest.get_node(south_west)
+ local node_west = minetest.get_node(west)
+ local node_n_w = minetest.get_node(north_west)
+-- small twigs
+ if twig_size <= 16 then
+ minetest.set_node(right_here, {name="trunks:twig_"..math.random(1,4), param2=math.random(0,3)})
+ end
+-- big twigs
+ if Big_Twigs == true then
+-- big twig 1
+ if twig_size == 17 then
+ if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z+1}).name].buildable_to
+ or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name].buildable_to) then
+
+ if minetest.registered_nodes[node_here.name].buildable_to then
+ minetest.set_node(right_here, {name="trunks:twig_5"})
+ end
+ if minetest.registered_nodes[node_n_e.name].buildable_to then
+ minetest.set_node(north_east, {name="trunks:twig_7"})
+ end
+ if minetest.registered_nodes[node_east.name].buildable_to then
+ minetest.set_node(east, {name="trunks:twig_8"})
+ end
+ end
+ elseif twig_size == 18 then
+ if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to
+ or minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name].buildable_to) then
+
+ if minetest.registered_nodes[node_here.name].buildable_to then
+ minetest.set_node(right_here, {name="trunks:twig_5", param2=1})
+ end
+ if minetest.registered_nodes[node_s_e.name].buildable_to then
+ minetest.set_node(south_east, {name="trunks:twig_7", param2=1})
+ end
+ if minetest.registered_nodes[node_south.name].buildable_to then
+ minetest.set_node(south, {name="trunks:twig_8", param2=1})
+ end
+ end
+ elseif twig_size == 19 then
+ if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to
+ or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name].buildable_to) then
+
+ if minetest.registered_nodes[node_here.name].buildable_to then
+ minetest.set_node(right_here, {name="trunks:twig_5", param2=2})
+ end
+ if minetest.registered_nodes[node_s_w.name].buildable_to then
+ minetest.set_node(south_west, {name="trunks:twig_7", param2=2})
+ end
+ if minetest.registered_nodes[node_west.name].buildable_to then
+ minetest.set_node(west, {name="trunks:twig_8", param2=2})
+ end
+ end
+ elseif twig_size == 20 then
+ if not (minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z+1}).name].buildable_to
+ or minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name].buildable_to) then
+
+ if minetest.registered_nodes[node_here.name].buildable_to then
+ minetest.set_node(right_here, {name="trunks:twig_5", param2=3})
+ end
+ if minetest.registered_nodes[node_n_w.name].buildable_to then
+ minetest.set_node(north_west, {name="trunks:twig_7", param2=3})
+ end
+ if minetest.registered_nodes[node_north.name].buildable_to then
+ minetest.set_node(north, {name="trunks:twig_8", param2=3})
+ end
+ end
+-- big twig 2
+ elseif twig_size == 21 then
+ if not (minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name].buildable_to
+ or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z+1}).name].buildable_to) then
+
+ if minetest.registered_nodes[node_here.name].buildable_to then
+ minetest.set_node(right_here, {name="trunks:twig_9"})
+ end
+ if minetest.registered_nodes[node_north.name].buildable_to then
+ minetest.set_node(north, {name="trunks:twig_10"})
+ end
+ if minetest.registered_nodes[node_n_e.name].buildable_to then
+ minetest.set_node(north_east, {name="trunks:twig_11"})
+ end
+ end
+ elseif twig_size == 22 then
+ if not (minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name].buildable_to
+ or minetest.registered_nodes[minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name].buildable_to) then
+
+ if minetest.registered_nodes[node_here.name].buildable_to then
+ minetest.set_node(right_here, {name="trunks:twig_9", param2=1})
+ end
+ if minetest.registered_nodes[node_east.name].buildable_to then
+ minetest.set_node(east, {name="trunks:twig_10", param2=1})
+ end
+ if minetest.registered_nodes[node_s_e.name].buildable_to then
+ minetest.set_node(south_east, {name="trunks:twig_11", param2=1})
+ end
+ end
+ elseif twig_size == 23 then
+ if not (minetest.registered_nodes[minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name].buildable_to
+ or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z-1}).name].buildable_to) then
+
+ if minetest.registered_nodes[node_here.name].buildable_to then
+ minetest.set_node(right_here, {name="trunks:twig_9", param2=2})
+ end
+ if minetest.registered_nodes[node_south.name].buildable_to then
+ minetest.set_node(south, {name="trunks:twig_10", param2=2})
+ end
+ if minetest.registered_nodes[node_s_w.name].buildable_to then
+ minetest.set_node(south_west, {name="trunks:twig_11", param2=2})
+ end
+ end
+ elseif twig_size == 24 then
+ if not (minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name].buildable_to
+ or minetest.registered_nodes[minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z+1}).name].buildable_to) then
+
+ if minetest.registered_nodes[node_here.name].buildable_to then
+ minetest.set_node(right_here, {name="trunks:twig_9", param2=3})
+ end
+ if minetest.registered_nodes[node_west.name].buildable_to then
+ minetest.set_node(west, {name="trunks:twig_10", param2=3})
+ end
+ if minetest.registered_nodes[node_n_w.name].buildable_to then
+ minetest.set_node(north_west, {name="trunks:twig_11", param2=3})
+ end
+ end
+ elseif twig_size <= 25 then
+ minetest.set_node(right_here, {name="trunks:twig_"..math.random(12,13), param2=math.random(0,3)})
+ end
+ end
+end
+
+if Twigs_on_ground == true then
+biome_lib:register_generate_plant({
+ surface = {"default:dirt_with_grass"},
+ max_count = Twigs_on_ground_Max_Count,
+ rarity = Twigs_on_ground_Rarity,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {"group:tree","ferns:fern_03","ferns:fern_02","ferns:fern_01"},
+ near_nodes_size = 3,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_trunks.place_twig
+)
+end
+
+if Twigs_on_water == true then
+biome_lib:register_generate_plant({
+ surface = {"default:water_source"},
+ max_count = Twigs_on_water_Max_Count,
+ rarity = Twigs_on_water_Rarity,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {"group:tree"},
+ near_nodes_size = 3,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_trunks.place_twig
+)
+end
+
+-----------------------------------------------------------------------------------------------
+-- TRuNKS
+-----------------------------------------------------------------------------------------------
+local TRuNKS = {
+-- MoD TRuNK NR
+ {"default", "tree", 1},
+ {"default", "jungletree", 2},
+ {"default", "pine_tree", 12},
+
+ {"trees", "tree_conifer", 3},
+ {"trees", "tree_mangrove", 4},
+ {"trees", "tree_palm", 5},
+
+ {"moretrees", "apple_tree_trunk", 6},
+ {"moretrees", "beech_trunk", 7},
+ {"moretrees", "birch_trunk", 8},
+ {"moretrees", "fir_trunk", 9},
+ {"moretrees", "oak_trunk", 10},
+ {"moretrees", "palm_trunk", 11},
+ {"moretrees", "rubber_tree_trunk", 13},
+ {"moretrees", "rubber_tree_trunk_empty", 14},
+ {"moretrees", "sequoia_trunk", 15},
+ {"moretrees", "spruce_trunk", 16},
+ {"moretrees", "willow_trunk", 17},
+}
+
+if Horizontal_Trunks == true then -- see settings.txt
+for i in pairs(TRuNKS) do
+ local MoD = TRuNKS[i][1]
+ local TRuNK = TRuNKS[i][2]
+ local NR = TRuNKS[i][3]
+ local trunkname = MoD..":"..TRuNK
+ if minetest.get_modpath(MoD) ~= nil
+ and NR < 6 -- moretrees trunks allready have facedir
+ and minetest.registered_nodes[trunkname] then -- the node being called exists.
+ temptrunk = clone_node(trunkname)
+ temptrunk.paramtype2 = "facedir"
+ minetest.register_node(":"..trunkname, temptrunk)
+ end
+end
+end
+
+abstract_trunks.place_trunk = function(pos)
+
+ local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
+ local north = {x=pos.x, y=pos.y+1, z=pos.z+1}
+ local north2 = {x=pos.x, y=pos.y+1, z=pos.z+2}
+ local south = {x=pos.x, y=pos.y+1, z=pos.z-1}
+ local south2 = {x=pos.x, y=pos.y+1, z=pos.z-2}
+ local west = {x=pos.x-1, y=pos.y+1, z=pos.z}
+ local west2 = {x=pos.x-2, y=pos.y+1, z=pos.z}
+ local east = {x=pos.x+1, y=pos.y+1, z=pos.z}
+ local east2 = {x=pos.x+2, y=pos.y+1, z=pos.z}
+
+ local node_here = minetest.get_node(right_here)
+ local node_north = minetest.get_node(north)
+ local node_north2 = minetest.get_node(north2)
+ local node_south = minetest.get_node(south)
+ local node_south2 = minetest.get_node(south2)
+ local node_west = minetest.get_node(west)
+ local node_west2 = minetest.get_node(west2)
+ local node_east = minetest.get_node(east)
+ local node_east2 = minetest.get_node(east2)
+ if minetest.registered_nodes[node_here.name].buildable_to then -- instead of check_air = true,
+ for i in pairs(TRuNKS) do
+ local MoD = TRuNKS[i][1]
+ local TRuNK = TRuNKS[i][2]
+ local NR = TRuNKS[i][3]
+ local chance = math.random(1, 17)
+ local length = math.random(3,5)
+ if chance == NR then
+ local trunk_type = math.random(1,3)
+ if trunk_type == 1 then
+ if minetest.get_modpath(MoD) ~= nil then
+ minetest.set_node(right_here, {name=MoD..":"..TRuNK})
+ else
+ minetest.set_node(right_here, {name="default:tree"})
+ end
+ elseif trunk_type == 2 and Horizontal_Trunks == true then
+ if minetest.get_modpath(MoD) ~= nil then
+ if minetest.registered_nodes[node_north.name].buildable_to then
+ minetest.set_node(north, {name=MoD..":"..TRuNK, param2=4})
+ end
+
+ if length >= 4 and minetest.registered_nodes[node_north2.name].buildable_to then
+ minetest.set_node(north2, {name=MoD..":"..TRuNK, param2=4})
+ end
+
+ minetest.set_node(right_here, {name=MoD..":"..TRuNK, param2=4})
+ if minetest.registered_nodes[node_south.name].buildable_to then
+ minetest.set_node(south, {name=MoD..":"..TRuNK, param2=4})
+ end
+ if length == 5 and minetest.registered_nodes[node_south2.name].buildable_to then
+ minetest.set_node(south2, {name=MoD..":"..TRuNK, param2=4})
+ end
+ else
+ if minetest.registered_nodes[node_north.name].buildable_to then
+ minetest.set_node(north, {name="default:tree", param2=4})
+ end
+ if length >= 4 and minetest.registered_nodes[node_north2.name].buildable_to then
+ minetest.set_node(north2, {name="default:tree", param2=4})
+ end
+ minetest.set_node(right_here, {name="default:tree", param2=4})
+ if minetest.registered_nodes[node_south.name].buildable_to then
+ minetest.set_node(south, {name="default:tree", param2=4})
+ end
+ if length == 5 and minetest.registered_nodes[node_south2.name].buildable_to then
+ minetest.set_node(south2, {name="default:tree", param2=4})
+ end
+ end
+ elseif trunk_type == 3 and Horizontal_Trunks == true then
+ if minetest.get_modpath(MoD) ~= nil then
+ if minetest.registered_nodes[node_west.name].buildable_to then
+ minetest.set_node(west, {name=MoD..":"..TRuNK, param2=12})
+ end
+ if length >= 4 and minetest.registered_nodes[node_west2.name].buildable_to then
+ minetest.set_node(west2, {name=MoD..":"..TRuNK, param2=12})
+ end
+ minetest.set_node(right_here, {name=MoD..":"..TRuNK, param2=12})
+ if minetest.registered_nodes[node_east.name].buildable_to then
+ minetest.set_node(east, {name=MoD..":"..TRuNK, param2=12})
+ end
+ if length == 5 and minetest.registered_nodes[node_east2.name].buildable_to then
+ minetest.set_node(east2, {name=MoD..":"..TRuNK, param2=12})
+ end
+ else
+ if minetest.registered_nodes[node_west.name].buildable_to then
+ minetest.set_node(west, {name="default:tree", param2=12})
+ end
+ if length >= 4 and minetest.registered_nodes[node_west2.name].buildable_to then
+ minetest.set_node(west2, {name="default:tree", param2=12})
+ end
+ minetest.set_node(right_here, {name="default:tree", param2=12})
+ if minetest.registered_nodes[node_east.name].buildable_to then
+ minetest.set_node(east, {name="default:tree", param2=12})
+ end
+ if length == 5 and minetest.registered_nodes[node_east2.name].buildable_to then
+ minetest.set_node(east2, {name="default:tree", param2=12})
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+biome_lib:register_generate_plant({
+ surface = {"default:dirt_with_grass"},
+ max_count = Trunks_Max_Count, -- 320,
+ rarity = Trunks_Rarity, -- 99,
+ min_elevation = 1,
+ max_elevation = 40,
+ avoid_nodes = {"group:tree"},
+ avoid_radius = 1,
+ near_nodes = {"group:tree","ferns:fern_03","ferns:fern_02","ferns:fern_01"},
+ near_nodes_size = 3,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_trunks.place_trunk
+)
+
+-----------------------------------------------------------------------------------------------
+-- MoSS & FuNGuS -- on ground
+-----------------------------------------------------------------------------------------------
+if Moss_on_ground == true then
+abstract_trunks.grow_moss_on_ground = function(pos)
+ local on_ground = {x=pos.x, y=pos.y+1, z=pos.z}
+ local moss_type = math.random(1,21)
+
+ if moss_type == 1 then
+ minetest.set_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3)})
+ else
+ minetest.set_node(on_ground, {name="trunks:moss", param2=math.random(0,3)})
+ end
+
+end
+
+biome_lib:register_generate_plant({
+ surface = {"default:dirt_with_grass"},
+ max_count = Moss_on_ground_Max_Count,
+ rarity = Moss_on_ground_Rarity,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {
+ "group:tree",
+ "ferns:fern_03",
+ "ferns:fern_02",
+ "ferns:fern_01"
+ },
+ near_nodes_size = 2,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -0.9,
+ },
+ abstract_trunks.grow_moss_on_ground
+)
+end
+
+-----------------------------------------------------------------------------------------------
+-- MoSS & FuNGuS -- on trunks
+-----------------------------------------------------------------------------------------------
+if Moss_on_trunk == true then
+abstract_trunks.grow_moss_on_trunk = function(pos)
+ local on_ground = {x=pos.x, y=pos.y+1, z=pos.z}
+ local at_side_n = {x=pos.x, y=pos.y, z=pos.z+1}
+ local at_side_e = {x=pos.x+1, y=pos.y, z=pos.z}
+ local at_side_s = {x=pos.x, y=pos.y, z=pos.z-1}
+ local at_side_w = {x=pos.x-1, y=pos.y, z=pos.z}
+ local undrneath = {x=pos.x, y=pos.y-1, z=pos.z}
+
+ local node_here = minetest.get_node(on_ground)
+ local node_north = minetest.get_node(at_side_n)
+ local node_east = minetest.get_node(at_side_e)
+ local node_south = minetest.get_node(at_side_s)
+ local node_west = minetest.get_node(at_side_w)
+ local node_under = minetest.get_node(undrneath)
+
+ --if minetest.get_item_group(node_under.name, "tree") < 1 then
+ local moss_type = math.random(1,41)
+ if minetest.registered_nodes[node_here.name].buildable_to then -- instead of check_air = true,
+ if moss_type == 1 then
+ minetest.set_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3) --[[1]]})
+ elseif moss_type < 22 then
+ minetest.set_node(on_ground, {name="trunks:moss", param2=math.random(0,3) --[[1]]})
+ end
+ end
+ local moss_type = math.random(1,31) -- cliche of more moss at north
+ if minetest.registered_nodes[node_north.name].buildable_to then -- instead of check_air = true,
+ if moss_type == 1 then
+ minetest.set_node(at_side_n, {name="trunks:moss_fungus", param2=math.random(4,7)}) -- 5,4,6,7
+ elseif moss_type < 22 then
+ minetest.set_node(at_side_n, {name="trunks:moss", param2=math.random(4,7)})
+ end
+ end
+ local moss_type = math.random(1,41)
+ if minetest.registered_nodes[node_east.name].buildable_to then -- instead of check_air = true,
+ if moss_type == 1 then
+ minetest.set_node(at_side_e, {name="trunks:moss_fungus", param2=math.random(12,15)})
+ elseif moss_type < 22 then
+ minetest.set_node(at_side_e, {name="trunks:moss", param2=math.random(12,15)})
+ end
+ end
+ local moss_type = math.random(1,41)
+ if minetest.registered_nodes[node_south.name].buildable_to then -- instead of check_air = true,
+ if moss_type == 1 then
+ minetest.set_node(at_side_s, {name="trunks:moss_fungus", param2=math.random(8,11)})
+ elseif moss_type < 22 then
+ minetest.set_node(at_side_s, {name="trunks:moss", param2=math.random(8,11)})
+ end
+ end
+ local moss_type = math.random(1,41)
+ if minetest.registered_nodes[node_west.name].buildable_to then -- instead of check_air = true,
+ if moss_type == 1 then
+ minetest.set_node(at_side_w, {name="trunks:moss_fungus", param2=math.random(16,19)})
+ elseif moss_type < 22 then
+ minetest.set_node(at_side_w, {name="trunks:moss", param2=math.random(16,19)})
+ end
+ end
+ --end
+end
+
+biome_lib:register_generate_plant({
+ surface = {
+ "default:tree",
+ "default:jungletree",
+ "default:pine_tree",
+ "trees:tree_conifer",
+ "trees:tree_mangrove",
+ --"trees:tree_palm",
+ "moretrees:apple_tree_trunk",
+ "moretrees:beech_trunk",
+ "moretrees:birch_trunk",
+ "moretrees:fir_trunk",
+ "moretrees:oak_trunk",
+ --"moretrees:palm_trunk",
+ "moretrees:rubber_tree_trunk",
+ "moretrees:rubber_tree_trunk_empty",
+ "moretrees:sequoia_trunk",
+ "moretrees:spruce_trunk",
+ "moretrees:willow_trunk",
+ "default:mossycobble"
+ },
+ max_count = Moss_on_trunk_Max_Count,
+ rarity = Moss_on_trunk_Rarity,
+ min_elevation = 1,
+ max_elevation = 40,
+ plantlife_limit = -0.9,
+ check_air = false,
+ },
+ "abstract_trunks.grow_moss_on_trunk"
+)
+end
+
+-----------------------------------------------------------------------------------------------
+-- RooTS
+-----------------------------------------------------------------------------------------------
+if Roots == true then -- see settings.txt
+
+abstract_trunks.grow_roots = function(pos)
+ local twig_size = math.random(1,27)
+
+ local right_here = {x=pos.x , y=pos.y , z=pos.z }
+ local below = {x=pos.x , y=pos.y-1, z=pos.z }
+ local north = {x=pos.x , y=pos.y , z=pos.z+1}
+ local east = {x=pos.x+1, y=pos.y , z=pos.z }
+ local south = {x=pos.x , y=pos.y , z=pos.z-1}
+ local west = {x=pos.x-1, y=pos.y , z=pos.z }
+
+ local node_here = minetest.get_node(right_here)
+ local node_below = minetest.get_node(below)
+ local node_north = minetest.get_node(north)
+ local node_east = minetest.get_node(east)
+ local node_south = minetest.get_node(south)
+ local node_west = minetest.get_node(west)
+
+ for i in pairs(TRuNKS) do
+ local MoD = TRuNKS[i][1]
+ local TRuNK = TRuNKS[i][2]
+ if minetest.get_modpath(MoD) ~= nil
+ and node_here.name == MoD..":"..TRuNK
+ and string.find(node_below.name, "dirt")
+ and node_here.param2 == 0 then
+ if minetest.registered_nodes[node_north.name].buildable_to then
+ minetest.set_node(north, {name="trunks:"..TRuNK.."root", param2=2})
+ end
+ if minetest.registered_nodes[node_east.name].buildable_to then
+ minetest.set_node(east, {name="trunks:"..TRuNK.."root", param2=3})
+ end
+ if minetest.registered_nodes[node_south.name].buildable_to then
+ minetest.set_node(south, {name="trunks:"..TRuNK.."root", param2=0})
+ end
+ if minetest.registered_nodes[node_west.name].buildable_to then
+ minetest.set_node(west, {name="trunks:"..TRuNK.."root", param2=1})
+ end
+ end
+ end
+end
+
+biome_lib:register_generate_plant({
+ surface = {"group:tree"},
+ max_count = 1000,
+ rarity = 1,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {"default:dirt_with_grass"},
+ near_nodes_size = 1,
+ near_nodes_vertical = 1,
+ near_nodes_count = 1,
+ plantlife_limit = -1,
+ check_air = false,
+ },
+ "abstract_trunks.grow_roots"
+)
+
+end
diff --git a/plantlife_modpack/trunks/init.lua b/plantlife_modpack/trunks/init.lua
new file mode 100644
index 0000000..ee9427d
--- /dev/null
+++ b/plantlife_modpack/trunks/init.lua
@@ -0,0 +1,17 @@
+-----------------------------------------------------------------------------------------------
+local title = "Trunks"
+local version = "0.1.4"
+local mname = "trunks"
+-----------------------------------------------------------------------------------------------
+-- Code by Mossmanikin & Neuromancer
+
+abstract_trunks = {}
+
+dofile(minetest.get_modpath("trunks").."/trunks_settings.txt")
+dofile(minetest.get_modpath("trunks").."/generating.lua")
+dofile(minetest.get_modpath("trunks").."/nodes.lua")
+dofile(minetest.get_modpath("trunks").."/crafting.lua")
+
+-----------------------------------------------------------------------------------------------
+print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
+----------------------------------------------------------------------------------------------- \ No newline at end of file
diff --git a/plantlife_modpack/trunks/nodes.lua b/plantlife_modpack/trunks/nodes.lua
new file mode 100644
index 0000000..f490871
--- /dev/null
+++ b/plantlife_modpack/trunks/nodes.lua
@@ -0,0 +1,368 @@
+-- Code by Mossmanikin & Neuromancer
+-----------------------------------------------------------------------------------------------
+-- TWiGS
+-----------------------------------------------------------------------------------------------
+-- For compatibility with older stuff
+minetest.register_alias("trunks:twig", "trunks:twig_1")
+
+local flat_stick = {-1/2, -1/2, -1/2, 1/2, -7/16, 1/2}
+local NoDe = { {1}, {2}, {3}, {4}, {5}, --[[{6},]] {7}, {8}, {9}, {10}, {11}, {12}, {13} }
+
+
+for i in pairs(NoDe) do
+ local NR = NoDe[i][1]
+ local iNV = NR - 1
+ minetest.register_node("trunks:twig_"..NR, {
+ description = "Twig",
+ inventory_image = "trunks_twig_"..NR..".png",
+ wield_image = "trunks_twig_"..NR..".png",
+ drawtype = "nodebox",
+ tiles = {
+ "trunks_twig_"..NR..".png",
+ "trunks_twig_"..NR..".png^[transformFY", -- mirror
+ "trunks_twig_6.png" -- empty
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ walkable = false,
+ sunlight_propagates = true,
+ buildable_to = true,
+ node_box = {type = "fixed", fixed = flat_stick},
+ groups = {
+ choppy=2,
+ oddly_breakable_by_hand=2,
+ flammable=3,
+ attached_node=1,
+ not_in_creative_inventory=iNV
+ },
+ drop = "trunks:twig_1",
+ sounds = default.node_sound_leaves_defaults(),
+ liquids_pointable = true,
+ on_place = function(itemstack, placer, pointed_thing)
+ local pt = pointed_thing
+ local direction = minetest.dir_to_facedir(placer:get_look_dir())
+ if minetest.get_node(pt.above).name=="air" then
+ minetest.set_node(pt.above, {name="trunks:twig_"..math.random(1,4), param2=direction})
+ if not minetest.setting_getbool("creative_mode") then
+ itemstack:take_item()
+ end
+ return itemstack
+ end
+ end,
+ })
+end
+
+-----------------------------------------------------------------------------------------------
+-- MoSS
+-----------------------------------------------------------------------------------------------
+local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32--[[<-flickers if smaller]], 1/2}
+
+minetest.register_node("trunks:moss", {
+ description = "Moss",
+ drawtype = "nodebox",--"signlike",
+ tiles = {"trunks_moss.png"},
+ inventory_image = "trunks_moss.png",
+ wield_image = "trunks_moss.png",
+ paramtype = "light",
+ paramtype2 = "facedir",--"wallmounted",
+ sunlight_propagates = true,
+ walkable = false,
+ node_box = {type = "fixed", fixed = flat_moss},
+ selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"},
+ groups = {snappy = 3, flammable = 3 },
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- MoSS & FuNGuS
+-----------------------------------------------------------------------------------------------
+minetest.register_node("trunks:moss_fungus", {
+ description = "Moss with Fungus",
+ drawtype = "nodebox",--"signlike",
+ tiles = {"trunks_moss_fungus.png"},
+ inventory_image = "trunks_moss_fungus.png",
+ wield_image = "trunks_moss_fungus.png",
+ paramtype = "light",
+ paramtype2 = "facedir",--"wallmounted",
+ sunlight_propagates = true,
+ walkable = false,
+ node_box = {type = "fixed", fixed = flat_moss},
+ selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"},
+ groups = {snappy = 3, flammable = 3 },
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS BLoCK
+-----------------------------------------------------------------------------------------------
+minetest.register_alias("woodstuff:twigs", "trunks:twigs")
+
+minetest.register_node("trunks:twigs", {
+ description = "Twigs Block",
+ paramtype2 = "facedir",
+ tiles = {"trunks_twigs.png"},
+ groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS SLaB
+-----------------------------------------------------------------------------------------------
+minetest.register_alias("woodstuff:twigs_slab", "trunks:twigs_slab")
+
+minetest.register_node("trunks:twigs_slab", {
+ description = "Twigs Slab",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"trunks_twigs.png"},
+ node_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, 0, 1/2},
+ },
+ groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS RooF
+-----------------------------------------------------------------------------------------------
+minetest.register_alias("woodstuff:twigs_roof", "trunks:twigs_roof")
+
+minetest.register_node("trunks:twigs_roof", {
+ description = "Twigs Roof",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {"trunks_twigs.png"},
+ node_box = {
+ type = "fixed",
+-- { left, bottom, front, right, top, back }
+ fixed = {
+ {-1/2, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 0, 0},
+ }
+ },
+ groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS RooF CoRNeR
+-----------------------------------------------------------------------------------------------
+minetest.register_alias("woodstuff:twigs_roof_corner", "trunks:twigs_roof_corner")
+
+minetest.register_node("trunks:twigs_roof_corner", {
+ description = "Twigs Roof Corner 1",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {
+ "trunks_twigs_corner.png",
+ "trunks_twigs_corner.png",
+ "trunks_twigs.png"
+ },
+ node_box = {
+ type = "fixed",
+-- { left, bottom, front, right, top, back }
+ fixed = {
+ {-1/2, 0, 0, 0, 1/2, 1/2},
+ {0, -1/2, 0, 1/2, 0, 1/2},
+ {-1/2, -1/2, -1/2, 0, 0, 0},
+ }
+ },
+ groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+})
+
+-----------------------------------------------------------------------------------------------
+-- TWiGS RooF CoRNeR 2
+-----------------------------------------------------------------------------------------------
+minetest.register_alias("woodstuff:twigs_roof_corner_2", "trunks:twigs_roof_corner_2")
+
+minetest.register_node("trunks:twigs_roof_corner_2", {
+ description = "Twigs Roof Corner 2",
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {
+ "trunks_twigs_corner.png",
+ "trunks_twigs_corner.png",
+ "trunks_twigs.png"
+ },
+ node_box = {
+ type = "fixed",
+-- { left, bottom, front, right, top, back }
+ fixed = {
+ {-1/2, -1/2, 0, 0, 0, 1/2},
+ {0, 0, 0, 1/2, 1/2, 1/2},
+ {-1/2, 0, -1/2, 0, 1/2, 0},
+ }
+ },
+ groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
+ sounds = default.node_sound_wood_defaults(),
+})
+
+if Auto_Roof_Corner == true then
+
+ local roof = "trunks:twigs_roof"
+ local corner = "trunks:twigs_roof_corner"
+ local corner_2 = "trunks:twigs_roof_corner_2"
+
+ minetest.register_abm({
+ nodenames = {roof},
+ interval = 1,
+ chance = 1,
+ action = function(pos)
+
+ local node_east = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z })
+ local node_west = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z })
+ local node_north = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
+ local node_south = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
+ -- corner 1
+ if ((node_west.name == roof and node_west.param2 == 0)
+ or (node_west.name == corner and node_west.param2 == 1))
+ and ((node_north.name == roof and node_north.param2 == 3)
+ or (node_north.name == corner and node_north.param2 == 3))
+ then
+ minetest.set_node(pos, {name=corner, param2=0})
+ end
+
+ if ((node_north.name == roof and node_north.param2 == 1)
+ or (node_north.name == corner and node_north.param2 == 2))
+ and ((node_east.name == roof and node_east.param2 == 0)
+ or (node_east.name == corner and node_east.param2 == 0))
+ then
+ minetest.set_node(pos, {name=corner, param2=1})
+ end
+
+ if ((node_east.name == roof and node_east.param2 == 2)
+ or (node_east.name == corner and node_east.param2 == 3))
+ and ((node_south.name == roof and node_south.param2 == 1)
+ or (node_south.name == corner and node_south.param2 == 1))
+ then
+ minetest.set_node(pos, {name=corner, param2=2})
+ end
+
+ if ((node_south.name == roof and node_south.param2 == 3)
+ or (node_south.name == corner and node_south.param2 == 0))
+ and ((node_west.name == roof and node_west.param2 == 2)
+ or (node_west.name == corner and node_west.param2 == 2))
+ then
+ minetest.set_node(pos, {name=corner, param2=3})
+ end
+ -- corner 2
+ if ((node_west.name == roof and node_west.param2 == 2)
+ or (node_west.name == corner_2 and node_west.param2 == 1))
+ and ((node_north.name == roof and node_north.param2 == 1)
+ or (node_north.name == corner_2 and node_north.param2 == 3))
+ then
+ minetest.set_node(pos, {name=corner_2, param2=0})
+ end
+
+ if ((node_north.name == roof and node_north.param2 == 3)
+ or (node_north.name == corner_2 and node_north.param2 == 2))
+ and ((node_east.name == roof and node_east.param2 == 2)
+ or (node_east.name == corner_2 and node_east.param2 == 0))
+ then
+ minetest.set_node(pos, {name=corner_2, param2=1})
+ end
+
+ if ((node_east.name == roof and node_east.param2 == 0)
+ or (node_east.name == corner_2 and node_east.param2 == 3))
+ and ((node_south.name == roof and node_south.param2 == 3)
+ or (node_south.name == corner_2 and node_south.param2 == 1))
+ then
+ minetest.set_node(pos, {name=corner_2, param2=2})
+ end
+
+ if ((node_south.name == roof and node_south.param2 == 1)
+ or (node_south.name == corner_2 and node_south.param2 == 0))
+ and ((node_west.name == roof and node_west.param2 == 0)
+ or (node_west.name == corner_2 and node_west.param2 == 2))
+ then
+ minetest.set_node(pos, {name=corner_2, param2=3})
+ end
+
+ end,
+ })
+end
+
+-- MM: The following stuff is just for testing purposes for now; no generating of roots.
+-- I'm not satisfied with this; they should be either bigger or a different drawtype.
+-----------------------------------------------------------------------------------------------
+-- RooTS
+-----------------------------------------------------------------------------------------------
+if Roots == true then -- see settings.txt
+
+local roots_cube = {-2/16, -1/2, -3/16, 2/16, 1/16, 1/2}
+
+local roots_sheet = {0, -1/2, -1/2, 0, 1/16, 1/2}
+
+local TRuNKS = {
+-- MoD TRuNK
+ {"default", "tree" },
+ {"default", "jungletree" },
+ {"default", "pine_tree" },
+
+ {"trees", "tree_conifer" },
+ {"trees", "tree_mangrove" },
+ {"trees", "tree_palm" },
+
+ {"moretrees", "apple_tree_trunk" },
+ {"moretrees", "beech_trunk" },
+ {"moretrees", "birch_trunk" },
+ {"moretrees", "fir_trunk" },
+ {"moretrees", "oak_trunk" },
+ {"moretrees", "palm_trunk" },
+ {"moretrees", "rubber_tree_trunk" },
+ {"moretrees", "rubber_tree_trunk_empty" },
+ {"moretrees", "sequoia_trunk" },
+ {"moretrees", "spruce_trunk" },
+ {"moretrees", "willow_trunk" },
+}
+
+for i in pairs(TRuNKS) do
+ local MoD = TRuNKS[i][1]
+ local TRuNK = TRuNKS[i][2]
+ if minetest.get_modpath(MoD) ~= nil then
+
+ local node = minetest.registered_nodes[MoD..":"..TRuNK]
+ if node then
+ local des = node.description
+
+ minetest.register_node("trunks:"..TRuNK.."root", {
+ description = des.." Root",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ tiles = {
+--[[top]] MoD.."_"..TRuNK..".png",
+--[[bottom]] MoD.."_"..TRuNK..".png",
+--[[right]] MoD.."_"..TRuNK..".png^trunks_root_mask.png^[makealpha:0,0,0",
+--[[left]] MoD.."_"..TRuNK..".png^trunks_root_mask.png^[transformFX^[makealpha:0,0,0",
+--[[back]] MoD.."_"..TRuNK..".png",
+--[[front]] MoD.."_"..TRuNK..".png"
+ },
+ drawtype = "nodebox",
+ selection_box = {type = "fixed", fixed = roots_cube},
+ node_box = {type = "fixed", fixed = roots_sheet},
+ groups = {
+ tree=1,
+ snappy=1,
+ choppy=2,
+ oddly_breakable_by_hand=1,
+ flammable=2--,
+ --not_in_creative_inventory=1 -- atm in inv for testing
+ },
+ --drop = "trunks:twig_1", -- not sure about this yet
+ sounds = default.node_sound_wood_defaults(),
+ })
+
+ else
+ print(string.format("[Trunks] warning: tree type '%s:%s' not found", MoD, TRuNK))
+ end
+ end
+end
+end
+
+minetest.register_alias("trunks:pine_trunkroot", "trunks:pine_treeroot")
diff --git a/plantlife_modpack/trunks/textures/credit_textures.txt b/plantlife_modpack/trunks/textures/credit_textures.txt
new file mode 100644
index 0000000..b3893d5
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/credit_textures.txt
@@ -0,0 +1,34 @@
+-------------------------------------------------------------
+Credit for textures of "trunks"
+-------------------------------------------------------------
+(If more than one author is listed the names are in alphabetical order)
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+FOLDER TEXTURE AUTHORS
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+../trunks/textures trunks_moss.png Neuromancer
+ trunks_moss_fungus.png Neuromancer
+ trunks_twig_1.png Mossmanikin
+ trunks_twig_2.png Mossmanikin, Neuromancer
+ trunks_twig_3.png Mossmanikin, Neuromancer
+ trunks_twig_4.png Mossmanikin, Neuromancer
+ trunks_twig_5.png Mossmanikin, Neuromancer
+ (trunks_twig_6.png) (Mossmanikin)
+ trunks_twig_7.png Mossmanikin, Neuromancer
+ trunks_twig_8.png Mossmanikin, Neuromancer
+ trunks_twig_9.png Mossmanikin, Neuromancer
+ trunks_twig_10.png Mossmanikin, Neuromancer
+ trunks_twig_11.png Mossmanikin, Neuromancer
+ trunks_twigs.png Mossmanikin
+ trunks_twigs_corner.png Mossmanikin
+ trunks_twigs_top.png Mossmanikin
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+../trunks/textures/old & unused comboSticks.png Mossmanikin, Neuromancer
+ comboSticks_2.png Mossmanikin, Neuromancer
+ trunks_twig_1e.png Mossmanikin, Neuromancer
+ trunks_twig_1n.png Mossmanikin, Neuromancer
+ trunks_twig_2n.png Mossmanikin, Neuromancer
+ trunks_twig_3n.png Mossmanikin, Neuromancer
+ trunks_twig_4n.png Mossmanikin, Neuromancer
+ trunks_twig_5-8.png Mossmanikin, Neuromancer
+ trunks_twig_9-12.png Mossmanikin, Neuromancer
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/plantlife_modpack/trunks/textures/old & unused/comboSticks.png b/plantlife_modpack/trunks/textures/old & unused/comboSticks.png
new file mode 100644
index 0000000..e3b7770
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/comboSticks.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/comboSticks_2.png b/plantlife_modpack/trunks/textures/old & unused/comboSticks_2.png
new file mode 100644
index 0000000..2053592
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/comboSticks_2.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/trunks_root_mask_old.png b/plantlife_modpack/trunks/textures/old & unused/trunks_root_mask_old.png
new file mode 100644
index 0000000..51071c3
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/trunks_root_mask_old.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/trunks_twig_1e.png b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_1e.png
new file mode 100644
index 0000000..518955c
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_1e.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/trunks_twig_1n.png b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_1n.png
new file mode 100644
index 0000000..157c957
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_1n.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/trunks_twig_2n.png b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_2n.png
new file mode 100644
index 0000000..9945f22
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_2n.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/trunks_twig_3n.png b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_3n.png
new file mode 100644
index 0000000..6aacf9d
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_3n.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/trunks_twig_4n.png b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_4n.png
new file mode 100644
index 0000000..c5286b6
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_4n.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/trunks_twig_5-8.png b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_5-8.png
new file mode 100644
index 0000000..9dda478
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_5-8.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/old & unused/trunks_twig_9-12.png b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_9-12.png
new file mode 100644
index 0000000..42a5d45
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/old & unused/trunks_twig_9-12.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_moss.png b/plantlife_modpack/trunks/textures/trunks_moss.png
new file mode 100644
index 0000000..5ffe58f
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_moss.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_moss_fungus.png b/plantlife_modpack/trunks/textures/trunks_moss_fungus.png
new file mode 100644
index 0000000..fcd4ae2
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_moss_fungus.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_root_mask.png b/plantlife_modpack/trunks/textures/trunks_root_mask.png
new file mode 100644
index 0000000..5bfdac6
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_root_mask.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_1.png b/plantlife_modpack/trunks/textures/trunks_twig_1.png
new file mode 100644
index 0000000..066bbfa
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_1.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_10.png b/plantlife_modpack/trunks/textures/trunks_twig_10.png
new file mode 100644
index 0000000..062d8f6
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_10.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_11.png b/plantlife_modpack/trunks/textures/trunks_twig_11.png
new file mode 100644
index 0000000..d9f41f8
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_11.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_12.png b/plantlife_modpack/trunks/textures/trunks_twig_12.png
new file mode 100644
index 0000000..b8cf458
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_12.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_13.png b/plantlife_modpack/trunks/textures/trunks_twig_13.png
new file mode 100644
index 0000000..64b08eb
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_13.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_2.png b/plantlife_modpack/trunks/textures/trunks_twig_2.png
new file mode 100644
index 0000000..826253c
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_2.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_3.png b/plantlife_modpack/trunks/textures/trunks_twig_3.png
new file mode 100644
index 0000000..4038e03
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_3.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_4.png b/plantlife_modpack/trunks/textures/trunks_twig_4.png
new file mode 100644
index 0000000..971d649
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_4.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_5.png b/plantlife_modpack/trunks/textures/trunks_twig_5.png
new file mode 100644
index 0000000..5f74334
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_5.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_6.png b/plantlife_modpack/trunks/textures/trunks_twig_6.png
new file mode 100644
index 0000000..2f6464b
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_6.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_7.png b/plantlife_modpack/trunks/textures/trunks_twig_7.png
new file mode 100644
index 0000000..8b5e4e1
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_7.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_8.png b/plantlife_modpack/trunks/textures/trunks_twig_8.png
new file mode 100644
index 0000000..a9441e9
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_8.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twig_9.png b/plantlife_modpack/trunks/textures/trunks_twig_9.png
new file mode 100644
index 0000000..3e7a3f3
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twig_9.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twigs.png b/plantlife_modpack/trunks/textures/trunks_twigs.png
new file mode 100644
index 0000000..20ae6ca
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twigs.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twigs_corner.png b/plantlife_modpack/trunks/textures/trunks_twigs_corner.png
new file mode 100644
index 0000000..60871bf
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twigs_corner.png
Binary files differ
diff --git a/plantlife_modpack/trunks/textures/trunks_twigs_top.png b/plantlife_modpack/trunks/textures/trunks_twigs_top.png
new file mode 100644
index 0000000..baf797c
--- /dev/null
+++ b/plantlife_modpack/trunks/textures/trunks_twigs_top.png
Binary files differ
diff --git a/plantlife_modpack/trunks/trunks_settings.txt b/plantlife_modpack/trunks/trunks_settings.txt
new file mode 100644
index 0000000..7fe8822
--- /dev/null
+++ b/plantlife_modpack/trunks/trunks_settings.txt
@@ -0,0 +1,70 @@
+-- Settings for generation of stuff (at map-generation time)
+
+
+
+
+
+Horizontal_Trunks = true
+
+
+
+Trunks_Max_Count = 320 -- absolute maximum number in an area of 80x80x80 nodes
+
+
+Trunks_Rarity = 99 -- larger values make trunks more rare (100 means chance of 0 %)
+
+
+
+
+
+Big_Twigs = true -- twigs larger than one node
+Twigs_on_ground = true
+
+
+
+Twigs_on_ground_Max_Count = 640 -- absolute maximum number in an area of 80x80x80 nodes
+
+Twigs_on_ground_Rarity = 66 -- larger values make twigs more rare (100 means chance of 0 %)
+
+
+
+
+
+Twigs_on_water = true
+
+
+
+Twigs_on_water_Max_Count = 320 -- absolute maximum number in an area of 80x80x80 nodes
+
+
+Twigs_on_water_Rarity = 33 -- larger values make twigs more rare (100 means chance of 0 %)
+
+
+
+
+
+Moss_on_ground = true
+
+
+
+Moss_on_ground_Max_Count = 400 -- absolute maximum number in an area of 80x80x80 nodes
+
+Moss_on_ground_Rarity = 79 -- larger values makes moss more rare (100 means chance of 0 %)
+
+
+
+
+
+Moss_on_trunk = true
+
+
+
+Moss_on_trunk_Max_Count = 640 -- absolute maximum number in an area of 80x80x80 nodes
+
+Moss_on_trunk_Rarity = 24 -- larger values makes moss more rare (100 means chance of 0 %)
+
+
+Auto_Roof_Corner = true -- behavior is similar (not the same!) to the one of minecraft stairs
+
+
+Roots = true \ No newline at end of file
diff --git a/plantlife_modpack/vines/LICENSE.md b/plantlife_modpack/vines/LICENSE.md
new file mode 100644
index 0000000..fb67788
--- /dev/null
+++ b/plantlife_modpack/vines/LICENSE.md
@@ -0,0 +1,4 @@
+License
+=======
+- Code WTFPL
+- Texture CC
diff --git a/plantlife_modpack/vines/README.md b/plantlife_modpack/vines/README.md
new file mode 100644
index 0000000..386dcae
--- /dev/null
+++ b/plantlife_modpack/vines/README.md
@@ -0,0 +1,56 @@
+# Vines
+
+## Features
+- Rope block for spawning rope that slowly drops into the deep.
+- Vines are climbable and slowly grow downward.
+- Shears that allow the collecting of vines.
+- Spawns vines on jungletree leaves.
+- Roots on the bottom of dirt and dirt with grass nodes.
+- Spawns vines on trees located in swampy area.
+- Jungle vines that spawn on the side of jungletrees
+
+## API
+The API is very minimal. It allows the registering of vines and the spawning of
+existing vines on nodes of your own.
+
+If you want vines to spawn on a certain node then you can choose which vine by
+adding to the node groups the unique group of that vine. This is determined by
+the name of the vine ( see vines.lua ) appended with '_vines'.
+An example would be.
+
+"willow_vines" or "jungle_vines"
+
+There are two types of vines. One that spawns at the bottom of nodes and uses the
+plantlike drawtype, and vines that spawn on the side that use signlike
+drawtype. The type is determined by the spawn_on_side property in the biome
+table.
+
+### Example
+*taken from mod*
+
+```lua
+
+ vines.register_vine( name, definitions, biome )
+
+ --e.g.
+
+ vines.register_vine( 'vine', {
+ description = "Vines",
+ average_length = 9
+ }, biome )
+
+```
+
+### definitions
+|key| type| description|
+|---| ---| ---|
+|description| string|The vine's tooltip description|
+|average_length|int| The average length of vines|
+
+For biome definitions please see the [biome_lib API documentation](https://github.com/VanessaE/biome_lib/blob/master/API.txt)
+
+## Notice
+Vines use after_destruct on registered leave nodes to remove vines from which
+the leaves are removed. This is done by using the override function.
+Malfunctions may occur if other mods override the after_destruct of these nodes
+also.
diff --git a/plantlife_modpack/vines/aliases.lua b/plantlife_modpack/vines/aliases.lua
new file mode 100644
index 0000000..fce7218
--- /dev/null
+++ b/plantlife_modpack/vines/aliases.lua
@@ -0,0 +1,11 @@
+-- used to remove the old vine nodes. This gives room for the new nodes
+minetest.register_alias( 'vines:root', 'air' )
+minetest.register_alias( 'vines:root_rotten', 'air' )
+minetest.register_alias( 'vines:vine', 'air' )
+minetest.register_alias( 'vines:vine_rotten', 'air' )
+minetest.register_alias( 'vines:side', 'air' )
+minetest.register_alias( 'vines:side_rotten', 'air' )
+minetest.register_alias( 'vines:jungle', 'air' )
+minetest.register_alias( 'vines:jungle_rotten', 'air' )
+minetest.register_alias( 'vines:willow', 'air' )
+minetest.register_alias( 'vines:willow_rotten', 'air' )
diff --git a/plantlife_modpack/vines/crafts.lua b/plantlife_modpack/vines/crafts.lua
new file mode 100644
index 0000000..19e658b
--- /dev/null
+++ b/plantlife_modpack/vines/crafts.lua
@@ -0,0 +1,14 @@
+minetest.register_craft({
+ output = 'vines:rope_block',
+ recipe = vines.recipes['rope_block']
+})
+
+minetest.register_craft({
+ output = 'vines:shears',
+ recipe = vines.recipes['shears']
+})
+
+minetest.register_craftitem("vines:vines", {
+ description = "Vines",
+ inventory_image = "vines_item.png",
+})
diff --git a/plantlife_modpack/vines/depends.txt b/plantlife_modpack/vines/depends.txt
new file mode 100644
index 0000000..573e6e1
--- /dev/null
+++ b/plantlife_modpack/vines/depends.txt
@@ -0,0 +1,3 @@
+default
+biome_lib
+moretrees?
diff --git a/plantlife_modpack/vines/functions.lua b/plantlife_modpack/vines/functions.lua
new file mode 100644
index 0000000..db120a6
--- /dev/null
+++ b/plantlife_modpack/vines/functions.lua
@@ -0,0 +1,132 @@
+vines.register_vine = function( name, defs, biome )
+ local biome = biome
+ local groups = { vines=1, snappy=3, flammable=2 }
+
+ local vine_name_end = 'vines:'..name..'_end'
+ local vine_name_middle = 'vines:'..name..'_middle'
+
+ local vine_image_end = "vines_"..name.."_end.png"
+ local vine_image_middle = "vines_"..name.."_middle.png"
+
+ local drop_node = vine_name_end
+
+ biome.spawn_plants = { vine_name_end }
+
+ local vine_group = 'group:'..name..'_vines'
+ biome.spawn_surfaces[ #biome.spawn_surfaces + 1 ] = vine_group
+
+ local selection_box = { type = "wallmounted", }
+ local drawtype = 'signlike'
+ if ( not biome.spawn_on_side ) then
+ --different properties for bottom and side vines.
+ selection_box = { type = "fixed", fixed = { -0.4, -1/2, -0.4, 0.4, 1/2, 0.4 }, }
+ drawtype = 'plantlike'
+ end
+
+ minetest.register_node( vine_name_end, {
+ description = defs.description,
+ walkable = false,
+ climbable = true,
+ wield_image = vine_image_end,
+ drop = "",
+ sunlight_propagates = true,
+ paramtype = "light",
+ paramtype2 = "wallmounted",
+ buildable_to = true,
+ tiles = { vine_image_end },
+ drawtype = drawtype,
+ inventory_image = vine_image_end,
+ groups = groups,
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = selection_box,
+ on_construct = function( pos )
+ local timer = minetest.get_node_timer( pos )
+ timer:start( math.random(5, 10) )
+ end,
+ on_timer = function( pos )
+ local node = minetest.get_node( pos )
+ local bottom = {x=pos.x, y=pos.y-1, z=pos.z}
+ local bottom_node = minetest.get_node( bottom )
+ if bottom_node.name == "air" then
+ if not ( math.random( defs.average_length ) == 1 ) then
+ minetest.set_node( pos, { name = vine_name_middle, param2 = node.param2 } )
+ minetest.set_node( bottom, { name = node.name, param2 = node.param2 } )
+ local timer = minetest.get_node_timer( bottom_node )
+ timer:start( math.random(5, 10) )
+ end
+ end
+ end,
+ after_dig_node = function(pos, node, oldmetadata, user)
+ vines.dig_vine( pos, drop_node, user )
+ end
+ })
+
+
+ minetest.register_node( vine_name_middle, {
+ description = "Matured "..defs.description,
+ walkable = false,
+ climbable = true,
+ drop = "",
+ sunlight_propagates = true,
+ paramtype = "light",
+ paramtype2 = "wallmounted",
+ buildable_to = true,
+ tiles = { vine_image_middle },
+ wield_image = vine_image_middle,
+ drawtype = drawtype,
+ inventory_image = vine_image_middle,
+ groups = groups,
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = selection_box,
+ on_destruct = function( pos )
+ local node = minetest.get_node( pos )
+ local bottom = {x=pos.x, y=pos.y-1, z=pos.z}
+ local bottom_node = minetest.get_node( bottom )
+ if minetest.get_item_group( bottom_node.name, "vines") then
+ minetest.remove_node( bottom )
+ end
+ end,
+ after_dig_node = function( pos, node, oldmetadata, user )
+ vines.dig_vine( pos, drop_node, user )
+ end
+ })
+
+ biome_lib:spawn_on_surfaces( biome )
+
+ local override_nodes = function( nodes, defs )
+ local function override( index, registered )
+ local node = nodes[ index ]
+ if index > #nodes then return registered end
+ if minetest.registered_nodes[node] then
+ minetest.override_item( node, defs )
+ registered[#registered+1] = node
+ end
+ override( index+1, registered )
+ end
+ override( 1, {} )
+ end
+
+ override_nodes( biome.spawn_surfaces,{
+ after_destruct = function( pos )
+ local pos_min = { x = pos.x -1, y = pos.y - 1, z = pos.z - 1 }
+ local pos_max = { x = pos.x +1, y = pos.y + 1, z = pos.z + 1 }
+ local positions = minetest.find_nodes_in_area( pos_min, pos_max, "group:vines" )
+ for index, position in pairs(positions) do
+ minetest.remove_node( position )
+ end
+ end
+ })
+
+end
+
+vines.dig_vine = function( pos, node_name, user )
+ --only dig give the vine if shears are used
+ if not user then return false end
+ local wielded = user:get_wielded_item()
+ if 'vines:shears' == wielded:get_name() then
+ local inv = user:get_inventory()
+ if inv then
+ inv:add_item("main", ItemStack( node_name ))
+ end
+ end
+end
diff --git a/plantlife_modpack/vines/init.lua b/plantlife_modpack/vines/init.lua
new file mode 100644
index 0000000..72eda93
--- /dev/null
+++ b/plantlife_modpack/vines/init.lua
@@ -0,0 +1,14 @@
+vines = {
+ name = 'vines',
+ recipes = {}
+}
+
+dofile( minetest.get_modpath( vines.name ) .. "/functions.lua" )
+dofile( minetest.get_modpath( vines.name ) .. "/aliases.lua" )
+dofile( minetest.get_modpath( vines.name ) .. "/recipes.lua" )
+dofile( minetest.get_modpath( vines.name ) .. "/crafts.lua" )
+dofile( minetest.get_modpath( vines.name ) .. "/nodes.lua" )
+dofile( minetest.get_modpath( vines.name ) .. "/shear.lua" )
+dofile( minetest.get_modpath( vines.name ) .. "/vines.lua" )
+
+print("[Vines] Loaded!")
diff --git a/plantlife_modpack/vines/nodes.lua b/plantlife_modpack/vines/nodes.lua
new file mode 100644
index 0000000..9d7df00
--- /dev/null
+++ b/plantlife_modpack/vines/nodes.lua
@@ -0,0 +1,83 @@
+minetest.register_node("vines:rope_block", {
+ description = "Rope",
+ sunlight_propagates = true,
+ paramtype = "light",
+ tiles = {
+ "default_wood.png^vines_rope.png",
+ "default_wood.png^vines_rope.png",
+ "default_wood.png",
+ "default_wood.png",
+ "default_wood.png^vines_rope.png",
+ "default_wood.png^vines_rope.png",
+ },
+ groups = { flammable=2, choppy=2, oddly_breakable_by_hand=1 },
+ after_place_node = function(pos)
+ local p = {x=pos.x, y=pos.y-1, z=pos.z}
+ local n = minetest.get_node(p)
+ if n.name == "air" then
+ minetest.add_node(p, {name="vines:rope_end"})
+ end
+ end,
+ after_dig_node = function(pos, node, digger)
+ local p = {x=pos.x, y=pos.y-1, z=pos.z}
+ local n = minetest.get_node(p)
+ while ( n.name == 'vines:rope' or n.name == 'vines:rope_end' ) do
+ minetest.remove_node(p)
+ p = {x=p.x, y=p.y-1, z=p.z}
+ n = minetest.get_node(p)
+ end
+ end
+})
+
+minetest.register_node("vines:rope", {
+ description = "Rope",
+ walkable = false,
+ climbable = true,
+ sunlight_propagates = true,
+ paramtype = "light",
+ drop = "",
+ tiles = { "vines_rope.png" },
+ drawtype = "plantlike",
+ groups = {flammable=2, not_in_creative_inventory=1},
+ sounds = default.node_sound_leaves_defaults(),
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+ },
+})
+
+minetest.register_node("vines:rope_end", {
+ description = "Rope",
+ walkable = false,
+ climbable = true,
+ sunlight_propagates = true,
+ paramtype = "light",
+ drop = "",
+ tiles = { "vines_rope_end.png" },
+ drawtype = "plantlike",
+ groups = {flammable=2, not_in_creative_inventory=1},
+ sounds = default.node_sound_leaves_defaults(),
+ after_place_node = function(pos)
+ yesh = {x = pos.x, y= pos.y-1, z=pos.z}
+ minetest.add_node(yesh, {name="vines:rope"})
+ end,
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+ },
+ on_construct = function( pos )
+ local timer = minetest.get_node_timer( pos )
+ timer:start( 1 )
+ end,
+ on_timer = function( pos, elapsed )
+ local p = {x=pos.x, y=pos.y-1, z=pos.z}
+ local n = minetest.get_node(p)
+ if n.name == "air" then
+ minetest.set_node(pos, {name="vines:rope"})
+ minetest.add_node(p, {name="vines:rope_end"})
+ else
+ local timer = minetest.get_node_timer( pos )
+ timer:start( 1 )
+ end
+ end
+})
diff --git a/plantlife_modpack/vines/recipes.lua b/plantlife_modpack/vines/recipes.lua
new file mode 100644
index 0000000..d2b928a
--- /dev/null
+++ b/plantlife_modpack/vines/recipes.lua
@@ -0,0 +1,12 @@
+vines.recipes['rope_block'] = {
+ {'', 'default:wood', ''},
+ {'', 'group:vines', ''},
+ {'', 'group:vines', ''}
+}
+
+vines.recipes['shears'] = {
+ {'', 'default:steel_ingot', ''},
+ {'default:stick', 'default:wood', 'default:steel_ingot'},
+ {'', '', 'default:stick'}
+}
+
diff --git a/plantlife_modpack/vines/shear.lua b/plantlife_modpack/vines/shear.lua
new file mode 100644
index 0000000..e6d915a
--- /dev/null
+++ b/plantlife_modpack/vines/shear.lua
@@ -0,0 +1,15 @@
+minetest.register_tool("vines:shears", {
+ description = "Shears",
+ inventory_image = "vines_shears.png",
+ wield_image = "vines_shears.png",
+ stack_max = 1,
+ max_drop_level=3,
+ tool_capabilities = {
+ full_punch_interval = 1.0,
+ max_drop_level=0,
+ groupcaps={
+ snappy={times={[3]=0.2}, maxwear=0.05, maxlevel=3},
+ wool={times={[3]=0.2}, maxwear=0.05, maxlevel=3}
+ }
+ },
+})
diff --git a/plantlife_modpack/vines/textures/vines_item.png b/plantlife_modpack/vines/textures/vines_item.png
new file mode 100644
index 0000000..c66242e
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_item.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_jungle_end.png b/plantlife_modpack/vines/textures/vines_jungle_end.png
new file mode 100644
index 0000000..6c8d339
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_jungle_end.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_jungle_middle.png b/plantlife_modpack/vines/textures/vines_jungle_middle.png
new file mode 100644
index 0000000..bf838a5
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_jungle_middle.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_root_end.png b/plantlife_modpack/vines/textures/vines_root_end.png
new file mode 100644
index 0000000..4fc3f87
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_root_end.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_root_middle.png b/plantlife_modpack/vines/textures/vines_root_middle.png
new file mode 100644
index 0000000..49f88c0
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_root_middle.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_rope.png b/plantlife_modpack/vines/textures/vines_rope.png
new file mode 100644
index 0000000..0045c4c
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_rope.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_rope_end.png b/plantlife_modpack/vines/textures/vines_rope_end.png
new file mode 100644
index 0000000..faf2c71
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_rope_end.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_shears.png b/plantlife_modpack/vines/textures/vines_shears.png
new file mode 100644
index 0000000..c4c39f9
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_shears.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_side_end.png b/plantlife_modpack/vines/textures/vines_side_end.png
new file mode 100644
index 0000000..5b3b28f
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_side_end.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_side_middle.png b/plantlife_modpack/vines/textures/vines_side_middle.png
new file mode 100644
index 0000000..2576e93
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_side_middle.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_vine_end.png b/plantlife_modpack/vines/textures/vines_vine_end.png
new file mode 100644
index 0000000..062857b
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_vine_end.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_vine_middle.png b/plantlife_modpack/vines/textures/vines_vine_middle.png
new file mode 100644
index 0000000..8afffe8
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_vine_middle.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_willow_end.png b/plantlife_modpack/vines/textures/vines_willow_end.png
new file mode 100644
index 0000000..b5b8e59
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_willow_end.png
Binary files differ
diff --git a/plantlife_modpack/vines/textures/vines_willow_middle.png b/plantlife_modpack/vines/textures/vines_willow_middle.png
new file mode 100644
index 0000000..ca0b831
--- /dev/null
+++ b/plantlife_modpack/vines/textures/vines_willow_middle.png
Binary files differ
diff --git a/plantlife_modpack/vines/vines.lua b/plantlife_modpack/vines/vines.lua
new file mode 100644
index 0000000..82c5b2a
--- /dev/null
+++ b/plantlife_modpack/vines/vines.lua
@@ -0,0 +1,104 @@
+vines.register_vine( 'root', {
+ description = "Roots",
+ average_length = 9,
+},{
+ choose_random_wall = true,
+ avoid_nodes = {"vines:root_middle"},
+ avoid_radius = 5,
+ spawn_delay = 500,
+ spawn_chance = 10,
+ spawn_surfaces = {
+ "default:dirt_with_grass",
+ "default:dirt"
+ },
+ spawn_on_bottom = true,
+ plantlife_limit = -0.6,
+ humidity_min = 0.4,
+})
+
+vines.register_vine( 'vine', {
+ description = "Vines",
+ average_length = 5,
+},{
+ choose_random_wall = true,
+ avoid_nodes = {"group:vines"},
+ avoid_radius = 5,
+ spawn_delay = 500,
+ spawn_chance = 100,
+ spawn_surfaces = {
+ "default:jungleleaves",
+ "moretrees:jungletree_leaves_red",
+ "moretrees:jungletree_leaves_yellow",
+ "moretrees:jungletree_leaves_green"
+ },
+ spawn_on_bottom = true,
+ plantlife_limit = -0.9,
+ humidity_min = 0.7,
+})
+
+vines.register_vine( 'side', {
+ description = "Vines",
+ average_length = 6,
+},{
+ choose_random_wall = true,
+ avoid_nodes = {"group:vines", "default:apple"},
+ choose_random_wall = true,
+ avoid_radius = 3,
+ spawn_delay = 500,
+ spawn_chance = 100,
+ spawn_surfaces = {
+ "default:jungleleaves",
+ "moretrees:jungletree_leaves_red",
+ "moretrees:jungletree_leaves_yellow",
+ "moretrees:jungletree_leaves_green"
+ },
+ spawn_on_side = true,
+ plantlife_limit = -0.9,
+ humidity_min = 0.4,
+})
+
+vines.register_vine( "jungle", {
+ description = "Jungle Vines",
+ average_length = 7,
+},{
+ choose_random_wall = true,
+ neighbors = {
+ "default:jungleleaves",
+ "moretrees:jungletree_leaves_red",
+ "moretrees:jungletree_leaves_yellow",
+ "moretrees:jungletree_leaves_green"
+ },
+ avoid_nodes = {
+ "vines:jungle_middle",
+ "vines:jungle_end",
+ },
+ avoid_radius = 5,
+ spawn_delay = 500,
+ spawn_chance = 100,
+ spawn_surfaces = {
+ "default:jungletree",
+ "moretrees:jungletree_trunk"
+ },
+ spawn_on_side = true,
+ plantlife_limit = -0.9,
+ humidity_min = 0.2,
+})
+
+vines.register_vine( 'willow', {
+ description = "Willow Vines",
+ average_length = 9,
+},{
+ choose_random_wall = true,
+ avoid_nodes = { "vines:willow_middle" },
+ avoid_radius = 5,
+ near_nodes = { 'default:water_source' },
+ near_nodes_size = 1,
+ near_nodes_count = 1,
+ near_nodes_vertical = 7,
+ plantlife_limit = -0.8,
+ spawn_chance = 10,
+ spawn_delay = 500,
+ spawn_on_side = true,
+ spawn_surfaces = {"moretrees:willow_leaves"},
+ humidity_min = 0.5
+})
diff --git a/plantlife_modpack/woodsoils/depends.txt b/plantlife_modpack/woodsoils/depends.txt
new file mode 100644
index 0000000..c95a2bf
--- /dev/null
+++ b/plantlife_modpack/woodsoils/depends.txt
@@ -0,0 +1,7 @@
+default
+biome_lib
+bushes?
+ferns?
+moretrees?
+trees?
+trunks? \ No newline at end of file
diff --git a/plantlife_modpack/woodsoils/generating.lua b/plantlife_modpack/woodsoils/generating.lua
new file mode 100644
index 0000000..1d03ed7
--- /dev/null
+++ b/plantlife_modpack/woodsoils/generating.lua
@@ -0,0 +1,151 @@
+-- generating of forest soils
+
+local RaDiuS = {
+-- WE1 NS1 WE2 NS2 WE3 NS3
+ {-1,-2, -2,-2, -2,-3},
+ { 0,-2, -3,-1, -3,-2},
+ { 1,-2, -3, 0, -4,-1},
+ {-2,-1, -3, 1, -4, 0},
+ {-1,-1, -2, 2, -4, 1},
+ { 0,-1, -1, 3, -3, 2},
+ { 1,-1, 0, 3, -2, 3},
+ { 2,-1, 1, 3, -1, 4},
+ {-2, 0, 2, 2, 0, 4},
+ {-1, 0, 3, 1, 1, 4},
+ { 0, 0, 3, 0, 2, 3},
+ { 1, 0, 3,-1, 3, 2},
+ { 2, 0, 2,-2, 4, 1},
+ {-2, 1, 1,-3, 4, 0},
+ {-1, 1, 0,-3, 4,-1},
+ { 0, 1, -1,-3, 3,-2},
+ { 1, 1, 0, 0, 2,-3},
+ { 2, 1, 0, 0, 1,-4},
+ {-1, 2, 0, 0, 0,-4},
+ { 0, 2, 0, 0, -1,-4},
+ { 1, 2, 0, 0, 0, 0},
+}
+-- e = + , n = +
+abstract_woodsoils.place_soil = function(pos)
+
+ if minetest.get_item_group(minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name, "soil") > 0
+ or minetest.get_item_group(minetest.get_node({x=pos.x,y=pos.y-2,z=pos.z}).name, "soil") > 0 then
+ for i in pairs(RaDiuS) do
+ local WE1 = RaDiuS[i][1]
+ local NS1 = RaDiuS[i][2]
+ local WE2 = RaDiuS[i][3]
+ local NS2 = RaDiuS[i][4]
+ local WE3 = RaDiuS[i][5]
+ local NS3 = RaDiuS[i][6]
+ local radius_1a = {x=pos.x+WE1,y=pos.y-1,z=pos.z+NS1}
+ local radius_1b = {x=pos.x+WE1,y=pos.y-2,z=pos.z+NS1}
+ local radius_2a = {x=pos.x+WE2,y=pos.y-1,z=pos.z+NS2}
+ local radius_2b = {x=pos.x+WE2,y=pos.y-2,z=pos.z+NS2}
+ local radius_3a = {x=pos.x+WE3,y=pos.y-1,z=pos.z+NS3}
+ local radius_3b = {x=pos.x+WE3,y=pos.y-2,z=pos.z+NS3}
+ --local node_1a = minetest.get_node(radius_1a)
+ --local node_1b = minetest.get_node(radius_1b)
+ local node_2a = minetest.get_node(radius_2a)
+ local node_2b = minetest.get_node(radius_2b)
+ local node_3a = minetest.get_node(radius_3a)
+ local node_3b = minetest.get_node(radius_3b)
+ -- Dirt with Leaves 1
+ if minetest.get_item_group(minetest.get_node(radius_1a).name, "soil") > 0 then
+ minetest.set_node(radius_1a, {name="woodsoils:dirt_with_leaves_1"})
+ end
+ if minetest.get_item_group(minetest.get_node(radius_1b).name, "soil") > 0 then
+ minetest.set_node(radius_1b, {name="woodsoils:dirt_with_leaves_1"})
+ end
+ -- Grass with Leaves 2
+ if string.find(node_2a.name, "dirt_with_grass") then
+ minetest.set_node(radius_2a, {name="woodsoils:grass_with_leaves_2"})
+ end
+ if string.find(node_2b.name, "dirt_with_grass") then
+ minetest.set_node(radius_2b, {name="woodsoils:grass_with_leaves_2"})
+ end
+ -- Grass with Leaves 1
+ if string.find(node_3a.name, "dirt_with_grass") then
+ minetest.set_node(radius_3a, {name="woodsoils:grass_with_leaves_1"})
+ end
+ if string.find(node_3b.name, "dirt_with_grass") then
+ minetest.set_node(radius_3b, {name="woodsoils:grass_with_leaves_1"})
+ end
+ end
+ end
+end
+
+biome_lib:register_generate_plant({
+ surface = {
+ "group:tree",
+ "ferns:fern_03",
+ "ferns:fern_02",
+ "ferns:fern_01"
+ },
+ max_count = 1000,
+ rarity = 1,
+ min_elevation = 1,
+ max_elevation = 40,
+ near_nodes = {"group:tree","ferns:fern_03","ferns:fern_02","ferns:fern_01"},
+ near_nodes_size = 5,
+ near_nodes_vertical = 1,
+ near_nodes_count = 4,
+ plantlife_limit = -1,
+ check_air = false,
+ },
+ "abstract_woodsoils.place_soil"
+)
+
+biome_lib:register_generate_plant({
+ surface = {
+ "moretrees:apple_tree_sapling_ongen",
+ "moretrees:beech_sapling_ongen",
+ "moretrees:birch_sapling_ongen",
+ "moretrees:fir_sapling_ongen",
+ "moretrees:jungletree_sapling_ongen",
+ "moretrees:oak_sapling_ongen",
+ "moretrees:palm_sapling_ongen",
+ "moretrees:rubber_tree_sapling_ongen",
+ "moretrees:sequoia_sapling_ongen",
+ "moretrees:spruce_sapling_ongen",
+ "moretrees:willow_sapling_ongen"
+ },
+ max_count = 1000,
+ rarity = 2,
+ min_elevation = 1,
+ max_elevation = 40,
+ plantlife_limit = -0.9,
+ check_air = false,
+ },
+ "abstract_woodsoils.place_soil"
+)
+
+minetest.register_abm({
+ nodenames = {"default:papyrus"},
+ neighbors = {
+ "woodsoils:dirt_with_leaves_1",
+ "woodsoils:dirt_with_leaves_2",
+ "woodsoils:grass_with_leaves_1",
+ "woodsoils:grass_with_leaves_2"
+ },
+ interval = 50,
+ chance = 20,
+ action = function(pos, node)
+ pos.y = pos.y-1
+ local name = minetest.get_node(pos).name
+ if string.find(name, "_with_leaves_") then
+ if minetest.find_node_near(pos, 3, {"group:water"}) == nil then
+ return
+ end
+ pos.y = pos.y+1
+ local height = 0
+ while minetest.get_node(pos).name == "default:papyrus" and height < 4 do
+ height = height+1
+ pos.y = pos.y+1
+ end
+ if height < 4 then
+ if minetest.get_node(pos).name == "air" then
+ minetest.set_node(pos, {name="default:papyrus"})
+ end
+ end
+ end
+ end,
+})
diff --git a/plantlife_modpack/woodsoils/init.lua b/plantlife_modpack/woodsoils/init.lua
new file mode 100644
index 0000000..9037d45
--- /dev/null
+++ b/plantlife_modpack/woodsoils/init.lua
@@ -0,0 +1,29 @@
+-----------------------------------------------------------------------------------------------
+local title = "Wood Soils" -- former "Forest Soils"
+local version = "0.0.9"
+local mname = "woodsoils" -- former "forestsoils"
+-----------------------------------------------------------------------------------------------
+
+abstract_woodsoils = {}
+
+dofile(minetest.get_modpath("woodsoils").."/nodes.lua")
+dofile(minetest.get_modpath("woodsoils").."/generating.lua")
+
+-- felt like playing a bit :D
+--[[print(" _____ __")
+print("_/ ____\\___________ ____ _______/ |_")
+print("\\ __\\/ _ \\_ __ \\_/ __ \\ / ___/\\ __\\")
+print(" | | ( <_> ) | \\/\\ ___/ \\___ \\ | |")
+print(" |__| \\____/|__| \\___ >____ > |__|")
+print(" \\/ \\/")
+
+print(" .__.__")
+print(" __________ |__| | ______")
+print(" / ___/ _ \\| | | / ___/")
+print(" \\___ ( <_> ) | |__\\___ \\")
+print("/____ >____/|__|____/____ >")
+print(" \\/ \\/")]]
+
+-----------------------------------------------------------------------------------------------
+print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
+----------------------------------------------------------------------------------------------- \ No newline at end of file
diff --git a/plantlife_modpack/woodsoils/nodes.lua b/plantlife_modpack/woodsoils/nodes.lua
new file mode 100644
index 0000000..e80c522
--- /dev/null
+++ b/plantlife_modpack/woodsoils/nodes.lua
@@ -0,0 +1,79 @@
+-- nodes
+
+minetest.register_node("woodsoils:dirt_with_leaves_1", {
+ description = "Forest Soil 1",
+ tiles = {
+ "default_dirt.png^woodsoils_ground_cover.png",
+ "default_dirt.png",
+ "default_dirt.png^woodsoils_ground_cover_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},
+ }),
+})
+
+minetest.register_node("woodsoils:dirt_with_leaves_2", {
+ description = "Forest Soil 2",
+ tiles = {
+ "woodsoils_ground.png",
+ "default_dirt.png",
+ "default_dirt.png^woodsoils_ground_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},
+ }),
+})
+
+minetest.register_node("woodsoils:grass_with_leaves_1", {
+ description = "Forest Soil 3",
+ tiles = {
+ "default_grass.png^woodsoils_ground_cover2.png",
+ "default_dirt.png",
+ "default_dirt.png^default_grass_side.png^woodsoils_ground_cover_side2.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},
+ }),
+})
+
+minetest.register_node("woodsoils:grass_with_leaves_2", {
+ description = "Forest Soil 4",
+ tiles = {
+ "default_grass.png^woodsoils_ground_cover.png",
+ "default_dirt.png",
+ "default_dirt.png^default_grass_side.png^woodsoils_ground_cover_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},
+ }),
+})
+
+-- For compatibility with older stuff
+minetest.register_alias("forestsoils:dirt_with_leaves_1", "woodsoils:dirt_with_leaves_1")
+minetest.register_alias("forestsoils:dirt_with_leaves_2", "woodsoils:dirt_with_leaves_2")
+minetest.register_alias("forestsoils:grass_with_leaves_1", "woodsoils:grass_with_leaves_1")
+minetest.register_alias("forestsoils:grass_with_leaves_2", "woodsoils:grass_with_leaves_2")
diff --git a/plantlife_modpack/woodsoils/textures/credit_textures.txt b/plantlife_modpack/woodsoils/textures/credit_textures.txt
new file mode 100644
index 0000000..45d582d
--- /dev/null
+++ b/plantlife_modpack/woodsoils/textures/credit_textures.txt
@@ -0,0 +1,16 @@
+-------------------------------------------------------------
+Credit for textures of "woodsoils"
+-------------------------------------------------------------
+(If more than one author is listed the names are in alphabetical order)
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+FOLDER TEXTURE AUTHORS
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+../woodsoils/textures woodsoils_ground.png Mossmanikin
+ woodsoils_ground_cover.png Mossmanikin
+ woodsoils_ground_cover_side.png Mossmanikin
+ woodsoils_ground_cover_side2.png Mossmanikin
+ woodsoils_ground_cover2.png Mossmanikin
+ woodsoils_ground_side.png Mossmanikin
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+../woodsoils/textures/not in use woodsoils.png Mossmanikin
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/plantlife_modpack/woodsoils/textures/not in use/woodsoils.png b/plantlife_modpack/woodsoils/textures/not in use/woodsoils.png
new file mode 100644
index 0000000..67253bc
--- /dev/null
+++ b/plantlife_modpack/woodsoils/textures/not in use/woodsoils.png
Binary files differ
diff --git a/plantlife_modpack/woodsoils/textures/woodsoils_ground.png b/plantlife_modpack/woodsoils/textures/woodsoils_ground.png
new file mode 100644
index 0000000..907b345
--- /dev/null
+++ b/plantlife_modpack/woodsoils/textures/woodsoils_ground.png
Binary files differ
diff --git a/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover.png b/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover.png
new file mode 100644
index 0000000..103f103
--- /dev/null
+++ b/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover.png
Binary files differ
diff --git a/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover2.png b/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover2.png
new file mode 100644
index 0000000..ec18dd6
--- /dev/null
+++ b/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover2.png
Binary files differ
diff --git a/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover_side.png b/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover_side.png
new file mode 100644
index 0000000..d21f2b9
--- /dev/null
+++ b/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover_side.png
Binary files differ
diff --git a/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover_side2.png b/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover_side2.png
new file mode 100644
index 0000000..f4e4ce6
--- /dev/null
+++ b/plantlife_modpack/woodsoils/textures/woodsoils_ground_cover_side2.png
Binary files differ
diff --git a/plantlife_modpack/woodsoils/textures/woodsoils_ground_side.png b/plantlife_modpack/woodsoils/textures/woodsoils_ground_side.png
new file mode 100644
index 0000000..08fb4be
--- /dev/null
+++ b/plantlife_modpack/woodsoils/textures/woodsoils_ground_side.png
Binary files differ
diff --git a/plantlife_modpack/youngtrees/depends.txt b/plantlife_modpack/youngtrees/depends.txt
new file mode 100644
index 0000000..4e35179
--- /dev/null
+++ b/plantlife_modpack/youngtrees/depends.txt
@@ -0,0 +1,2 @@
+default
+biome_lib \ No newline at end of file
diff --git a/plantlife_modpack/youngtrees/init.lua b/plantlife_modpack/youngtrees/init.lua
new file mode 100644
index 0000000..183e86e
--- /dev/null
+++ b/plantlife_modpack/youngtrees/init.lua
@@ -0,0 +1,146 @@
+abstract_youngtrees = {}
+
+minetest.register_node("youngtrees:bamboo", {
+ description = "Young Bamboo Tree",
+ drawtype="nodebox",
+ tiles = {"bamboo.png"},
+ paramtype = "light",
+ walkable = false,
+ is_ground_content = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.058251,-0.500000,-0.413681,0.066749,0.500000,-0.282500}, --NodeBox 1
+ {-0.058251,-0.500000,-0.103123,0.066749,0.500000,0.038672}, --NodeBox 2
+ {-0.058251,-0.500000,0.181227,0.066749,0.500000,0.342500}, --NodeBox 3
+ }
+ },
+ groups = {snappy=3,flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+ drop = 'trunks:twig_1'
+})
+
+minetest.register_node("youngtrees:youngtree2_middle",{
+ description = "Young Tree 2 (middle)",
+ drawtype="nodebox",
+ tiles = {"youngtree2branch.png"},
+ inventory_image = "youngtree2branch.png",
+ wield_image = "youngtree2branch.png",
+ paramtype = "light",
+ walkable = false,
+ is_ground_content = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0.125000,-0.500000,-0.500000,0.500000,-0.187500,-0.125000}, --NodeBox 1
+ {-0.187500,-0.187500,-0.500000,0.500000,0.125000,0.250000}, --NodeBox 2
+ {-0.500000,0.125000,-0.500000,0.500000,0.500000,0.500000}, --NodeBox 3
+ }
+ },
+ groups = {snappy=3,flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+ drop = 'trunks:twig_1'
+})
+
+minetest.register_node("youngtrees:youngtree_top", {
+ description = "Young Tree (top)",
+ drawtype = "plantlike",
+ tiles = {"youngtree16xa.png"},
+ inventory_image = "youngtree16xa.png",
+ wield_image = "youngtree16xa.png",
+ paramtype = "light",
+ walkable = false,
+ is_ground_content = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+ groups = {snappy=3,flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+ drop = 'trunks:twig_1'
+})
+
+
+minetest.register_node("youngtrees:youngtree_middle", {
+ description = "Young Tree (middle)",
+ drawtype = "plantlike",
+ tiles = {"youngtree16xb.png"},
+ inventory_image = "youngtree16xb.png",
+ wield_image = "youngtree16xb.png",
+ paramtype = "light",
+ walkable = false,
+ is_ground_content = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+ groups = {snappy=3,flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+ drop = 'trunks:twig_1'
+})
+
+
+
+minetest.register_node("youngtrees:youngtree_bottom", {
+ description = "Young Tree (bottom)",
+ drawtype = "plantlike",
+ tiles = {"youngtree16xc.png"},
+ inventory_image = "youngtree16xc.png",
+ wield_image = "youngtree16xc.png",
+ paramtype = "light",
+ walkable = false,
+ is_ground_content = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
+ },
+ groups = {snappy=3,flammable=2},
+ sounds = default.node_sound_leaves_defaults(),
+ drop = 'trunks:twig_1'
+})
+
+
+ abstract_youngtrees.grow_youngtree = function(pos)
+ local height = math.random(1,3)
+ abstract_youngtrees.grow_youngtree_node(pos,height)
+end
+
+abstract_youngtrees.grow_youngtree_node = function(pos, height)
+
+
+ local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
+ local above_right_here = {x=pos.x, y=pos.y+2, z=pos.z}
+
+ if minetest.get_node(right_here).name == "air" -- instead of check_air = true,
+ or minetest.get_node(right_here).name == "default:junglegrass" then
+ if height == 1 then
+ minetest.set_node(right_here, {name="youngtrees:youngtree_top"})
+ end
+ if height == 2 then
+ minetest.set_node(right_here, {name="youngtrees:youngtree_bottom"})
+ minetest.set_node(above_right_here, {name="youngtrees:youngtree_top"})
+ end
+ if height == 3 then
+ local two_above_right_here = {x=pos.x, y=pos.y+3, z=pos.z}
+ minetest.set_node(right_here, {name="youngtrees:youngtree_bottom"})
+ minetest.set_node(above_right_here, {name="youngtrees:youngtree_middle"})
+ minetest.set_node(two_above_right_here, {name="youngtrees:youngtree_top"})
+ end
+ end
+end
+
+
+biome_lib:register_generate_plant({
+ surface = {
+ "default:dirt_with_grass",
+ "stoneage:grass_with_silex",
+ "sumpf:peat",
+ "sumpf:sumpf"
+ },
+ max_count = 55, --10,15
+ rarity = 101 - 4, --3,4
+ min_elevation = 1, -- above sea level
+ plantlife_limit = -0.9,
+ },
+ abstract_youngtrees.grow_youngtree
+)
diff --git a/plantlife_modpack/youngtrees/textures/bamboo.png b/plantlife_modpack/youngtrees/textures/bamboo.png
new file mode 100644
index 0000000..018d42e
--- /dev/null
+++ b/plantlife_modpack/youngtrees/textures/bamboo.png
Binary files differ
diff --git a/plantlife_modpack/youngtrees/textures/unused/sapling.png b/plantlife_modpack/youngtrees/textures/unused/sapling.png
new file mode 100644
index 0000000..a3d5127
--- /dev/null
+++ b/plantlife_modpack/youngtrees/textures/unused/sapling.png
Binary files differ
diff --git a/plantlife_modpack/youngtrees/textures/unused/sapling16x.png b/plantlife_modpack/youngtrees/textures/unused/sapling16x.png
new file mode 100644
index 0000000..45b86ee
--- /dev/null
+++ b/plantlife_modpack/youngtrees/textures/unused/sapling16x.png
Binary files differ
diff --git a/plantlife_modpack/youngtrees/textures/youngtree16xa.png b/plantlife_modpack/youngtrees/textures/youngtree16xa.png
new file mode 100644
index 0000000..9bba623
--- /dev/null
+++ b/plantlife_modpack/youngtrees/textures/youngtree16xa.png
Binary files differ
diff --git a/plantlife_modpack/youngtrees/textures/youngtree16xb.png b/plantlife_modpack/youngtrees/textures/youngtree16xb.png
new file mode 100644
index 0000000..d83b7a3
--- /dev/null
+++ b/plantlife_modpack/youngtrees/textures/youngtree16xb.png
Binary files differ
diff --git a/plantlife_modpack/youngtrees/textures/youngtree16xc.png b/plantlife_modpack/youngtrees/textures/youngtree16xc.png
new file mode 100644
index 0000000..cfe3cf1
--- /dev/null
+++ b/plantlife_modpack/youngtrees/textures/youngtree16xc.png
Binary files differ
diff --git a/plantlife_modpack/youngtrees/textures/youngtree2branch.png b/plantlife_modpack/youngtrees/textures/youngtree2branch.png
new file mode 100644
index 0000000..89b2f23
--- /dev/null
+++ b/plantlife_modpack/youngtrees/textures/youngtree2branch.png
Binary files differ