213 lines
5.6 KiB
Lua
213 lines
5.6 KiB
Lua
farming = {}
|
|
|
|
function farming:add_plant(full_grown, names, interval, chance)
|
|
minetest.register_abm({
|
|
nodenames = names,
|
|
interval = interval,
|
|
chance = chance,
|
|
action = function(pos, node)
|
|
pos.y = pos.y-1
|
|
if minetest.env:get_node(pos).name ~= "farming:soil_wet" then
|
|
return
|
|
end
|
|
pos.y = pos.y+1
|
|
if not minetest.env:get_node_light(pos) then
|
|
return
|
|
end
|
|
if minetest.env:get_node_light(pos) < 8 then
|
|
return
|
|
end
|
|
local step = nil
|
|
for i,name in ipairs(names) do
|
|
if name == node.name then
|
|
step = i
|
|
break
|
|
end
|
|
end
|
|
if step == nil then
|
|
return
|
|
end
|
|
local new_node = {name=names[step+1]}
|
|
if new_node.name == nil then
|
|
new_node.name = full_grown
|
|
end
|
|
minetest.env:set_node(pos, new_node)
|
|
end
|
|
} )
|
|
end
|
|
|
|
function farming:generate_tree(pos, trunk, leaves, underground, replacements)
|
|
pos.y = pos.y-1
|
|
local nodename = minetest.env:get_node(pos).name
|
|
local ret = true
|
|
for _,name in ipairs(underground) do
|
|
if nodename == name then
|
|
ret = false
|
|
break
|
|
end
|
|
end
|
|
pos.y = pos.y+1
|
|
if not minetest.env:get_node_light(pos) then
|
|
return
|
|
end
|
|
if ret or minetest.env:get_node_light(pos) < 8 then
|
|
return
|
|
end
|
|
|
|
node = {name = ""}
|
|
for dy=1,4 do
|
|
pos.y = pos.y+dy
|
|
if minetest.env:get_node(pos).name ~= "air" then
|
|
return
|
|
end
|
|
pos.y = pos.y-dy
|
|
end
|
|
node.name = trunk
|
|
for dy=0,4 do
|
|
pos.y = pos.y+dy
|
|
minetest.env:set_node(pos, node)
|
|
pos.y = pos.y-dy
|
|
end
|
|
|
|
if not replacements then
|
|
replacements = {}
|
|
end
|
|
|
|
node.name = leaves
|
|
pos.y = pos.y+3
|
|
for dx=-2,2 do
|
|
for dz=-2,2 do
|
|
for dy=0,3 do
|
|
pos.x = pos.x+dx
|
|
pos.y = pos.y+dy
|
|
pos.z = pos.z+dz
|
|
|
|
if dx == 0 and dz == 0 and dy==3 then
|
|
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
|
|
minetest.env:set_node(pos, node)
|
|
for name,rarity in pairs(replacements) do
|
|
if math.random(1, rarity) == 1 then
|
|
minetest.env:set_node(pos, {name=name})
|
|
end
|
|
end
|
|
end
|
|
elseif dx == 0 and dz == 0 and dy==4 then
|
|
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
|
|
minetest.env:set_node(pos, node)
|
|
for name,rarity in pairs(replacements) do
|
|
if math.random(1, rarity) == 1 then
|
|
minetest.env:set_node(pos, {name=name})
|
|
end
|
|
end
|
|
end
|
|
elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then
|
|
if minetest.env:get_node(pos).name == "air" then
|
|
minetest.env:set_node(pos, node)
|
|
for name,rarity in pairs(replacements) do
|
|
if math.random(1, rarity) == 1 then
|
|
minetest.env:set_node(pos, {name=name})
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then
|
|
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
|
|
minetest.env:set_node(pos, node)
|
|
for name,rarity in pairs(replacements) do
|
|
if math.random(1, rarity) == 1 then
|
|
minetest.env:set_node(pos, {name=name})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
pos.x = pos.x-dx
|
|
pos.y = pos.y-dy
|
|
pos.z = pos.z-dz
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
farming.seeds = {
|
|
["farming:wheat_seed"]=20,
|
|
["farming:cotton_seed"]=30,
|
|
["farming:pumpkin_seed"]=60,
|
|
}
|
|
|
|
-- ========= ALIASES FOR FARMING MOD BY SAPIER =========
|
|
-- hoes
|
|
minetest.register_alias("farming:wood_hoe", "farming:hoe_wood")
|
|
minetest.register_alias("farming:cobble_hoe", "farming:hoe_stone")
|
|
minetest.register_alias("farming:steel_hoe", "farming:hoe_steel")
|
|
minetest.register_alias("farming:mese_hoe", "farming:hoe_steel")
|
|
|
|
-- wheat -> wheat
|
|
minetest.register_alias("farming:wheat_node", "farming:wheat")
|
|
--minetest.register_alias("farming:wheat", "farming_wheat_harvested") cant do this
|
|
minetest.register_alias("farming:wheat_straw", "farming:wheat")
|
|
minetest.register_alias("farming:seed_wheat", "farming:wheat_seed")
|
|
for lvl = 1, 6, 1 do
|
|
minetest.register_entity(":farming:wheat_lvl"..lvl, {
|
|
on_activate = function(self, staticdata)
|
|
minetest.env:set_node(self.object:getpos(), {name="farming:wheat_1"})
|
|
end
|
|
})
|
|
end
|
|
|
|
-- rye -> wheat
|
|
minetest.register_alias("farming:rhy_node", "farming:wheat")
|
|
minetest.register_alias("farming:rhy", "farming:wheat_harvested")
|
|
minetest.register_alias("farming:rhy_straw", "farming:wheat")
|
|
minetest.register_alias("farming:seed_rhy", "farming:wheat_seed")
|
|
for lvl = 1, 6, 1 do
|
|
minetest.register_entity(":farming:rhy_lvl"..lvl, {
|
|
on_activate = function(self, staticdata)
|
|
minetest.env:set_node(self.object:getpos(), {name="farming:wheat_1"})
|
|
end
|
|
})
|
|
end
|
|
|
|
-- corn -> wheat
|
|
minetest.register_alias("farming:corn_node", "farming:wheat")
|
|
minetest.register_alias("farming:corn", "farming:wheat_harvested")
|
|
minetest.register_alias("farming:corn_straw", "farming:wheat")
|
|
minetest.register_alias("farming:seed_corn", "farming:wheat_seed")
|
|
for lvl = 1, 6, 1 do
|
|
minetest.register_entity(":farming:corn_lvl"..lvl, {
|
|
on_activate = function(self, staticdata)
|
|
minetest.env:set_node(self.object:getpos(), {name="farming:wheat_1"})
|
|
end
|
|
})
|
|
end
|
|
|
|
|
|
-- ========= SOIL =========
|
|
dofile(minetest.get_modpath("farming").."/soil.lua")
|
|
|
|
-- ========= HOES =========
|
|
dofile(minetest.get_modpath("farming").."/hoes.lua")
|
|
|
|
-- ========= CORN =========
|
|
dofile(minetest.get_modpath("farming").."/wheat.lua")
|
|
|
|
-- ========= COTTON =========
|
|
dofile(minetest.get_modpath("farming").."/cotton.lua")
|
|
|
|
-- ========= PUMPKIN =========
|
|
--dofile(minetest.get_modpath("farming").."/pumpkin.lua")
|
|
|
|
-- ========= WEED =========
|
|
dofile(minetest.get_modpath("farming").."/weed.lua")
|
|
|
|
-- ========= PAPYRUS =========
|
|
dofile(minetest.get_modpath("farming").."/papyrus.lua")
|
|
|
|
-- ========= CACTUS =========
|
|
dofile(minetest.get_modpath("farming").."/cactus.lua")
|
|
|
|
if minetest.setting_get("log_mods") then
|
|
minetest.log("action", "farming loaded")
|
|
end
|