Move important farming functions to new file

This commit is contained in:
Wuzzy 2017-03-13 23:09:27 +01:00
parent 7cd7b27d55
commit e8056edde0
2 changed files with 76 additions and 77 deletions

View file

@ -1,79 +1,9 @@
local init = os.clock() local init = os.clock()
mcl_farming = {} mcl_farming = {}
function mcl_farming:add_plant(full_grown, names, interval, chance) -- IMPORTANT API AND HELPER FUNCTIONS --
minetest.register_abm({ -- Contain functions for planting seed, addind plant growth and gourds (melon/pumpkin-like)
nodenames = names, dofile(minetest.get_modpath("mcl_farming").."/shared_functions.lua")
interval = interval,
chance = chance,
action = function(pos, node)
pos.y = pos.y-1
if minetest.get_node(pos).name ~= "mcl_farming:soil_wet" and math.random(0, 9) > 0 then
return
end
pos.y = pos.y+1
if not minetest.get_node_light(pos) then
return
end
if minetest.get_node_light(pos) < 10 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.set_node(pos, new_node)
end
} )
end
function mcl_farming:place_seed(itemstack, placer, pointed_thing, plantname)
local pt = pointed_thing
if not pt then
return
end
if pt.type ~= "node" then
return
end
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pt.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pt.under, node, placer, itemstack) or itemstack
end
end
local pos = {x=pt.above.x, y=pt.above.y-1, z=pt.above.z}
local farmland = minetest.get_node(pos)
pos= {x=pt.above.x, y=pt.above.y, z=pt.above.z}
local place_s = minetest.get_node(pos)
if string.find(farmland.name, "mcl_farming:soil") and string.find(place_s.name, "air") then
minetest.add_node(pos, {name=plantname})
else
return
end
if not minetest.setting_getbool("creative_mode") then
itemstack:take_item()
end
return itemstack
end
-- ========= SOIL ========= -- ========= SOIL =========
dofile(minetest.get_modpath("mcl_farming").."/soil.lua") dofile(minetest.get_modpath("mcl_farming").."/soil.lua")
@ -84,10 +14,7 @@ dofile(minetest.get_modpath("mcl_farming").."/hoes.lua")
-- ========= WHEAT ========= -- ========= WHEAT =========
dofile(minetest.get_modpath("mcl_farming").."/wheat.lua") dofile(minetest.get_modpath("mcl_farming").."/wheat.lua")
-- = HELPER FUNCTION FOR PUMPKIN AND MELON = -- ======= PUMPKIN =========
dofile(minetest.get_modpath("mcl_farming").."/gourd.lua")
-- ========= PUMPKIN =========
dofile(minetest.get_modpath("mcl_farming").."/pumpkin.lua") dofile(minetest.get_modpath("mcl_farming").."/pumpkin.lua")
-- ========= MELON ========= -- ========= MELON =========

View file

@ -1,3 +1,75 @@
function mcl_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.get_node(pos).name ~= "mcl_farming:soil_wet" and math.random(0, 9) > 0 then
return
end
pos.y = pos.y+1
if not minetest.get_node_light(pos) then
return
end
if minetest.get_node_light(pos) < 10 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.set_node(pos, new_node)
end
})
end
function mcl_farming:place_seed(itemstack, placer, pointed_thing, plantname)
local pt = pointed_thing
if not pt then
return
end
if pt.type ~= "node" then
return
end
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pt.under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pt.under, node, placer, itemstack) or itemstack
end
end
local pos = {x=pt.above.x, y=pt.above.y-1, z=pt.above.z}
local farmland = minetest.get_node(pos)
pos= {x=pt.above.x, y=pt.above.y, z=pt.above.z}
local place_s = minetest.get_node(pos)
if string.find(farmland.name, "mcl_farming:soil") and string.find(place_s.name, "air") then
minetest.add_node(pos, {name=plantname})
else
return
end
if not minetest.setting_getbool("creative_mode") then
itemstack:take_item()
end
return itemstack
end
--[[ Helper function to create a gourd (e.g. melon, pumpkin), the connected stem nodes as --[[ Helper function to create a gourd (e.g. melon, pumpkin), the connected stem nodes as
- full_unconnected_stem: itemstring of the full-grown but unconnceted stem node. This node must already be done - full_unconnected_stem: itemstring of the full-grown but unconnceted stem node. This node must already be done