1
0
mirror of https://codeberg.org/tenplus1/bonemeal.git synced 2025-07-28 04:40:23 +02:00

Compare commits

..

21 Commits

Author SHA1 Message Date
31cf1abfcd Merge remote-tracking branch 'upstream/master' 2023-06-11 15:06:48 +02:00
0a9668fff1 Merge remote-tracking branch 'upstream/master' 2023-06-05 22:55:07 +02:00
d357709339 Merge remote-tracking branch 'upstream/master' 2022-08-26 14:53:18 +02:00
131024ee97 Merge remote-tracking branch 'upstream/master' 2022-05-27 18:28:29 +02:00
52a3856f26 Merge remote-tracking branch 'upstream/master' 2022-01-22 19:58:01 +01:00
52ada84c58 Merge remote-tracking branch 'upstream/master' 2021-10-04 21:31:30 +02:00
a920032dd5 Merge remote-tracking branch 'upstream/master' 2021-08-31 19:44:56 +02:00
d534523a1d Merge remote-tracking branch 'upstream/master' 2021-06-20 17:03:28 +02:00
acea1713b7 Merge remote-tracking branch 'upstream/master' 2021-04-17 13:42:29 +02:00
1a9c67b1e3 Merge remote-tracking branch 'upstream/master' 2021-04-04 20:56:38 +02:00
fdc62f06b0 Merge remote-tracking branch 'upstream/master' 2021-03-12 12:15:29 +01:00
2658577776 Merge remote-tracking branch 'upstream/master' 2021-02-23 21:14:06 +01:00
7c106254d2 Merge remote-tracking branch 'upstream/master' 2021-01-23 12:53:15 +01:00
b50f533579 Merge remote-tracking branch 'upstream/master' 2021-01-15 21:08:57 +01:00
2c90275687 Merge remote-tracking branch 'upstream/master' 2020-12-15 23:25:43 +01:00
93a46c05a6 Merge remote-tracking branch 'upstream/master' 2020-11-10 20:00:23 +01:00
afc6d7ef12 Merge remote-tracking branch 'upstream/master' 2020-08-30 12:51:47 +02:00
b604ca39da Merge remote-tracking branch 'upstream/master' 2020-08-04 20:48:01 +02:00
97f4b11110 Merge remote-tracking branch 'upstream/master' 2020-07-17 22:45:16 +02:00
7053e44ea4 Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev 2020-06-16 21:21:14 +02:00
43fd151357 Modifie drop de l'os dans la terre sans supprimer les autres drops 2020-01-04 16:55:07 +01:00
14 changed files with 284 additions and 338 deletions

View File

@ -191,7 +191,6 @@ https://forum.minetest.net/viewtopic.php?f=9&t=16446
* Update readme (thanks mckaygerhard)
* Recipe changes, player bones craft into 2x bones, bones must be cooked to
give bonemeal
* Added bushes_classic support
## LICENSE

14
depends.txt Normal file
View File

@ -0,0 +1,14 @@
default
farming?
ethereal?
moretrees?
technic_worldgen?
lucky_block?
flowers?
dye?
ferns?
dryplants?
df_trees?
df_farming?
df_primordial_items?
everness?

1
description.txt Normal file
View File

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

350
init.lua
View File

@ -1,45 +1,124 @@
-- MineClonia / VoxeLibre check
bonemeal = {}
local mcl = core.get_modpath("mcl_core")
-- 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 path = minetest.get_modpath("bonemeal")
local min, max, random = math.min, math.max, math.random
-- creative check helper
local creative_mode_cache = core.settings:get_bool("creative_mode")
function bonemeal.is_creative(name)
return creative_mode_cache or core.check_player_privs(name, {creative = true})
-- translation support
local S = function(s) return s end -- default boilerplate function
if minetest.get_translator ~= nil then
S = minetest.get_translator("bonemeal") -- 5.x translation function
end
-- API tables
local crops = {}
local saplings = {}
local deco = {}
-- creative check
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
function bonemeal.is_creative(name)
return creative_mode_cache or minetest.check_player_privs(name, {creative = true})
end
-- particle effect
-- default crops
local crops = {
{"farming:cotton_", 8, "farming:seed_cotton"},
{"farming:wheat_", 8, "farming:seed_wheat"}
}
-- 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
-- special function for cactus growth
local function cactus_grow(pos)
default.grow_cactus(pos, minetest.get_node(pos))
end
-- special function for papyrus growth
local function papyrus_grow(pos)
default.grow_papyrus(pos, minetest.get_node(pos))
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"},
{"default:cactus", cactus_grow, "sand"},
{"default:papyrus", papyrus_grow, "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", "", ""
}
-- loads mods then add all in-game flowers except waterlily
local flowers = {}
minetest.after(0.1, function()
for node, def in pairs(minetest.registered_nodes) do
if def.groups
and def.groups.flower
and not node:find("waterlily")
and not node:find("xdecor:potted_")
and not node:find("df_farming:") then
flowers[#flowers + 1] = node
end
end
end)
-- default biomes deco
local deco = {
{"default:dirt", 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", "", "", ""}}
}
--
-- local functions
--
-- particles
local function particle_effect(pos)
core.add_particlespawner({
minetest.add_particlespawner({
amount = 4,
time = 0.15,
minpos = pos,
@ -57,31 +136,38 @@ local function particle_effect(pos)
})
end
-- tree type check
-- tree type check
local function grow_tree(pos, object)
if type(object) == "table" and object.axiom then
core.remove_node(pos)
core.spawn_tree(pos, object) -- grow L-system tree
-- grow L-system tree
minetest.remove_node(pos)
minetest.spawn_tree(pos, object)
elseif type(object) == "string" and core.registered_nodes[object] then
elseif type(object) == "string" and minetest.registered_nodes[object] then
core.set_node(pos, {name = object}) -- place node
-- place node
minetest.set_node(pos, {name = object})
elseif type(object) == "function" then
object(pos) -- execute function
-- function
object(pos)
end
end
-- sapling check
local function check_sapling(pos, sapling_node, strength, light_ok)
-- sapling check
local function check_sapling(pos, sapling_node, light_ok)
-- 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
@ -102,7 +188,7 @@ local function check_sapling(pos, sapling_node, strength, light_ok)
local group = grow_on:split(":")[2]
if core.get_item_group(under.name, group) > 0 then
if minetest.get_item_group(under.name, group) > 0 then
can_grow = true
end
@ -116,9 +202,7 @@ local function check_sapling(pos, sapling_node, strength, light_ok)
particle_effect(pos)
if math.random(5 - strength) == 1 then
grow_tree(pos, saplings[n][2])
end
grow_tree(pos, saplings[n][2])
return true
end
@ -126,8 +210,8 @@ local function check_sapling(pos, sapling_node, strength, light_ok)
end
end
-- crops check
-- crops check
local function check_crops(pos, nodename, strength, light_ok)
local mod, crop, stage, nod, def
@ -157,7 +241,7 @@ local function check_crops(pos, nodename, strength, light_ok)
-- check for place_param setting
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
@ -166,19 +250,19 @@ local function check_crops(pos, nodename, strength, light_ok)
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)
core.get_node_timer(pos):start(10) -- restart any timers
minetest.get_node_timer(pos):start(10) -- restart any timers
return true
end
end
end
-- check soil for specific decoration placement
-- check soil for specific decoration placement
local function check_soil(pos, nodename, strength)
-- set radius according to strength
@ -186,7 +270,7 @@ local function check_soil(pos, nodename, strength)
local tall = max(strength - 2, 0)
-- 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}, {nodename})
@ -235,39 +319,43 @@ local function check_soil(pos, nodename, strength)
if nod and nod ~= "" then
-- get crop param2 value
def = core.registered_nodes[nod]
def = minetest.registered_nodes[nod]
def = def and def.place_param2
-- if param2 not preset then get from existing node
if not def then
local node = core.get_node_or_nil(pos2)
local node = minetest.get_node_or_nil(pos2)
def = node and node.param2 or 0
end
core.set_node(pos2, {name = nod, param2 = def})
minetest.set_node(pos2, {name = nod, param2 = def})
end
particle_effect(pos2)
end
end
-- helper function
-- helper function
local function use_checks(user, pointed_thing)
-- make sure we use on node
if pointed_thing.type ~= "node" then return false end
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 node = minetest.get_node(pos)
local def = minetest.registered_items[node.name]
local dirt = def and def.groups
-- does node have groups set
if not dirt then return false end
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
@ -275,14 +363,16 @@ local function use_checks(user, pointed_thing)
end
-- check if protected
if core.is_protected(pos, user:get_player_name()) then
if minetest.is_protected(pos, user:get_player_name()) then
return false
end
return node
end
--= Global functions
-- global functions
-- add to sapling list
-- {sapling node, schematic or function name, "soil"|"sand"|specific_node|"group:"}
@ -295,10 +385,10 @@ function bonemeal:add_sapling(list)
end
end
-- add to crop list to force grow
-- {crop name start_, growth steps, seed node (if required)}
-- e.g. {"farming:wheat_", 8, "farming:seed_wheat"}
function bonemeal:add_crop(list)
for n = 1, #list do
@ -306,12 +396,12 @@ function bonemeal:add_crop(list)
end
end
-- add grass and flower/plant decoration for specific dirt types
-- {dirt_node, {grass_nodes}, {flower_nodes}
-- 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
-- entries, allowing to both add decorations and decrease their frequency.
function bonemeal:add_deco(list)
for l = 1, #list do
@ -329,7 +419,8 @@ function bonemeal:add_deco(list)
for _, entry in pairs(deco[n][2]) do
if extra == entry then
extra = false ; break
extra = false
break
end
end
end
@ -347,7 +438,8 @@ function bonemeal:add_deco(list)
for __, entry in pairs(deco[n][3]) do
if extra == entry then
extra = false ; break
extra = false
break
end
end
end
@ -357,7 +449,8 @@ function bonemeal:add_deco(list)
end
end
list[l] = false ; break
list[l] = false
break
end
end
@ -367,9 +460,9 @@ function bonemeal:add_deco(list)
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
@ -394,15 +487,17 @@ function bonemeal:set_deco(list)
end
end
-- global on_use function for bonemeal
-- global on_use function for bonemeal
function bonemeal:on_use(pos, strength, node)
-- get node pointed at
local node = node or core.get_node(pos)
local node = node or minetest.get_node(pos)
-- 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
strength = strength or 1
@ -414,25 +509,23 @@ function bonemeal:on_use(pos, strength, node)
default.grow_papyrus(pos, node)
particle_effect(pos) ; return true
particle_effect(pos)
return true
elseif node.name == "default:cactus" then
default.grow_cactus(pos, node)
particle_effect(pos) ; return true
particle_effect(pos)
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
return true
end
-- grow grass and flowers
if core.get_item_group(node.name, "soil") > 0
or core.get_item_group(node.name, "sand") > 0
or core.get_item_group(node.name, "can_bonemeal") > 0 then
if minetest.get_item_group(node.name, "soil") > 0
or minetest.get_item_group(node.name, "sand") > 0
or minetest.get_item_group(node.name, "can_bonemeal") > 0 then
check_soil(pos, node.name, strength)
@ -442,12 +535,13 @@ function bonemeal:on_use(pos, strength, node)
-- light check depending on strength (strength of 4 = no light needed)
local light_ok = true
if (core.get_node_light(pos) or 0) < (12 - (strength * 3)) then
if (minetest.get_node_light(pos) or 0) < (12 - (strength * 3)) then
light_ok = nil
end
-- check for sapling growth
if check_sapling(pos, node.name, strength, light_ok) then
if random(5 - strength) == 1
and check_sapling(pos, node.name, light_ok) then
return true
end
@ -457,11 +551,14 @@ function bonemeal:on_use(pos, strength, node)
end
end
--= Items
--
-- items
--
-- mulch (strength 1)
core.register_craftitem("bonemeal:mulch", {
minetest.register_craftitem("bonemeal:mulch", {
description = S("Mulch"),
inventory_image = "bonemeal_mulch.png",
@ -485,9 +582,9 @@ core.register_craftitem("bonemeal:mulch", {
end
})
-- bonemeal (strength 2)
core.register_craftitem("bonemeal:bonemeal", {
-- bonemeal (strength 2)
minetest.register_craftitem("bonemeal:bonemeal", {
description = S("Bone Meal"),
inventory_image = "bonemeal_item.png",
@ -511,9 +608,9 @@ core.register_craftitem("bonemeal:bonemeal", {
end
})
-- fertiliser (strength 3)
core.register_craftitem("bonemeal:fertiliser", {
-- fertiliser (strength 3)
minetest.register_craftitem("bonemeal:fertiliser", {
description = S("Fertiliser"),
inventory_image = "bonemeal_fertiliser.png",
@ -537,41 +634,42 @@ core.register_craftitem("bonemeal:fertiliser", {
end
})
-- bone
core.register_craftitem("bonemeal:bone", {
-- bone
minetest.register_craftitem("bonemeal:bone", {
description = S("Bone"),
inventory_image = "bonemeal_bone.png",
groups = {bone = 1}
})
-- gelatin powder
core.register_craftitem("bonemeal:gelatin_powder", {
minetest.register_craftitem("bonemeal:gelatin_powder", {
description = S("Gelatin Powder"),
inventory_image = "bonemeal_gelatin_powder.png",
groups = {food_gelatin = 1, flammable = 2}
})
--= Recipes
--
-- crafting recipes
--
-- gelatin powder
core.register_craft({
minetest.register_craft({
output = "bonemeal:gelatin_powder 4",
recipe = {
{"group:bone", "group:bone", "group:bone"},
{a.bucket_water, a.bucket_water, a.bucket_water},
{a.bucket_water, a.torch, a.bucket_water}
{"bucket:bucket_water", "bucket:bucket_water", "bucket:bucket_water"},
{"bucket:bucket_water", "default:torch", "bucket:bucket_water"}
},
replacements = {
{a.bucket_water, a.bucket_empty .. " 5"}
{"bucket:bucket_water", "bucket:bucket_empty 5"}
}
})
-- bonemeal (from bone)
core.register_craft({
minetest.register_craft({
type = "cooking",
output = "bonemeal:bonemeal 2",
recipe = "group:bone",
@ -579,25 +677,22 @@ core.register_craft({
})
-- bonemeal (from player bones)
if minetest.settings:get_bool("bonemeal.disable_deathbones_recipe") ~= true then
if core.settings:get_bool("bonemeal.disable_deathbones_recipe") ~= true then
core.register_craft({
minetest.register_craft({
output = "bonemeal:bone 2",
recipe = {{"bones:bones"}}
})
end
-- bonemeal (from coral skeleton)
core.register_craft({
minetest.register_craft({
output = "bonemeal:bonemeal 2",
recipe = {{a.coral}}
recipe = {{"default:coral_skeleton"}}
})
-- mulch
core.register_craft({
minetest.register_craft({
output = "bonemeal:mulch 4",
recipe = {
{"group:tree", "group:leaves", "group:leaves"},
@ -606,7 +701,7 @@ core.register_craft({
}
})
core.register_craft({
minetest.register_craft({
output = "bonemeal:mulch",
recipe = {
{"group:seed", "group:seed", "group:seed"},
@ -616,39 +711,36 @@ core.register_craft({
})
-- fertiliser
core.register_craft({
minetest.register_craft({
output = "bonemeal:fertiliser 2",
recipe = {{"bonemeal:bonemeal", "bonemeal:mulch"}}
})
-- add bones to dirt
if core.registered_items[a.dirt] then
core.override_item(a.dirt, {
drop = {
max_items = 1,
items = {
{
items = {"bonemeal:bone"},
rarity = 40
},
{
items = {a.dirt}
}
local drop = minetest.registered_items["default:dirt"].drop
if drop then
table.insert(drop.items, 1, {items = {"bonemeal:bone"}, rarity = 30})
else
drop = {
max_items = 1,
items = {
{
items = {"bonemeal:bone"},
rarity = 40
},
{
items = {"default:dirt"}
}
}
})
}
end
-- add support for mods
-- add support for other mods
dofile(path .. "/mods.lua")
-- lucky block support
if core.get_modpath("lucky_block") then
if minetest.get_modpath("lucky_block") then
dofile(path .. "/lucky_block.lua")
end

View File

@ -1,4 +1,5 @@
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] bonemeal geladen
Bone=Knochen
Bone Meal=Knochenmehl
Fertiliser=Dünger

View File

@ -1,4 +1,5 @@
# textdomain:bonemeal
#[MOD] bonemeal loaded=
#Bone=
#Bone Meal=
#Fertiliser=

View File

@ -1,4 +1,5 @@
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] bonemeal cargado
Bone=Hueso
Bone Meal=Comida de hueso
Fertiliser=Fertilizante

View File

@ -1,4 +1,5 @@
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] bonemeal chargé
Bone=Os
Bone Meal=Poudre d'os
Fertiliser=Engrais

View File

@ -1,4 +1,5 @@
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] bonemeal caricata
Bone=Ossa
Bone Meal=Pasto osseo
Fertiliser=Fertilizzante

View File

@ -1,4 +1,5 @@
# textdomain:bonemeal
[MOD] bonemeal loaded=[MOD] костная мука загружена
Bone=Кость
Bone Meal=Костная Мука
Fertiliser=Удобрение

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=Мульча

View File

@ -1,16 +1,15 @@
-- helper function
-- add lucky blocks
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
bonemeal:on_use(dpos, 5)
end
end
-- add lucky blocks
lucky_block:add_blocks({
{"lig"},

View File

@ -1,4 +1,4 @@
name = bonemeal
depends = default
optional_depends = lucky_block, farming, ethereal, moretrees, technic_worldgen, flowers, dye, ferns, dryplants, df_trees, df_farming, df_primordial_items, everness
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

231
mods.lua
View File

@ -1,111 +1,13 @@
-- craft bones from animalmaterials into bonemeal
if minetest.get_modpath("animalmaterials") then
if core.get_modpath("animalmaterials") then
core.register_craft({
minetest.register_craft({
output = "bonemeal:bonemeal 2",
recipe = {{"animalmaterials:bone"}}
})
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
@ -153,9 +55,8 @@ if farming and farming.mod and farming.mod == "redo" then
})
end
-- ethereal crops, saplings and grass
if core.get_modpath("ethereal") then
if minetest.get_modpath("ethereal") then
bonemeal:add_crop({
{"ethereal:strawberry_", 8},
@ -170,7 +71,6 @@ if core.get_modpath("ethereal") then
{"ethereal:banana_tree_sapling", ethereal.grow_banana_tree, "soil"},
{"ethereal:frost_tree_sapling", ethereal.grow_frost_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:redwood_sapling", ethereal.grow_redwood_tree, "soil"},
{"ethereal:giant_redwood_sapling", ethereal.grow_giant_redwood_tree, "soil"},
@ -180,8 +80,7 @@ if core.get_modpath("ethereal") then
{"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"}
{"ethereal:basandra_bush_sapling", ethereal.grow_basandra_bush, "soil"}
})
local grass = {"default:grass_3", "default:grass_4", "default:grass_5", ""}
@ -194,24 +93,20 @@ if core.get_modpath("ethereal") then
"flowers:tulip", "flowers:viola", "ethereal:strawberry_7"}},
{"ethereal:gray_dirt", {}, {"ethereal:snowygrass", "", ""}},
{"ethereal:cold_dirt", {}, {"ethereal:snowygrass", "", ""}},
{"ethereal:mushroom_dirt", {}, {"flowers:mushroom_red", "flowers:mushroom_brown",
"ethereal:spore_grass", "ethereal:spore_grass", "", "", ""}},
{"ethereal:mushroom_dirt", {}, {"flowers:mushroom_red", "flowers:mushroom_brown", "", "", ""}},
{"ethereal:jungle_dirt", grass, {"default:junglegrass", "", "", ""}},
{"ethereal:grove_dirt", grass, {"ethereal:fern", "", "", ""}},
{"ethereal:bamboo_dirt", grass, {}},
{"ethereal:mud", {"default:fern_1", "default:fern_2", "default:fern_3", "", "",
"default:grass_5", "default:junglegrass"}, {"ethereal:bamboo"}}
{"ethereal:bamboo_dirt", grass, {}}
})
end
-- moretrees saplings
if core.get_modpath("moretrees") then
if minetest.get_modpath("moretrees") then
-- special fir check for snow
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
moretrees.grow_fir_snow(pos)
@ -238,27 +133,23 @@ if core.get_modpath("moretrees") then
{"moretrees:rubber_tree_sapling", moretrees.spawn_rubber_tree_object, "soil"},
{"moretrees:fir_sapling", fir_grow, "soil"}
})
end
-- technic rubber tree
if core.get_modpath("technic_worldgen") then
elseif minetest.get_modpath("technic_worldgen") then
bonemeal:add_sapling({
{"moretrees:rubber_tree_sapling", technic.rubber_tree_model, "soil"}
})
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)
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)
end
@ -267,7 +158,6 @@ if core.get_modpath("caverealms") then
})
end
-- helper
local function y_func(grow_func)
return function(pos)
@ -275,38 +165,30 @@ local function y_func(grow_func)
end
end
-- ferns
if core.get_modpath("ferns") then
if minetest.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"}
{"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
if minetest.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
if minetest.get_modpath("dye") then
local bonemeal_dyes = {bonemeal = "white", fertiliser = "green", mulch = "brown"}
for mat, dye in pairs(bonemeal_dyes) do
core.register_craft({
minetest.register_craft({
output = "dye:" .. dye .. " 4",
recipe = {
{"bonemeal:" .. mat}
@ -315,53 +197,38 @@ if core.get_modpath("dye") then
end
end
-- df_trees saplings
if core.get_modpath("df_trees") then
if minetest.get_modpath("df_trees") then
local function spore_tree_fix(pos)
core.remove_node(pos) ; df_trees.spawn_spore_tree(pos)
minetest.set_node(pos, {name = "air"})
df_trees.spawn_spore_tree(pos)
end
local function fungiwood_fix(pos)
core.remove_node(pos) ; df_trees.spawn_fungiwood(pos)
minetest.set_node(pos, {name = "air"})
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)
minetest.set_node(pos, {name = "air"})
df_trees.spawn_tunnel_tube(pos)
end
bonemeal:add_sapling({
{"df_trees:black_cap_sapling", black_cap_fix, "soil", true},
{"df_trees:black_cap_sapling", df_trees.spawn_black_cap, "soil", true},
{"df_trees:fungiwood_sapling", fungiwood_fix, "soil", true},
{"df_trees:goblin_cap_sapling", goblin_cap_fix, "soil", true},
{"df_trees:goblin_cap_sapling", df_trees.spawn_goblin_cap, "soil", true},
{"df_trees:spore_tree_sapling", spore_tree_fix, "soil", true},
{"df_trees:tower_cap_sapling", tower_cap_fix, "soil", true},
{"df_trees:tower_cap_sapling", df_trees.spawn_tower_cap, "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}
{"df_trees:nether_cap_sapling", df_trees.spawn_nether_cap, "group:nether_cap", true},
{"df_trees:nether_cap_sapling", df_trees.spawn_nether_cap, "group:cools_lava", true}
})
end
-- df_farming crops
if core.get_modpath("df_farming") then
if minetest.get_modpath("df_farming") then
bonemeal:add_crop({
{"df_farming:cave_wheat_", 8, "df_farming:cave_wheat_seed", true},
@ -373,25 +240,24 @@ if core.get_modpath("df_farming") then
})
end
-- df_primordial saplings and plants
if core.get_modpath("df_primordial_items") then
if minetest.get_modpath("df_primordial_items") then
local function mush_fix(pos)
core.set_node(pos, {name = "air"})
minetest.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"})
minetest.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))
df_trees.grow_blood_thorn(pos, minetest.get_node(pos))
end
bonemeal:add_sapling({
@ -443,9 +309,8 @@ if core.get_modpath("df_primordial_items") then
})
end
-- everness saplings
if core.get_modpath("everness") then
if minetest.get_modpath("everness") then
bonemeal:add_sapling({
{"everness:baobab_sapling", Everness.grow_baobab_tree, "soil"},
@ -462,23 +327,3 @@ if core.get_modpath("everness") then
{"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