x_bonemeal/init.lua

272 lines
7.4 KiB
Lua

------------
-- Bonemeal Mod for Minetest by SaKeL
-- @author Juraj Vajda
-- @license GNU LGPL 2.1
----
local path = minetest.get_modpath("x_bonemeal")
--- API include
-- @submodule
dofile(path.."/api.lua")
--- Register craftitem definition - added to minetest.registered_items[name]
-- @function
minetest.register_craftitem("x_bonemeal:bonemeal", {
description = "Bonemeal - use it as a fertilizer for most plants",
inventory_image = "x_bonemeal_bonemeal.png",
-- wield_scale = {x=1.5, y=1.5, z=1},
on_use = function(itemstack, user, pointed_thing)
local under = pointed_thing.under
if not under then return end
if pointed_thing.type ~= "node" then return end
if minetest.is_protected(under, user:get_player_name()) then return end
local node = minetest.get_node(under)
if not node then return end
if node.name == "ignore" then return end
local mod = node.name:split(":")[1]
--
-- Farming
--
if mod == "farming" or mod == "farming_addons" then
x_bonemeal.grow_farming(under, itemstack, user, node.name)
--
-- Default (Trees, Bushes, Papyrus)
--
-- christmas tree
elseif node.name == "x_default:christmas_tree_sapling" then
local chance = math.random(2)
if not x_bonemeal.is_on_soil(under) then return end
if chance == 1 then
if minetest.find_node_near(under, 1, {"group:snowy"}) then
x_default.grow_snowy_christmas_tree(under)
else
x_default.grow_christmas_tree(under)
end
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- apple tree
elseif node.name == "default:sapling" then
local chance = math.random(2)
if not x_bonemeal.is_on_soil(under) then return end
if chance == 1 then
default.grow_new_apple_tree(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- jungle tree
elseif node.name == "default:junglesapling" then
local chance = math.random(2)
if not x_bonemeal.is_on_soil(under) then return end
if chance == 1 then
default.grow_new_jungle_tree(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- emergent jungle tree
elseif node.name == "default:emergent_jungle_sapling" then
local chance = math.random(2)
if not x_bonemeal.is_on_soil(under) then return end
if chance == 1 then
default.grow_new_emergent_jungle_tree(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- acacia tree
elseif node.name == "default:acacia_sapling" then
local chance = math.random(2)
if not x_bonemeal.is_on_soil(under) then return end
if chance == 1 then
default.grow_new_acacia_tree(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- aspen tree
elseif node.name == "default:aspen_sapling" then
local chance = math.random(2)
if not x_bonemeal.is_on_soil(under) then return end
if chance == 1 then
default.grow_new_aspen_tree(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- pine tree
elseif node.name == "default:pine_sapling" then
local chance = math.random(4)
if not x_bonemeal.is_on_soil(under) then return end
if chance == 3 then
default.grow_new_snowy_pine_tree(under)
elseif chance == 1 then
default.grow_new_pine_tree(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- Bush
elseif node.name == "default:bush_sapling" then
local chance = math.random(2)
if chance == 1 then
if not x_bonemeal.is_on_soil(under) then return end
default.grow_bush(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- Acacia bush
elseif node.name == "default:acacia_bush_sapling" then
local chance = math.random(2)
if chance == 1 then
if not x_bonemeal.is_on_soil(under) then return end
default.grow_acacia_bush(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- Pine bush
elseif node.name == "default:pine_bush_sapling" then
local chance = math.random(2)
if chance == 1 then
if not x_bonemeal.is_on_soil(under) then return end
default.grow_pine_bush(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- Blueberry bush
elseif node.name == "default:blueberry_bush_sapling" then
local chance = math.random(2)
if chance == 1 then
if not x_bonemeal.is_on_soil(under) then return end
default.grow_blueberry_bush(under)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- Papyrus
elseif node.name == "default:papyrus" then
local chance = math.random(2)
if chance == 1 then
if not x_bonemeal.is_on_soil(under) then return end
default.grow_papyrus(under, node)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
-- Large Cactus
elseif node.name == "default:large_cactus_seedling" then
local chance = math.random(2)
if chance == 1 then
if not x_bonemeal.is_on_sand(under) then return end
default.grow_large_cactus(under, node)
x_bonemeal.particle_effect({x = under.x, y = under.y + 1, z = under.z})
end
-- take item if not in creative
if not x_bonemeal.is_creative(user:get_player_name()) then
itemstack:take_item()
end
return itemstack
else
x_bonemeal.grow_grass_and_flowers(itemstack, user, pointed_thing)
end
return itemstack
end,
})
--
-- Crafting
--
minetest.register_craft({
output = 'x_bonemeal:bonemeal 9',
recipe = {
{'bones:bones'}
}
})
minetest.register_craft({
output = 'x_bonemeal:bonemeal 9',
recipe = {
{'default:coral_skeleton'}
}
})
print("[Mod] Bonemeal Loaded.")