added mulch and fertiliser items as well as new strength variable

This commit is contained in:
TenPlus1 2017-01-18 15:53:26 +00:00
parent 6a9ca6e202
commit ae18b73c41
5 changed files with 135 additions and 32 deletions

View File

@ -1,11 +1,16 @@
Bonemeal mod [bonemeal]
This mod adds two new items into the game, bones which can be dug from normal
dirt and bonemeal which is crafted from bones and player bone blocks.
This mod adds four new items into the game, bones which can be dug from normal
dirt which can be made into bonemeal, mulch which is is crafted using a tree and
8x leaves, and fertiliser which is a mixture of them both.
Bonemeal can be used on added saplings for a 1 in 2 chance to grow them quickly
as well as specified crops which are grown 1 to 4 steps at a time. Dirt can
also be clicked for random grass, flowers or registered decoration to appear.
Each item can be used on saplings and crops for a chance to grow them quicker as
well as dirt which will generate random grass, flowers or whichever decoration
is registered.
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
quicker or simply decorate a larger area with grass and flowers.
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
@ -17,3 +22,4 @@ Changelog:
- 0.1 - Initial release
- 0.2 - Added global on_use function for bonemeal growth
- 0.3 - Added strength to on_use global for new items (mulch and fertiliser).

View File

@ -57,14 +57,17 @@ bonemeal:add_deco({"default:dirt_with_dry_grass", {"default:dry_grass_1", ""},
Global ON_USE Function
----------------------
bonemeal:on_use(pos)
bonemeal:on_use(pos, strength)
This function can be called from other mods to grow plants using alternative
bonemeal items and have the same effect.
{pos} is the location to apply growing
{strength} is how strong to grow [low of 1 to high of 4]
Final Words
===========
I hope this guide helps you add your own plants so you can grow them quickly
with bonemeal. Please check the mods.lua for more examples.
with the items included. Please check the mods.lua for more examples.

144
init.lua
View File

@ -59,7 +59,7 @@ end
-- default biomes deco
local deco = {
{"default:dirt_with_dry_grass", dry_grass, flowers},
{"default:sand", {}, {"default:dry_shrub", "", ""} },
{"default:sand", {}, {"default:dry_shrub", "", "", ""} },
{"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} },
{"default:silver_sand", {}, {"default:dry_shrub", "", "", ""} },
}
@ -104,7 +104,6 @@ local function grow_tree(pos, object)
elseif type(object) == "function" then
-- function
object(pos)
end
end
@ -112,11 +111,6 @@ end
-- sapling check
local function check_sapling(pos, nodename)
-- 1 in 2 chance of spawning sapling
if math.random(1, 2) == 1 then
return
end
-- what is sapling placed on?
local under = minetest.get_node({
x = pos.x,
@ -167,7 +161,7 @@ end
-- crops check
local function check_crops(pos, nodename)
local function check_crops(pos, nodename, strength)
local stage = ""
@ -179,7 +173,7 @@ local function check_crops(pos, nodename)
-- get stage number or set to 0 for seed
stage = tonumber( nodename:split("_")[2] ) or 0
stage = math.min(stage + math.random(1, 4), crops[n][2])
stage = math.min(stage + strength, crops[n][2])
minetest.set_node(pos, {name = crops[n][1] .. stage})
@ -195,11 +189,16 @@ end
-- check soil for specific decoration placement
local function check_soil(pos, nodename)
local function check_soil(pos, nodename, strength)
-- set radius according to strength
local side = strength - 1
local tall = math.max(strength - 2, 0)
-- get area of land with free space above
local dirt = minetest.find_nodes_in_area_under_air(
{x = pos.x - 2, y = pos.y - 1, z = pos.z - 2},
{x = pos.x + 2, y = pos.y + 1, z = pos.z + 2},
{x = pos.x - side, y = pos.y - tall, z = pos.z - side},
{x = pos.x + side, y = pos.y + tall, z = pos.z + side},
{"group:soil", "group:sand"})
-- set default grass and decoration
@ -282,7 +281,7 @@ end
-- global on_use function for bonemeal
function bonemeal:on_use(pos)
function bonemeal:on_use(pos, strength)
-- get node pointed at
local node = minetest.get_node(pos)
@ -292,27 +291,68 @@ function bonemeal:on_use(pos)
return
end
-- make sure strength is between 1 and 4
strength = strength or 2
strength = math.max(strength, 1)
strength = math.min(strength, 4)
-- grow grass and flowers
if minetest.get_item_group(node.name, "soil") > 0
or minetest.get_item_group(node.name, "sand") > 0 then
check_soil(pos, node.name, strength)
return
end
-- light check depending on strength (strength of 4 = no light needed)
if (minetest.get_node_light(pos) or 0) < (12 - (strength * 3)) then
return
end
-- check for tree growth if pointing at sapling
if minetest.get_item_group(node.name, "sapling") > 0 then
if minetest.get_item_group(node.name, "sapling") > 0
and math.random(1, (5 - strength)) == 1 then
check_sapling(pos, node.name)
return
end
-- check for crop growth
check_crops(pos, node.name)
-- grow grass and flowers
if minetest.get_item_group(node.name, "soil") > 0
or minetest.get_item_group(node.name, "sand") > 0 then
check_soil(pos, node.name)
end
check_crops(pos, node.name, strength)
end
----- items
-- bonemeal item
-- mulch (strength 1)
minetest.register_craftitem("bonemeal:mulch", {
description = "Mulch",
inventory_image = "bonemeal_mulch.png",
on_use = function(itemstack, user, pointed_thing)
-- did we point at a node?
if pointed_thing.type ~= "node" then
return
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 minetest.setting_getbool("creative_mode") then
itemstack:take_item()
end
-- call global on_use function with strength of 1
bonemeal:on_use(pointed_thing.under, 1)
return itemstack
end,
})
-- bonemeal (strength 2)
minetest.register_craftitem("bonemeal:bonemeal", {
description = "Bone Meal",
inventory_image = "bonemeal_item.png",
@ -334,8 +374,38 @@ minetest.register_craftitem("bonemeal:bonemeal", {
itemstack:take_item()
end
-- get position and call global on_use function
bonemeal:on_use(pointed_thing.under)
-- call global on_use function with strength of 2
bonemeal:on_use(pointed_thing.under, 2)
return itemstack
end,
})
-- fertiliser (strength 3)
minetest.register_craftitem("bonemeal:fertiliser", {
description = "Fertiliser",
inventory_image = "bonemeal_fertiliser.png",
on_use = function(itemstack, user, pointed_thing)
-- did we point at a node?
if pointed_thing.type ~= "node" then
return
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 minetest.setting_getbool("creative_mode") then
itemstack:take_item()
end
-- call global on_use function with strength of 3
bonemeal:on_use(pointed_thing.under, 3)
return itemstack
end,
@ -348,19 +418,43 @@ minetest.register_craftitem("bonemeal:bone", {
inventory_image = "bonemeal_bone.png",
})
-- bonemeal recipes
--- crafting recipes
-- bonemeal (from bone)
minetest.register_craft({
type = "shapeless",
output = "bonemeal:bonemeal 2",
recipe = {"bonemeal:bone"},
})
-- bonemeal (from player bones)
minetest.register_craft({
type = "shapeless",
output = "bonemeal:bonemeal 4",
recipe = {"bones:bones"},
})
-- mulch
minetest.register_craft({
type = "shapeless",
output = "bonemeal:mulch 4",
recipe = {
"group:tree", "group:leaves", "group:leaves",
"group:leaves", "group:leaves", "group:leaves",
"group:leaves", "group:leaves", "group:leaves"
},
})
-- fertiliser
minetest.register_craft({
type = "shapeless",
output = "bonemeal:fertiliser 2",
recipe = {"bonemeal:bonemeal", "bonemeal:mulch"},
})
-- add bones to dirt
minetest.override_item("default:dirt", {
drop = {

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

BIN
textures/bonemeal_mulch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B