1
0
mirror of https://codeberg.org/tenplus1/bonemeal.git synced 2025-07-19 08:30:25 +02:00

2 Commits

23 changed files with 469 additions and 923 deletions

213
README.md
View File

@ -1,200 +1,37 @@
minetest mod Bonemeal Bonemeal mod [bonemeal]
=====================
FARM mod that helps and featured the farming to quickly grow samplings, crops, grass, etc
Information
-----------
Bonemeal is crushed from bones found in dirt or by using player bones, Mulch is
made from a tree trunk surrounded by leaves and Fertiliser is a mix of both,
each of which can be used to quickly grow saplings, crops and grass/decoration,
papyrus on top of dirt and cactus on sand.
Support for ethereal saplings/crops, farming redo crops and moretrees saplings are included.
![](screenshot.jpg)
## Technical info
This mod is named `bonemeal` and must be installed with such name.
This mod adds four new items into the game, bones which can be dug from normal This mod adds four new items into the game, bones which can be dug from normal
dirt which can be cooked into bonemeal, mulch which is is crafted using a tree dirt which can be made into bonemeal, mulch which is is crafted using a tree and
and 8x leaves, and fertiliser which is a mixture of them both. 8x leaves, and fertiliser which is a mixture of them both.
Each item can be used on saplings and crops for a chance to grow them quicker Each item can be used on saplings and crops for a chance to grow them quicker as
as well as dirt which will generate random grass, flowers or whichever well as dirt which will generate random grass, flowers or whichever decoration
decoration is registered. is registered.
Mulch has a strength of 1, Bonemeal 2 and Fertiliser 3. This means the stronger Mulch has a strength of 1, Bonemeal 2 and Fertiliser 3 which means the stronger
the item, the more chance of growing saplings in low light, making crops sprout the item, the more chance of growing saplings in low light, making crops sprout
quicker or simply decorate a larger area with grass and flowers. quicker or simply decorate a larger area with grass and flowers.
#### Dependencies The api.txt document shows how to add your own saplings, crops and grasses to
the list by using one of the 3 commands included and the mod.lua file gives you
Dependencies: default many examples by using some of the popular mods available.
Optional Dependencies: farming, ethereal, moretrees, lucky_block, moretrees, flowers, dye, ferns, dryplants, df_trees, df_farming, df_primordial_items, everness
Lucky Blocks: 6
#### API
The [`api.txt`](api.txt) document shows how to add your own saplings,
crops and grasses to the list by using one of the 3 commands included and
the [`mod.lua`](mod.lua) file gives you many examples by using some of the
popular mods available.
https://forum.minetest.net/viewtopic.php?f=9&t=16446 https://forum.minetest.net/viewtopic.php?f=9&t=16446
#### Nodes Changelog:
| Node name | description | notes | - 0.1 - Initial release
| ----------------------- | ------------ | --------------------------------------------------- | - 0.2 - Added global on_use function for bonemeal growth
| bonemeal:mulch | Mulch | fertilizer to make grow plants and seeds faster | - 0.3 - Added strength to on_use global for new items (mulch and fertiliser)
| bonemeal:bonemeal | Bone Meal | 2 x fertilizer to make grow plants and seeds faster | - 0.4 - Added Intllib support and fr.txt file
| bonemeal:fertiliser | Fertiliser | 3 x fertilizer to make grow plants and seeds faster | - 0.5 - Added support for default bush and acacia bush saplings
| bonemeal:bone | Bone | cook to made fertilizers, found into dirt rarelly | - 0.6 - Using newer functions, Minetest 0.4.16 and above needed to run
| bone:bone | Player bones | cook to made fertilizers, found into dirt rarelly | - 0.7 - Can be used on papyrus and cactus now, added coral recipe, api addition
| bonemeal:gelatin_powder | Gelatin Powder | made from bones | - 0.8 - Added support for farming redo's new garlic, pepper and onion crops
- 0.9 - Added support for farming redo's pea and beetroot crops, checks for place_param
- 1.0 - add_deco() now adds to existing item list while set_deco() replaces item list (thanks h-v-smacker)
- 1.1 - Added {can_bonemeal=1} group for special nodes
- 1.2 - Added support for minetest 5.0 cactus seedling, blueberry bush sapling and emergent jungle tree saplings, additional flowers and pine bush sapling.
- 1.3 - Ability to craft dye from mulch, bonemeal and fertiliser (thanks orbea)
#### Crafts Lucky Blocks: 6
* bonemeal:gelatin_powder 4
```
{"group:bone", "group:bone", "group:bone"},
{"bucket:bucket_water", "bucket:bucket_water", "bucket:bucket_water"},
{"bucket:bucket_water", "default:torch", "bucket:bucket_water"}
```
* bonemeal:bonemeal 2
```
{{"group:bone"}}
```
* bonemeal:bonemeal 4
```
{{"bones:bones"}}
```
* bonemeal:bonemeal 2
```
{{"default:coral_skeleton"}}
```
* bonemeal:mulch 4
```
{"group:tree", "group:leaves", "group:leaves"},
{"group:leaves", "group:leaves", "group:leaves"},
{"group:leaves", "group:leaves", "group:leaves"}
```
* bonemeal:mulch
```
{"group:seed", "group:seed", "group:seed"},
{"group:seed", "group:seed", "group:seed"},
{"group:seed", "group:seed", "group:seed"}
```
* fertiliser 2
```
{{"bonemeal:bonemeal", "bonemeal:mulch"}}
```
## Changelog
#### Version 0.1
* Initial release
#### Version 0.2
* Added global `on_use` function for bonemeal growth
#### Version 0.3
* Added strength to `on_use` global for new items (mulch and fertiliser)
#### Version 0.4
* Added `Intllib` support and `fr.txt` file for French translation.
#### Version 0.5
* Added support for default bush and acacia bush saplings
#### Version 0.6
* Using newer functions. This means Minetest 0.4.16 and above needed to run
#### Version 0.7
* Can be used on papyrus and cactus now
* Added coral recipe
* API addition
#### Version 0.8
* Added support for farming redo's new garlic
* Added pepper and onion crops
#### Version 0.9
* Added support for farming redo's pea and beetroot crops
* Checks for `place_param`
#### Version 1.0
* `add_deco()` now adds to existing item list while `set_deco()` replaces item
list (thanks `h-v-smacker`)
#### Version 1.1
* Added `{can_bonemeal=1}` group for special nodes
#### Version 1.2
* Added support for Minetest 5.0 cactus seedling, blueberry bush sapling and
emergent jungle tree saplings, additional flowers and pine bush sapling
#### Version 1.3
* Added ability to craft dye from mulch, bonemeal and fertiliser (thanks
`orbea`)
#### Version 1.4
* Added support for fern saplings from `plantlife` mod (thanks `nixnoxus`)
#### Version 1.5
* Added support for farming redo's asparagus, eggplant, spinach
#### Version 1.6
* Added helper function for position and protection check
* Added ginger support
* Added moretrees poplar sapling
#### Version 1.7
* Added farming redo's barley, hemp, rye, oat, mint, sunflower, rice seeds
* Added Everness saplings
* Update readme (thanks mckaygerhard)
* Recipe changes, player bones craft into 2x bones, bones must be cooked to
give bonemeal
* Added bushes_classic support
## LICENSE
Licence: Code is MIT, Media is CC0
(c) Tenplus1

View File

@ -15,7 +15,7 @@ Adding Crops
------------ ------------
bonemeal:add_crop({ bonemeal:add_crop({
{ nodename_start, growing_steps, seed_name, ignore_light } { nodename_start, growing_steps, seed_name }
}) })
This command is used to add new crops for bonemeal to work on. This command is used to add new crops for bonemeal to work on.
@ -25,7 +25,6 @@ e.g.
bonemeal:add_crop({ bonemeal:add_crop({
{"farming:cotton_", 8, "farming:seed_cotton"}, {"farming:cotton_", 8, "farming:seed_cotton"},
{"farming:wheat_", 8, "farming:seed_wheat"}, {"farming:wheat_", 8, "farming:seed_wheat"},
{"mymod:dark_wheat_", 8, "mymod:dark_wheat_seed", true}, -- can grow in darkness
}) })
@ -33,7 +32,7 @@ Adding Saplings
--------------- ---------------
bonemeal:add_sapling({ bonemeal:add_sapling({
{ sapling_node, function, soil_type["sand", "dirt", nodename, "group:"], ignore_light } { sapling_node, function, soil_type[sand, dirt, nodename] }
}) })
This command will add new saplings for bonemeal to grow on sand, soil or a This command will add new saplings for bonemeal to grow on sand, soil or a
@ -42,7 +41,6 @@ specified node type.
bonemeal:add_sapling({ bonemeal:add_sapling({
{"ethereal:palm_sapling", ethereal.grow_palm_tree, "soil"}, {"ethereal:palm_sapling", ethereal.grow_palm_tree, "soil"},
{"ethereal:palm_sapling", ethereal.grow_palm_tree, "sand"}, {"ethereal:palm_sapling", ethereal.grow_palm_tree, "sand"},
{"mymod:dark_tree", mymod.dark_tree, "group:soil", true}, -- can grow in darkness
}) })

9
depends.txt Normal file
View File

@ -0,0 +1,9 @@
default
intllib?
farming?
ethereal?
moretrees?
technic_worldgen?
lucky_block?
flowers?
dye?

1
description.txt Normal file
View File

@ -0,0 +1 @@
Adds bone and bonemeal giving the ability to quickly grow plants and saplings.

627
init.lua
View File

@ -1,45 +1,104 @@
-- MineClonia / VoxeLibre check bonemeal = {}
local mcl = core.get_modpath("mcl_core") local path = minetest.get_modpath("bonemeal")
-- global
bonemeal = {
item_list = {
bucket_water = mcl and "mcl_buckets:bucket_water" or "bucket:bucket_water",
bucket_empty = mcl and "mcl_buckets:bucker_empty" or "bucket:bucket_empty",
dirt = mcl and "mcl_core:dirt" or "default:dirt",
torch = mcl and "mcl_torches:torch" or "default:torch",
coral = mcl and "mcl_ocean:dead_horn_coral_block" or "default:coral_skeleton"
}
}
-- translation support and vars
local S = core.get_translator("bonemeal")
local a = bonemeal.item_list
local path = core.get_modpath("bonemeal")
local min, max, random = math.min, math.max, math.random local min, max, random = math.min, math.max, math.random
-- creative check helper
local creative_mode_cache = core.settings:get_bool("creative_mode") -- Load support for intllib.
function bonemeal.is_creative(name) local S, NS = dofile(path .. "/intllib.lua")
return creative_mode_cache or core.check_player_privs(name, {creative = true})
-- creative check
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
function is_creative(name)
return creative_mode_cache or minetest.check_player_privs(name, {creative = true})
end end
-- API tables
local crops = {} -- default crops
local saplings = {} local crops = {
local deco = {} {"farming:cotton_", 8, "farming:seed_cotton"},
{"farming:wheat_", 8, "farming:seed_wheat"}
}
-- particle effect
-- special pine check for nearby snow
local function pine_grow(pos)
if minetest.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
default.grow_new_snowy_pine_tree(pos)
else
default.grow_new_pine_tree(pos)
end
end
-- default saplings
local saplings = {
{"default:sapling", default.grow_new_apple_tree, "soil"},
{"default:junglesapling", default.grow_new_jungle_tree, "soil"},
{"default:emergent_jungle_sapling", default.grow_new_emergent_jungle_tree, "soil"},
{"default:acacia_sapling", default.grow_new_acacia_tree, "soil"},
{"default:aspen_sapling", default.grow_new_aspen_tree, "soil"},
{"default:pine_sapling", pine_grow, "soil"},
{"default:bush_sapling", default.grow_bush, "soil"},
{"default:acacia_bush_sapling", default.grow_acacia_bush, "soil"},
{"default:large_cactus_seedling", default.grow_large_cactus, "sand"},
{"default:blueberry_bush_sapling", default.grow_blueberry_bush, "soil"},
{"default:pine_bush_sapling", default.grow_pine_bush, "soil"}
}
-- helper tables ( "" denotes a blank item )
local green_grass = {
"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5", "", ""
}
local dry_grass = {
"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
"default:dry_grass_5", "", ""
}
-- add all in-game flowers except waterlily
local flowers = {}
for node, def in pairs(minetest.registered_nodes) do
if def.groups.flower and not node:find("waterlily") then
flowers[#flowers + 1] = node
end
end
-- add additional bakedclay flowers if enabled
if minetest.get_modpath("bakedclay") then
flowers[#flowers + 1] = "bakedclay:delphinium"
flowers[#flowers + 1] = "bakedclay:thistle"
flowers[#flowers + 1] = "bakedclay:lazarus"
flowers[#flowers + 1] = "bakedclay:mannagrass"
flowers[#flowers + 1] = ""
end
-- default biomes deco
local deco = {
{"default:dirt_with_dry_grass", dry_grass, flowers},
{"default:sand", {}, {"default:dry_shrub", "", "", ""} },
{"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} },
{"default:silver_sand", {}, {"default:dry_shrub", "", "", ""} },
}
--
-- local functions
--
-- particles
local function particle_effect(pos) local function particle_effect(pos)
core.add_particlespawner({ minetest.add_particlespawner({
amount = 4, amount = 4,
time = 0.15, time = 0.15,
minpos = pos, minpos = pos,
@ -52,153 +111,149 @@ local function particle_effect(pos)
maxexptime = 1, maxexptime = 1,
minsize = 1, minsize = 1,
maxsize = 3, maxsize = 3,
texture = "bonemeal_particle.png", texture = "bonemeal_particle.png"
glow = 5
}) })
end end
-- tree type check
-- tree type check
local function grow_tree(pos, object) local function grow_tree(pos, object)
if type(object) == "table" and object.axiom then if type(object) == "table" and object.axiom then
-- grow L-system tree
minetest.remove_node(pos)
minetest.spawn_tree(pos, object)
core.remove_node(pos) elseif type(object) == "string" and minetest.registered_nodes[object] then
core.spawn_tree(pos, object) -- grow L-system tree -- place node
minetest.set_node(pos, {name = object})
elseif type(object) == "string" and core.registered_nodes[object] then
core.set_node(pos, {name = object}) -- place node
elseif type(object) == "function" then elseif type(object) == "function" then
-- function
object(pos) -- execute function object(pos)
end end
end end
-- sapling check
local function check_sapling(pos, sapling_node, strength, light_ok) -- sapling check
local function check_sapling(pos, nodename)
-- what is sapling placed on? -- what is sapling placed on?
local under = core.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) local under = minetest.get_node({
x = pos.x,
y = pos.y - 1,
z = pos.z
})
local can_grow, grow_on local can_grow, grow_on
-- check list for sapling and function -- check list for sapling and function
for n = 1, #saplings do for n = 1, #saplings do
if saplings[n][1] == sapling_node then if saplings[n][1] == nodename then
grow_on = saplings[n][3] or "" grow_on = saplings[n][3]
-- backwards compatibility, add 'group:' to older grouping -- sapling grows on top of specific node
if grow_on == "soil" or grow_on == "sand" then if grow_on
grow_on = "group:" .. grow_on and grow_on ~= "soil"
end and grow_on ~= "sand"
and grow_on == under.name then
-- sapling grows on top of specific node group
if grow_on:find("group:") then
local group = grow_on:split(":")[2]
if core.get_item_group(under.name, group) > 0 then
can_grow = true
end
-- sapling grows on specific node
elseif grow_on == under.name then
can_grow = true can_grow = true
end end
-- check if we can grow sapling at current light level -- sapling grows on top of soil (default)
if can_grow and (light_ok or saplings[n][4] == true) then if can_grow == nil
and (grow_on == nil or grow_on == "soil")
and minetest.get_item_group(under.name, "soil") > 0 then
can_grow = true
end
-- sapling grows on top of sand
if can_grow == nil
and grow_on == "sand"
and minetest.get_item_group(under.name, "sand") > 0 then
can_grow = true
end
-- check if we can grow sapling
if can_grow then
particle_effect(pos) particle_effect(pos)
grow_tree(pos, saplings[n][2])
if math.random(5 - strength) == 1 then return
grow_tree(pos, saplings[n][2])
end
return true
end end
end end
end end
end end
-- crops check
local function check_crops(pos, nodename, strength, light_ok) -- crops check
local function check_crops(pos, nodename, strength)
local mod, crop, stage, nod, def local mod, crop, stage, nod, def
-- grow registered crops -- grow registered crops
for n = 1, #crops do for n = 1, #crops do
-- check if crop can grow in current light level if nodename:find(crops[n][1])
if (light_ok or crops[n][4] == true) or nodename == crops[n][3] then
and (nodename:find(crops[n][1])
or nodename == crops[n][3]) then
-- separate mod and node name -- separate mod and node name
mod = nodename:split(":")[1] .. ":" mod = nodename:split(":")[1] .. ":"
crop = nodename:split(":")[2] crop = nodename:split(":")[2]
-- get stage number or set to 0 for seed -- get stage number or set to 0 for seed
if crop:split("_")[3] then stage = tonumber( crop:split("_")[2] ) or 0
stage = crop:split("_")[3]
else
stage = crop:split("_")[2]
end
stage = tonumber(stage) or 0
stage = min(stage + strength, crops[n][2]) stage = min(stage + strength, crops[n][2])
-- check for place_param setting -- check for place_param setting
nod = crops[n][1] .. stage nod = crops[n][1] .. stage
def = core.registered_nodes[nod] def = minetest.registered_nodes[nod]
-- make sure crop exists or isn't fully grown already
if not def or nod == nodename then
return false
end
def = def and def.place_param2 or 0 def = def and def.place_param2 or 0
core.set_node(pos, {name = nod, param2 = def}) minetest.set_node(pos, {name = nod, param2 = def})
particle_effect(pos) particle_effect(pos)
core.get_node_timer(pos):start(10) -- restart any timers return
return true
end end
end end
end end
-- check soil for specific decoration placement
-- check soil for specific decoration placement
local function check_soil(pos, nodename, strength) local function check_soil(pos, nodename, strength)
-- set radius according to strength -- set radius according to strength
local side = strength - 1 local side = strength - 1
local tall = max(strength - 2, 0) local tall = max(strength - 2, 0)
local floor
local groups = minetest.registered_items[nodename]
and minetest.registered_items[nodename].groups or {}
-- only place decoration on one type of surface
if groups.soil then
floor = {"group:soil"}
elseif groups.sand then
floor = {"group:sand"}
else
floor = {nodename}
end
-- get area of land with free space above -- get area of land with free space above
local dirt = core.find_nodes_in_area_under_air( local dirt = minetest.find_nodes_in_area_under_air(
{x = pos.x - side, y = pos.y - tall, z = pos.z - side}, {x = pos.x - side, y = pos.y - tall, z = pos.z - side},
{x = pos.x + side, y = pos.y + tall, z = pos.z + side}, {nodename}) {x = pos.x + side, y = pos.y + tall, z = pos.z + side}, floor)
-- set default grass and decoration -- set default grass and decoration
local grass, decor local grass = green_grass
local decor = flowers
-- choose grass and decoration to use on dirt patch -- choose grass and decoration to use on dirt patch
for n = 1, #deco do for n = 1, #deco do
-- do we have a grass match? -- do we have a grass match?
if nodename == deco[n][1] then if nodename == deco[n][1] then
grass = deco[n][2] or {} grass = deco[n][2] or {}
decor = deco[n][3] or {} decor = deco[n][3] or {}
end end
@ -210,20 +265,15 @@ local function check_soil(pos, nodename, strength)
for _, n in pairs(dirt) do for _, n in pairs(dirt) do
if random(5) == 5 then if random(5) == 5 then
if decor and #decor > 0 then if decor and #decor > 0 then
-- place random decoration (rare) -- place random decoration (rare)
local dnum = #decor or 1 local dnum = #decor or 1
nod = decor[random(dnum)] or "" nod = decor[random(dnum)] or ""
end end
else else
if grass and #grass > 0 then if grass and #grass > 0 then
-- place random grass (common) -- place random grass (common)
local dgra = #grass or 1 local dgra = #grass or 1
nod = #grass > 0 and grass[random(dgra)] or "" nod = #grass > 0 and grass[random(dgra)] or ""
end end
end end
@ -235,57 +285,28 @@ local function check_soil(pos, nodename, strength)
if nod and nod ~= "" then if nod and nod ~= "" then
-- get crop param2 value -- get crop param2 value
def = core.registered_nodes[nod] def = minetest.registered_nodes[nod]
def = def and def.place_param2 def = def and def.place_param2
-- if param2 not preset then get from existing node -- if param2 not preset then get from existing node
if not def then if not def then
local node = minetest.get_node_or_nil(pos2)
local node = core.get_node_or_nil(pos2)
def = node and node.param2 or 0 def = node and node.param2 or 0
end end
core.set_node(pos2, {name = nod, param2 = def}) minetest.set_node(pos2, {name = nod, param2 = def})
end end
particle_effect(pos2) particle_effect(pos2)
end end
end end
-- helper function
local function use_checks(user, pointed_thing) -- global functions
-- make sure we use on node
if pointed_thing.type ~= "node" then return false end
-- get position and node info
local pos = pointed_thing.under
local node = core.get_node(pos)
local def = core.registered_items[node.name]
local dirt = def and def.groups
-- does node have groups set
if not dirt then return false end
-- if we're using on ground, move position up
if dirt.soil or dirt.sand or dirt.can_bonemeal then
pos = pointed_thing.above
end
-- check if protected
if core.is_protected(pos, user:get_player_name()) then
return false
end
return node
end
--= Global functions
-- add to sapling list -- add to sapling list
-- {sapling node, schematic or function name, "soil"|"sand"|specific_node|"group:"} -- {sapling node, schematic or function name, "soil"|"sand"|specific_node}
--e.g. {"default:sapling", default.grow_new_apple_tree, "soil"} --e.g. {"default:sapling", default.grow_new_apple_tree, "soil"}
function bonemeal:add_sapling(list) function bonemeal:add_sapling(list)
@ -295,10 +316,10 @@ function bonemeal:add_sapling(list)
end end
end end
-- add to crop list to force grow -- add to crop list to force grow
-- {crop name start_, growth steps, seed node (if required)} -- {crop name start_, growth steps, seed node (if required)}
-- e.g. {"farming:wheat_", 8, "farming:seed_wheat"} -- e.g. {"farming:wheat_", 8, "farming:seed_wheat"}
function bonemeal:add_crop(list) function bonemeal:add_crop(list)
for n = 1, #list do for n = 1, #list do
@ -306,12 +327,12 @@ function bonemeal:add_crop(list)
end end
end end
-- add grass and flower/plant decoration for specific dirt types -- add grass and flower/plant decoration for specific dirt types
-- {dirt_node, {grass_nodes}, {flower_nodes} -- {dirt_node, {grass_nodes}, {flower_nodes}
-- e.g. {"default:dirt_with_dry_grass", dry_grass, flowers} -- e.g. {"default:dirt_with_dry_grass", dry_grass, flowers}
-- if an entry already exists for a given dirt type, it will add new entries and all empty -- if an entry already exists for a given dirt type, it will add new entries and all empty
-- entries, allowing to both add decorations and decrease their frequency. -- entries, allowing to both add decorations and decrease their frequency.
function bonemeal:add_deco(list) function bonemeal:add_deco(list)
for l = 1, #list do for l = 1, #list do
@ -329,7 +350,8 @@ function bonemeal:add_deco(list)
for _, entry in pairs(deco[n][2]) do for _, entry in pairs(deco[n][2]) do
if extra == entry then if extra == entry then
extra = false ; break extra = false
break
end end
end end
end end
@ -347,7 +369,8 @@ function bonemeal:add_deco(list)
for __, entry in pairs(deco[n][3]) do for __, entry in pairs(deco[n][3]) do
if extra == entry then if extra == entry then
extra = false ; break extra = false
break
end end
end end
end end
@ -357,33 +380,7 @@ function bonemeal:add_deco(list)
end end
end end
list[l] = false ; break
end
end
if list[l] then
deco[#deco + 1] = list[l]
end
end
end
-- definitively set a decration scheme
-- this function will either add a new entry as is, or replace the existing one
function bonemeal:set_deco(list)
for l = 1, #list do
for n = 1, #deco do
-- replace existing entry
if list[l][1] == deco[n][1] then
deco[n][2] = list[l][2]
deco[n][3] = list[l][3]
list[l] = false list[l] = false
break break
end end
end end
@ -394,15 +391,41 @@ function bonemeal:set_deco(list)
end end
end end
-- global on_use function for bonemeal
-- definitively set a decration scheme
-- this function will either add a new entry as is, or replace the existing one
function bonemeal:set_deco(list)
for l = 1, #list do
for n = 1, #deco do
-- replace existing entry
if list[l][1] == deco[n][1] then
deco[n][2] = list[l][2]
deco[n][3] = list[l][3]
list[l] = false
break
end
end
if list[l] then
deco[#deco + 1] = list[l]
end
end
end
-- global on_use function for bonemeal
function bonemeal:on_use(pos, strength, node) function bonemeal:on_use(pos, strength, node)
-- get node pointed at -- get node pointed at
local node = node or core.get_node(pos) local node = node or minetest.get_node(pos)
-- return if nothing there -- return if nothing there
if node.name == "ignore" then return end if node.name == "ignore" then
return
end
-- make sure strength is between 1 and 4 -- make sure strength is between 1 and 4
strength = strength or 1 strength = strength or 1
@ -413,244 +436,230 @@ function bonemeal:on_use(pos, strength, node)
if node.name == "default:papyrus" then if node.name == "default:papyrus" then
default.grow_papyrus(pos, node) default.grow_papyrus(pos, node)
particle_effect(pos)
particle_effect(pos) ; return true return
elseif node.name == "default:cactus" then elseif node.name == "default:cactus" then
default.grow_cactus(pos, node) default.grow_cactus(pos, node)
particle_effect(pos)
particle_effect(pos) ; return true return
elseif node.name == "default:dry_dirt" and strength == 1 then
core.set_node(pos, {name = "default:dry_dirt_with_dry_grass"})
particle_effect(pos) ; return true
end end
-- grow grass and flowers -- grow grass and flowers
if core.get_item_group(node.name, "soil") > 0 if minetest.get_item_group(node.name, "soil") > 0
or core.get_item_group(node.name, "sand") > 0 or minetest.get_item_group(node.name, "sand") > 0
or core.get_item_group(node.name, "can_bonemeal") > 0 then or minetest.get_item_group(node.name, "can_bonemeal") > 0 then
check_soil(pos, node.name, strength) check_soil(pos, node.name, strength)
return
return true
end end
-- light check depending on strength (strength of 4 = no light needed) -- light check depending on strength (strength of 4 = no light needed)
local light_ok = true if (minetest.get_node_light(pos) or 0) < (12 - (strength * 3)) then
return
if (core.get_node_light(pos) or 0) < (12 - (strength * 3)) then
light_ok = nil
end end
-- check for sapling growth -- check for tree growth if pointing at sapling
if check_sapling(pos, node.name, strength, light_ok) then if minetest.get_item_group(node.name, "sapling") > 0
return true and random(5 - strength) == 1 then
check_sapling(pos, node.name)
return
end end
-- check for crop growth -- check for crop growth
if check_crops(pos, node.name, strength, light_ok) then check_crops(pos, node.name, strength)
return true
end
end end
--= Items
--
-- items
--
-- mulch (strength 1) -- mulch (strength 1)
minetest.register_craftitem("bonemeal:mulch", {
core.register_craftitem("bonemeal:mulch", {
description = S("Mulch"), description = S("Mulch"),
inventory_image = "bonemeal_mulch.png", inventory_image = "bonemeal_mulch.png",
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
-- use helper function to do checks and return position and node -- did we point at a node?
local node = use_checks(user, pointed_thing) if pointed_thing.type ~= "node" then
return
if node then
-- call global on_use function with strength of 1
local used = bonemeal:on_use(pointed_thing.under, 1, node)
-- take item if not in creative
if used and not bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
end end
-- is area protected?
if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
return
end
-- take item if not in creative
if not is_creative(user:get_player_name()) then
itemstack:take_item()
end
-- call global on_use function with strength of 1
bonemeal:on_use(pointed_thing.under, 1)
return itemstack return itemstack
end end
}) })
-- bonemeal (strength 2)
core.register_craftitem("bonemeal:bonemeal", { -- bonemeal (strength 2)
minetest.register_craftitem("bonemeal:bonemeal", {
description = S("Bone Meal"), description = S("Bone Meal"),
inventory_image = "bonemeal_item.png", inventory_image = "bonemeal_item.png",
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
-- use helper function to do checks and return position and node -- did we point at a node?
local node = use_checks(user, pointed_thing) if pointed_thing.type ~= "node" then
return
if node then
-- call global on_use function with strength of 2
local used = bonemeal:on_use(pointed_thing.under, 2, node)
-- take item if not in creative
if used and not bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
end end
-- is area protected?
if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
return
end
-- take item if not in creative
if not is_creative(user:get_player_name()) then
itemstack:take_item()
end
-- call global on_use function with strength of 2
bonemeal:on_use(pointed_thing.under, 2)
return itemstack return itemstack
end end
}) })
-- fertiliser (strength 3)
core.register_craftitem("bonemeal:fertiliser", { -- fertiliser (strength 3)
minetest.register_craftitem("bonemeal:fertiliser", {
description = S("Fertiliser"), description = S("Fertiliser"),
inventory_image = "bonemeal_fertiliser.png", inventory_image = "bonemeal_fertiliser.png",
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
-- use helper function to do checks and return position and node -- did we point at a node?
local node = use_checks(user, pointed_thing) if pointed_thing.type ~= "node" then
return
if node then
-- call global on_use function with strength of 3
local used = bonemeal:on_use(pointed_thing.under, 3, node)
-- take item if not in creative
if used and not bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
end end
-- is area protected?
if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
return
end
-- take item if not in creative
if not is_creative(user:get_player_name()) then
itemstack:take_item()
end
-- call global on_use function with strength of 3
bonemeal:on_use(pointed_thing.under, 3)
return itemstack return itemstack
end end
}) })
-- bone
core.register_craftitem("bonemeal:bone", { -- bone
minetest.register_craftitem("bonemeal:bone", {
description = S("Bone"), description = S("Bone"),
inventory_image = "bonemeal_bone.png", inventory_image = "bonemeal_bone.png",
groups = {bone = 1} groups = {bone = 1}
}) })
-- gelatin powder -- gelatin powder
minetest.register_craftitem("bonemeal:gelatin_powder", {
core.register_craftitem("bonemeal:gelatin_powder", {
description = S("Gelatin Powder"), description = S("Gelatin Powder"),
inventory_image = "bonemeal_gelatin_powder.png", inventory_image = "bonemeal_gelatin_powder.png",
groups = {food_gelatin = 1, flammable = 2} groups = {food_gelatin = 1, flammable = 2}
}) })
--= Recipes
--
-- crafting recipes
--
-- gelatin powder -- gelatin powder
minetest.register_craft({
core.register_craft({
output = "bonemeal:gelatin_powder 4", output = "bonemeal:gelatin_powder 4",
recipe = { recipe = {
{"group:bone", "group:bone", "group:bone"}, {"group:bone", "group:bone", "group:bone"},
{a.bucket_water, a.bucket_water, a.bucket_water}, {"bucket:bucket_water", "bucket:bucket_water", "bucket:bucket_water"},
{a.bucket_water, a.torch, a.bucket_water} {"bucket:bucket_water", "default:torch", "bucket:bucket_water"},
}, },
replacements = { replacements = {
{a.bucket_water, a.bucket_empty .. " 5"} {"bucket:bucket_water", "bucket:bucket_empty 5"},
} }
}) })
-- bonemeal (from bone) -- bonemeal (from bone)
minetest.register_craft({
core.register_craft({ type = "shapeless",
type = "cooking",
output = "bonemeal:bonemeal 2", output = "bonemeal:bonemeal 2",
recipe = "group:bone", recipe = {"group:bone"}
cooktime = 4
}) })
-- bonemeal (from player bones) -- bonemeal (from player bones)
minetest.register_craft({
if core.settings:get_bool("bonemeal.disable_deathbones_recipe") ~= true then type = "shapeless",
output = "bonemeal:bonemeal 4",
core.register_craft({ recipe = {"bones:bones"}
output = "bonemeal:bone 2", })
recipe = {{"bones:bones"}}
})
end
-- bonemeal (from coral skeleton) -- bonemeal (from coral skeleton)
minetest.register_craft({
core.register_craft({ type = "shapeless",
output = "bonemeal:bonemeal 2", output = "bonemeal:bonemeal 2",
recipe = {{a.coral}} recipe = {"default:coral_skeleton"}
}) })
-- mulch -- mulch
minetest.register_craft({
core.register_craft({ type = "shapeless",
output = "bonemeal:mulch 4", output = "bonemeal:mulch 4",
recipe = { recipe = {
{"group:tree", "group:leaves", "group:leaves"}, "group:tree", "group:leaves", "group:leaves",
{"group:leaves", "group:leaves", "group:leaves"}, "group:leaves", "group:leaves", "group:leaves",
{"group:leaves", "group:leaves", "group:leaves"} "group:leaves", "group:leaves", "group:leaves"
}
})
core.register_craft({
output = "bonemeal:mulch",
recipe = {
{"group:seed", "group:seed", "group:seed"},
{"group:seed", "group:seed", "group:seed"},
{"group:seed", "group:seed", "group:seed"}
} }
}) })
-- fertiliser -- fertiliser
minetest.register_craft({
core.register_craft({ type = "shapeless",
output = "bonemeal:fertiliser 2", output = "bonemeal:fertiliser 2",
recipe = {{"bonemeal:bonemeal", "bonemeal:mulch"}} recipe = {"bonemeal:bonemeal", "bonemeal:mulch"}
}) })
-- add bones to dirt -- add bones to dirt
local drop = minetest.registered_items["default:dirt"].drop
if core.registered_items[a.dirt] then if drop then
table.insert(drop.items, 1, {items = {"bonemeal:bone"}, rarity = 30})
core.override_item(a.dirt, { else
drop = { drop = {
max_items = 1, max_items = 1,
items = { items = {
{ {
items = {"bonemeal:bone"}, items = {"bonemeal:bone"},
rarity = 40 rarity = 40
}, },
{ {
items = {a.dirt} items = {"default:dirt"}
}
} }
} }
}) }
end end
-- add support for mods -- add support for other mods
dofile(path .. "/mods.lua") dofile(path .. "/mods.lua")
dofile(path .. "/lucky_block.lua")
-- lucky block support print (S("[MOD] bonemeal loaded"))
if core.get_modpath("lucky_block") then
dofile(path .. "/lucky_block.lua")
end
print ("[MOD] Bonemeal loaded")

45
intllib.lua Normal file
View File

@ -0,0 +1,45 @@
-- Fallback functions for when `intllib` is not installed.
-- Code released under Unlicense <http://unlicense.org>.
-- Get the latest version of this file at:
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
local function format(str, ...)
local args = { ... }
local function repl(escape, open, num, close)
if escape == "" then
local replacement = tostring(args[tonumber(num)])
if open == "" then
replacement = replacement..close
end
return replacement
else
return "@"..open..num..close
end
end
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
end
local gettext, ngettext
if minetest.get_modpath("intllib") then
if intllib.make_gettext_pair then
-- New method using gettext.
gettext, ngettext = intllib.make_gettext_pair()
else
-- Old method using text files.
gettext = intllib.Getter()
end
end
-- Fill in missing functions.
gettext = gettext or function(msgid, ...)
return format(msgid, ...)
end
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
return format(n==1 and msgid or msgid_plural, ...)
end
return gettext, ngettext

View File

@ -19,6 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
Textures by TenPlus1 (CC0)

View File

@ -1,6 +0,0 @@
# textdomain:bonemeal
Bone=Knochen
Bone Meal=Knochenmehl
Fertiliser=Dünger
Gelatin Powder=Gelatinepulver
Mulch=Mulch

View File

@ -1,6 +0,0 @@
# textdomain:bonemeal
#Bone=
#Bone Meal=
#Fertiliser=
#Gelatin Powder=
#Mulch=

View File

@ -1,6 +0,0 @@
# textdomain:bonemeal
Bone=Hueso
Bone Meal=Comida de hueso
Fertiliser=Fertilizante
#Gelatin Powder=
Mulch=Mantillo

View File

@ -1,6 +0,0 @@
# textdomain:bonemeal
Bone=Os
Bone Meal=Poudre d'os
Fertiliser=Engrais
Gelatin Powder=Poudre de gélatine
Mulch=Paillis

View File

@ -1,6 +0,0 @@
# textdomain:bonemeal
Bone=Ossa
Bone Meal=Pasto osseo
Fertiliser=Fertilizzante
#Gelatin Powder=
Mulch=Pacciame

View File

@ -1,6 +0,0 @@
# textdomain:bonemeal
Bone=Кость
Bone Meal=Костная Мука
Fertiliser=Удобрение
#Gelatin Powder=
Mulch=Мульча

View File

@ -1,10 +0,0 @@
# textdomain: bonemeal
Bonemeal=Кісткове борошно
Adds bone and bonemeal giving the ability to quickly grow plants and saplings.=Додає кістки та кісткове борошно, що дає можливість швидко вирощувати рослини та саджанці.
Bone=Кістка
Bone Meal=Кісткове борошно
Fertiliser=Добриво
Gelatin Powder=Желатиновий порошок
Mulch=Мульча

7
locale/fr.txt Normal file
View File

@ -0,0 +1,7 @@
# init.lua
Mulch = Paillis
Bone Meal = Poudre d'os
Fertiliser = Engrais
Bone = Os
[MOD] bonemeal loaded = [MOD] bonemeal chargé

7
locale/ru.txt Normal file
View File

@ -0,0 +1,7 @@
# init.lua
Mulch = Мульча
Bone Meal = Костная Мука
Fertiliser = Удобрение
Bone = Кость
[MOD] bonemeal loaded = [MOD] костная мука загружена

7
locale/template.txt Normal file
View File

@ -0,0 +1,7 @@
# init.lua
Mulch =
Bone Meal =
Fertiliser =
Bone =
[bonemeal] loaded =

View File

@ -1,26 +1,29 @@
-- helper function -- add lucky blocks
local function growy(pos, player) local function growy(pos, player)
local dpos = core.find_node_near(pos, 1, "group:soil") local dpos = minetest.find_node_near(pos, 1, "group:soil")
if dpos then if dpos then
bonemeal:on_use(dpos, 5) bonemeal:on_use(dpos, 5)
end end
end end
-- add lucky blocks
lucky_block:add_blocks({ if minetest.get_modpath("lucky_block") then
{"lig"},
{"dro", {"bonemeal:mulch"}, 10}, lucky_block:add_blocks({
{"dro", {"bonemeal:bonemeal"}, 10}, {"lig"},
{"dro", {"bonemeal:fertiliser"}, 10}, {"dro", {"bonemeal:mulch"}, 10},
{"cus", growy}, {"dro", {"bonemeal:bonemeal"}, 10},
{"nod", "default:chest", 0, { {"dro", {"bonemeal:fertiliser"}, 10},
{name = "bonemeal:mulch", max = 20}, {"cus", growy},
{name = "bonemeal:bonemeal", max = 15}, {"nod", "default:chest", 0, {
{name = "bonemeal:fertiliser", max = 10} {name = "bonemeal:mulch", max = 20},
}} {name = "bonemeal:bonemeal", max = 15},
}) {name = "bonemeal:fertiliser", max = 10},
}},
})
end

View File

@ -1,4 +1 @@
name = bonemeal name = bonemeal
description = Adds bone and bonemeal giving the ability to quickly grow plants and saplings.
optional_depends = default, mcl_core, lucky_block, farming, ethereal, moretrees, technic_worldgen, flowers, dye, ferns, dryplants, df_trees, df_farming, df_primordial_items, everness
min_minetest_version = 5.0

381
mods.lua
View File

@ -1,111 +1,14 @@
-- craft bones from animalmaterials into bonemeal -- craft bones from animalmaterials into bonemeal
if minetest.get_modpath("animalmaterials") then
if core.get_modpath("animalmaterials") then minetest.register_craft({
type = "shapeless",
core.register_craft({
output = "bonemeal:bonemeal 2", output = "bonemeal:bonemeal 2",
recipe = {{"animalmaterials:bone"}} recipe = {"animalmaterials:bone"}
}) })
end end
-- default additions
if core.get_modpath("default") then
-- saplings
local function pine_grow(pos)
if core.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
default.grow_new_snowy_pine_tree(pos)
else
default.grow_new_pine_tree(pos)
end
end
local function cactus_grow(pos)
default.grow_cactus(pos, core.get_node(pos))
end
local function papyrus_grow(pos)
default.grow_papyrus(pos, core.get_node(pos))
end
bonemeal:add_sapling({
{"default:sapling", default.grow_new_apple_tree, "soil"},
{"default:junglesapling", default.grow_new_jungle_tree, "soil"},
{"default:emergent_jungle_sapling", default.grow_new_emergent_jungle_tree, "soil"},
{"default:acacia_sapling", default.grow_new_acacia_tree, "soil"},
{"default:aspen_sapling", default.grow_new_aspen_tree, "soil"},
{"default:pine_sapling", pine_grow, "soil"},
{"default:bush_sapling", default.grow_bush, "soil"},
{"default:acacia_bush_sapling", default.grow_acacia_bush, "soil"},
{"default:large_cactus_seedling", default.grow_large_cactus, "sand"},
{"default:blueberry_bush_sapling", default.grow_blueberry_bush, "soil"},
{"default:pine_bush_sapling", default.grow_pine_bush, "soil"},
{"default:cactus", cactus_grow, "sand"},
{"default:papyrus", papyrus_grow, "soil"}
})
-- decoration
local green_grass = {
"default:grass_2", "default:grass_3", "default:grass_4",
"default:grass_5", "", ""
}
local dry_grass = {
"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4",
"default:dry_grass_5", "", ""
}
local flowers = {}
-- add flowers from other mods
core.after(0.1, function()
for node, def in pairs(core.registered_nodes) do
if def.groups
and def.groups.flower
and not node:find("waterlily")
and not node:find("seaweed")
and not node:find("xdecor:potted_")
and not node:find("df_farming:") then
flowers[#flowers + 1] = node
end
end
end)
bonemeal:add_deco({
{"default:dirt", bonemeal.green_grass, flowers},
{"default:dirt_with_grass", green_grass, flowers},
{"default:dry_dirt", dry_grass, {}},
{"default:dry_dirt_with_dry_grass", dry_grass, {}},
{"default:dirt_with_dry_grass", dry_grass, flowers},
{"default:sand", {}, {"default:dry_shrub", "", "", ""} },
{"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} },
{"default:silver_sand", {}, {"default:dry_shrub", "", "", ""} },
{"default:dirt_with_rainforest_litter", {}, {"default:junglegrass", "", "", ""} },
{"default:dirt_with_coniferous_litter", {}, {"default:fern_1", "default:fern_2",
"default:fern_3", "", "", ""}}
})
end
-- default farming crops
if farming then
bonemeal:add_crop({
{"farming:cotton_", 8, "farming:seed_cotton"},
{"farming:wheat_", 8, "farming:seed_wheat"}
})
end
-- farming redo crops
if farming and farming.mod and farming.mod == "redo" then if farming and farming.mod and farming.mod == "redo" then
@ -123,39 +26,25 @@ if farming and farming.mod and farming.mod == "redo" then
{"farming:cucumber_", 4}, {"farming:cucumber_", 4},
{"farming:potato_", 4}, {"farming:potato_", 4},
{"farming:grapes_", 8}, {"farming:grapes_", 8},
{"farming:rhubarb_", 4}, {"farming:rhubarb_", 3},
{"farming:barley_", 8, "farming:seed_barley"}, {"farming:barley_", 7},
{"farming:hemp_", 8, "farming:seed_hemp"}, {"farming:hemp_", 8},
{"farming:chili_", 8}, {"farming:chili_", 8},
{"farming:garlic_", 5}, {"farming:garlic_", 5},
{"farming:onion_", 5}, {"farming:onion_", 5},
{"farming:pepper_", 7}, {"farming:pepper_", 5},
{"farming:pineapple_", 8}, {"farming:pineapple_", 8},
{"farming:pea_", 5}, {"farming:pea_", 5},
{"farming:beetroot_", 5}, {"farming:beetroot_", 5},
{"farming:rye_", 8, "farming:seed_rye"}, {"farming:rye_", 8},
{"farming:oat_", 8, "farming:seed_oat"}, {"farming:oat_", 8},
{"farming:rice_", 8, "farming:seed_rice"}, {"farming:rice_", 8},
{"farming:mint_", 4, "farming:seed_mint"}, {"farming:mint_", 4}
{"farming:cabbage_", 6},
{"farming:lettuce_", 5},
{"farming:blackberry_", 4},
{"farming:vanilla_", 8},
{"farming:soy_", 7},
{"farming:artichoke_", 5},
{"farming:parsley_", 3},
{"farming:sunflower_", 8, "farming:seed_sunflower"},
{"farming:asparagus_", 5},
{"farming:eggplant_", 4},
{"farming:spinach_", 4},
{"farming:ginger_", 4},
{"ethereal:strawberry_", 8}
}) })
end end
-- ethereal crops, saplings and grass
if core.get_modpath("ethereal") then if minetest.get_modpath("ethereal") then
bonemeal:add_crop({ bonemeal:add_crop({
{"ethereal:strawberry_", 8}, {"ethereal:strawberry_", 8},
@ -170,18 +59,12 @@ if core.get_modpath("ethereal") then
{"ethereal:banana_tree_sapling", ethereal.grow_banana_tree, "soil"}, {"ethereal:banana_tree_sapling", ethereal.grow_banana_tree, "soil"},
{"ethereal:frost_tree_sapling", ethereal.grow_frost_tree, "soil"}, {"ethereal:frost_tree_sapling", ethereal.grow_frost_tree, "soil"},
{"ethereal:mushroom_sapling", ethereal.grow_mushroom_tree, "soil"}, {"ethereal:mushroom_sapling", ethereal.grow_mushroom_tree, "soil"},
{"ethereal:mushroom_brown_sapling", ethereal.grow_mushroom_brown_tree, "soil"},
{"ethereal:willow_sapling", ethereal.grow_willow_tree, "soil"}, {"ethereal:willow_sapling", ethereal.grow_willow_tree, "soil"},
{"ethereal:redwood_sapling", ethereal.grow_redwood_tree, "soil"}, {"ethereal:redwood_sapling", ethereal.grow_redwood_tree, "soil"},
{"ethereal:giant_redwood_sapling", ethereal.grow_giant_redwood_tree, "soil"},
{"ethereal:orange_tree_sapling", ethereal.grow_orange_tree, "soil"}, {"ethereal:orange_tree_sapling", ethereal.grow_orange_tree, "soil"},
{"ethereal:bamboo_sprout", ethereal.grow_bamboo_tree, "soil"}, {"ethereal:bamboo_sprout", ethereal.grow_bamboo_tree, "soil"},
{"ethereal:birch_sapling", ethereal.grow_birch_tree, "soil"}, {"ethereal:birch_sapling", ethereal.grow_birch_tree, "soil"},
{"ethereal:sakura_sapling", ethereal.grow_sakura_tree, "soil"}, {"ethereal:sakura_sapling", ethereal.grow_sakura_tree, "soil"}
{"ethereal:lemon_tree_sapling", ethereal.grow_lemon_tree, "soil"},
{"ethereal:olive_tree_sapling", ethereal.grow_olive_tree, "soil"},
{"ethereal:basandra_bush_sapling", ethereal.grow_basandra_bush, "soil"},
{"ethereal:mangrove_sapling", ethereal.grow_mangrove_tree, "soil"}
}) })
local grass = {"default:grass_3", "default:grass_4", "default:grass_5", ""} local grass = {"default:grass_3", "default:grass_4", "default:grass_5", ""}
@ -194,24 +77,20 @@ if core.get_modpath("ethereal") then
"flowers:tulip", "flowers:viola", "ethereal:strawberry_7"}}, "flowers:tulip", "flowers:viola", "ethereal:strawberry_7"}},
{"ethereal:gray_dirt", {}, {"ethereal:snowygrass", "", ""}}, {"ethereal:gray_dirt", {}, {"ethereal:snowygrass", "", ""}},
{"ethereal:cold_dirt", {}, {"ethereal:snowygrass", "", ""}}, {"ethereal:cold_dirt", {}, {"ethereal:snowygrass", "", ""}},
{"ethereal:mushroom_dirt", {}, {"flowers:mushroom_red", "flowers:mushroom_brown", {"ethereal:mushroom_dirt", {}, {"flowers:mushroom_red", "flowers:mushroom_brown", "", "", ""}},
"ethereal:spore_grass", "ethereal:spore_grass", "", "", ""}},
{"ethereal:jungle_dirt", grass, {"default:junglegrass", "", "", ""}}, {"ethereal:jungle_dirt", grass, {"default:junglegrass", "", "", ""}},
{"ethereal:grove_dirt", grass, {"ethereal:fern", "", "", ""}}, {"ethereal:grove_dirt", grass, {"ethereal:fern", "", "", ""}},
{"ethereal:bamboo_dirt", grass, {}}, {"ethereal:bamboo_dirt", grass, {}}
{"ethereal:mud", {"default:fern_1", "default:fern_2", "default:fern_3", "", "",
"default:grass_5", "default:junglegrass"}, {"ethereal:bamboo"}}
}) })
end end
-- moretrees saplings
if core.get_modpath("moretrees") then if minetest.get_modpath("moretrees") then
-- special fir check for snow -- special fir check for snow
local function fir_grow(pos) local function fir_grow(pos)
if core.find_node_near(pos, 1, if minetest.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then {"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
moretrees.grow_fir_snow(pos) moretrees.grow_fir_snow(pos)
@ -225,40 +104,37 @@ if core.get_modpath("moretrees") then
{"moretrees:apple_tree_sapling", moretrees.spawn_apple_tree_object, "soil"}, {"moretrees:apple_tree_sapling", moretrees.spawn_apple_tree_object, "soil"},
{"moretrees:oak_sapling", moretrees.spawn_oak_object, "soil"}, {"moretrees:oak_sapling", moretrees.spawn_oak_object, "soil"},
{"moretrees:sequoia_sapling", moretrees.spawn_sequoia_object, "soil"}, {"moretrees:sequoia_sapling", moretrees.spawn_sequoia_object, "soil"},
--{"moretrees:birch_sapling", moretrees.spawn_birch_object, "soil"},
{"moretrees:birch_sapling", moretrees.grow_birch, "soil"}, {"moretrees:birch_sapling", moretrees.grow_birch, "soil"},
{"moretrees:palm_sapling", moretrees.spawn_palm_object, "soil"}, {"moretrees:palm_sapling", moretrees.spawn_palm_object, "soil"},
{"moretrees:palm_sapling", moretrees.spawn_palm_object, "sand"}, {"moretrees:palm_sapling", moretrees.spawn_palm_object, "sand"},
{"moretrees:date_palm_sapling", moretrees.spawn_date_palm_object, "soil"}, {"moretrees:date_palm_sapling", moretrees.spawn_date_palm_object, "soil"},
{"moretrees:date_palm_sapling", moretrees.spawn_date_palm_object, "sand"}, {"moretrees:date_palm_sapling", moretrees.spawn_date_palm_object, "sand"},
--{"moretrees:spruce_sapling", moretrees.spawn_spruce_object, "soil"},
{"moretrees:spruce_sapling", moretrees.grow_spruce, "soil"}, {"moretrees:spruce_sapling", moretrees.grow_spruce, "soil"},
{"moretrees:cedar_sapling", moretrees.spawn_cedar_object, "soil"}, {"moretrees:cedar_sapling", moretrees.spawn_cedar_object, "soil"},
{"moretrees:poplar_sapling", moretrees.spawn_poplar_object, "soil"}, {"moretrees:poplar_sapling", moretrees.spawn_poplar_object, "soil"},
{"moretrees:poplar_small_sapling", moretrees.spawn_poplar_small_object, "soil"},
{"moretrees:willow_sapling", moretrees.spawn_willow_object, "soil"}, {"moretrees:willow_sapling", moretrees.spawn_willow_object, "soil"},
{"moretrees:rubber_tree_sapling", moretrees.spawn_rubber_tree_object, "soil"}, {"moretrees:rubber_tree_sapling", moretrees.spawn_rubber_tree_object, "soil"},
{"moretrees:fir_sapling", fir_grow, "soil"} {"moretrees:fir_sapling", fir_grow, "soil"}
}) })
end
-- technic rubber tree elseif minetest.get_modpath("technic_worldgen") then
if core.get_modpath("technic_worldgen") then
bonemeal:add_sapling({ bonemeal:add_sapling({
{"moretrees:rubber_tree_sapling", technic.rubber_tree_model, "soil"} {"moretrees:rubber_tree_sapling", technic.rubber_tree_model, "soil"}
}) })
end end
-- caverealms mushroom
if core.get_modpath("caverealms") then if minetest.get_modpath("caverealms") then
local fil = core.get_modpath("caverealms") .. "/schematics/shroom.mts" local fil = minetest.get_modpath("caverealms") .. "/schematics/shroom.mts"
local add_shroom = function(pos) local add_shroom = function(pos)
core.swap_node(pos, {name = "air"}) minetest.swap_node(pos, {name = "air"})
core.place_schematic( minetest.place_schematic(
{x = pos.x - 5, y = pos.y, z = pos.z - 5}, fil, 0, nil, false) {x = pos.x - 5, y = pos.y, z = pos.z - 5}, fil, 0, nil, false)
end end
@ -267,46 +143,15 @@ if core.get_modpath("caverealms") then
}) })
end end
-- helper
local function y_func(grow_func) if minetest.get_modpath("dye") then
return function(pos)
grow_func({x = pos.x, y = pos.y - 1, z = pos.z})
end
end
-- ferns local bonemeal_dyes = {
bonemeal = "white", fertiliser = "green", mulch = "brown"}
if core.get_modpath("ferns") then
bonemeal:add_sapling({
{"ferns:sapling_giant_tree_fern",
y_func(abstract_ferns.grow_giant_tree_fern), "soil"},
{"ferns:sapling_giant_tree_fern",
y_func(abstract_ferns.grow_giant_tree_fern), "sand"},
{"ferns:sapling_tree_fern",
y_func(abstract_ferns.grow_tree_fern), "soil"}
})
end
-- dryplants sapling
if core.get_modpath("dryplants") then
bonemeal:add_sapling({
{"dryplants:reedmace_sapling", y_func(abstract_dryplants.grow_reedmace), "soil"}
})
end
-- add bonemeal dyes
if core.get_modpath("dye") then
local bonemeal_dyes = {bonemeal = "white", fertiliser = "green", mulch = "brown"}
for mat, dye in pairs(bonemeal_dyes) do for mat, dye in pairs(bonemeal_dyes) do
core.register_craft({ minetest.register_craft({
output = "dye:" .. dye .. " 4", output = "dye:" .. dye .. " 4",
recipe = { recipe = {
{"bonemeal:" .. mat} {"bonemeal:" .. mat}
@ -314,171 +159,3 @@ if core.get_modpath("dye") then
}) })
end end
end end
-- df_trees saplings
if core.get_modpath("df_trees") then
local function spore_tree_fix(pos)
core.remove_node(pos) ; df_trees.spawn_spore_tree(pos)
end
local function fungiwood_fix(pos)
core.remove_node(pos) ; df_trees.spawn_fungiwood(pos)
end
local function tunnel_fix(pos)
core.remove_node(pos) ; df_trees.spawn_tunnel_tube(pos)
end
local function black_cap_fix(pos)
core.remove_node(pos) ; df_trees.spawn_black_cap(pos)
end
local function goblin_cap_fix(pos)
core.remove_node(pos) ; df_trees.spawn_goblin_cap(pos)
end
local function tower_cap_fix(pos)
core.remove_node(pos) ; df_trees.spawn_tower_cap(pos)
end
local function nether_cap_fix(pos)
core.remove_node(pos) ; df_trees.spawn_nether_cap(pos)
end
bonemeal:add_sapling({
{"df_trees:black_cap_sapling", black_cap_fix, "soil", true},
{"df_trees:fungiwood_sapling", fungiwood_fix, "soil", true},
{"df_trees:goblin_cap_sapling", goblin_cap_fix, "soil", true},
{"df_trees:spore_tree_sapling", spore_tree_fix, "soil", true},
{"df_trees:tower_cap_sapling", tower_cap_fix, "soil", true},
{"df_trees:tunnel_tube_sapling", tunnel_fix, "soil", true},
{"df_trees:nether_cap_sapling", nether_cap_fix, "group:nether_cap", true},
{"df_trees:nether_cap_sapling", nether_cap_fix, "group:cools_lava", true}
})
end
-- df_farming crops
if core.get_modpath("df_farming") then
bonemeal:add_crop({
{"df_farming:cave_wheat_", 8, "df_farming:cave_wheat_seed", true},
{"df_farming:dimple_cup_", 4, "df_farming:dimple_cup_seed", true},
{"df_farming:pig_tail_", 8, "df_farming:pig_tail_seed", true},
{"df_farming:plump_helmet_", 4, "df_farming:plump_helmet_spawn", true},
{"df_farming:quarry_bush_", 5, "df_farming:quarry_bush_seed", true},
{"df_farming:sweet_pod_", 6, "df_farming:sweet_pod_seed", true}
})
end
-- df_primordial saplings and plants
if core.get_modpath("df_primordial_items") then
local function mush_fix(pos)
core.set_node(pos, {name = "air"})
mapgen_helper.place_schematic(pos,
df_primordial_items.get_primordial_mushroom(), (math.random(4) - 1) * 90)
end
local function fern_fix(pos)
core.set_node(pos, {name = "air"})
local rotations = {0, 90, 180, 270}
mapgen_helper.place_schematic(pos,
df_primordial_items.get_fern_schematic(), rotations[math.random(#rotations)])
end
local function blood_fix(pos)
df_trees.grow_blood_thorn(pos, core.get_node(pos))
end
bonemeal:add_sapling({
{"df_primordial_items:jungle_mushroom_sapling",
df_primordial_items.spawn_jungle_mushroom, "soil", true},
{"df_primordial_items:jungletree_sapling",
df_primordial_items.spawn_jungle_tree, "soil", true},
{"df_primordial_items:mush_sapling", mush_fix, "soil", true},
{"df_primordial_items:fern_sapling", fern_fix, "soil", true},
{"df_trees:blood_thorn", blood_fix, "sand", true}
})
local jgrass = {
"df_primordial_items:jungle_grass_1",
"df_primordial_items:jungle_grass_2",
"df_primordial_items:jungle_grass_3",
"df_primordial_items:fern_1",
"df_primordial_items:fern_2",
"", "", "", ""
}
local jdeco = {
"df_primordial_items:jungle_mushroom_1",
"df_primordial_items:jungle_mushroom_2",
"df_primordial_items:glow_plant_1",
"df_primordial_items:glow_plant_2",
"df_primordial_items:glow_plant_3",
"", "", ""
}
bonemeal:add_deco({
{"df_primordial_items:dirt_with_jungle_grass", jgrass, jdeco}
})
local fgrass = {
"df_primordial_items:fungal_grass_1",
"df_primordial_items:fungal_grass_2",
"", "", "", ""
}
local fdeco = {
"df_primordial_items:glow_orb_stalks",
"df_primordial_items:glow_pods",
"", "", ""
}
bonemeal:add_deco({
{"df_primordial_items:dirt_with_mycelium", fgrass, fdeco}
})
end
-- everness saplings
if core.get_modpath("everness") then
bonemeal:add_sapling({
{"everness:baobab_sapling", Everness.grow_baobab_tree, "soil"},
{"everness:coral_tree_bioluminescent_sapling",
Everness.coral_tree_bioluminescent, "soil"},
{"everness:coral_tree_sapling", Everness.grow_coral_tree, "soil"},
{"everness:crystal_bush_sapling", Everness.grow_crystal_bush, "soil"},
{"everness:crystal_tree_large_sapling", Everness.grow_crystal_large_tree, "soil"},
{"everness:crystal_tree_sapling", Everness.grow_crystal_tree, "soil"},
{"everness:cursed_bush_sapling", Everness.grow_cursed_bush, "soil"},
{"everness:cursed_dream_tree_sapling", Everness.grow_cursed_dream_tree, "soil"},
{"everness:dry_tree_sapling", Everness.grow_dry_tree, "soil"},
{"everness:sequoia_tree_sapling", Everness.grow_sequoia_tree, "soil"},
{"everness:willow_tree_sapling", Everness.grow_willow_tree, "soil"}
})
end
-- bush classic fruit
if core.get_modpath("bushes_classic") then
local function grow_bush(pos)
local meta = core.get_meta(pos)
local bush_name = meta:get_string("bush_type")
-- only change if meta found
if meta and bush_name then
core.swap_node(pos, {name = "bushes:" .. bush_name .. "_bush"})
end
end
bonemeal:add_sapling({
{"bushes:fruitless_bush", grow_bush, "soil"},
})
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,2 +0,0 @@
# Disable recipe for bones:bones to craft into bonemeal
bonemeal.disable_deathbones_recipe (Disable recipe for death bones into bonemeal) bool false