owl_tech/farming/seeds.lua

172 lines
6.6 KiB
Lua

local S = minetest.get_translator(minetest.get_current_modname())
local name = minetest.get_current_modname()
local path = minetest.get_modpath(name)
local function spawn_crop_from_seed(pos,itemstack,crop_name)
minetest.place_node(pos, crop_name)
local item_amount = itemstack:get_count()
if item_amount==1 then
itemstack:clear()
end
end
local sel_heights = { --take from mc2
-5/16,
-2/16,
0,
3/16,
5/16,
6/16,
7/16,
}
local function get_dirt_under(pos)
if minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name =='mcl_core:soil_wet' then
if minetest.get_node({x=pos.x,y=pos.y-2,z=pos.z}).name =='mcl_core:dirt' then
if minetest.get_node({x=pos.x,y=pos.y-3,z=pos.z}).name =='mcl_core:dirt' then
return 3
else
return 2
end
else
return 1
end
else
return 0
end
end
local function get_air_aboth(pos)
local a = 0
for i = 1, 30, 1 do
if minetest.get_node({x=pos.x,y=pos.y+i,z=pos.z}).name =='air' then
a = i
else
break
end
end
return math.modf(a/10)
end
local function calculate_grow_cof(pos)
local a = get_dirt_under(pos) --dirt under
local b = get_air_aboth(pos) -- air aboth
local c = biomeinfo.get_v6_humidity(pos)*3 -- humidity (0-1)
local d = biomeinfo.get_v6_heat(pos)*3 --heat (0-1)
return a+b+c+d
end
--1)name 2)Name 3)texture base name 4)stages 5)seed texture 6)drop name 7)drop amount 8)cof of grow to up 9) Special node under dirt
for i = 1, #LIST_ALL_CROPS, 1 do
local create, name, longdesc
if i == 1 then
create = true
name = S("Premature "..LIST_ALL_CROPS[i][2] )
longdesc = S(
"Premature plants grow on farmland under sunlight in 8 stages.On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.")
else
create = false
end
minetest.register_craftitem("owl_tech:seeds_"..LIST_ALL_CROPS[i][1], {
description = S(LIST_ALL_CROPS[i][2].." Seeds"),
_tt_help = S("Grows on farmland"),
_doc_items_longdesc = S("Grows into a wheat plant."),
_doc_items_usagehelp = S(" Place the wheat seeds on farmland (which can be created with a hoe) to plant plant."),
groups = {craftitem = 1, compostability = 30},
inventory_image = LIST_ALL_CROPS[i][5],
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type =="node" then
local node_chek = minetest.get_node(pointed_thing.under)
if node_chek.name=="mcl_farming:soil" or node_chek.name=="mcl_farming:soil_wet" then
if itemstack:get_count()>1 then
itemstack:set_count(itemstack:get_count()-1)
else
itemstack:clear()
end
minetest.set_node({x=pointed_thing.under.x,y=pointed_thing.under.y+1,z=pointed_thing.under.z},{name="owl_tech:plant_"..LIST_ALL_CROPS[i][1]..1})
return itemstack
end
end
end
})
for j = 1, LIST_ALL_CROPS[i][4]-1, 1 do
minetest.register_node("owl_tech:plant_"..LIST_ALL_CROPS[i][1]..j, {
description = S("Premature "..LIST_ALL_CROPS[i][2]),
_doc_items_create_entry = create,
_doc_items_entry_name = name,
_doc_items_longdesc = longdesc,
paramtype = "light",
paramtype2 = "meshoptions",
place_param2 = 3,
sunlight_propagates = true,
walkable = false,
drawtype = "plantlike",
drop = "owl_tech:seeds_"..LIST_ALL_CROPS[i][1],
tiles = {"owl_tech_ruber_wheat_"..j..".png"},
inventory_image = "owl_tech_ruber_wheat_"..j..".png",
wield_image = "owl_tech_ruber_wheat_"..j..".png",
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, sel_heights[i], 0.5}
},
},
groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1,
dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1},
sounds = mcl_sounds.node_sound_leaves_defaults(),
_mcl_blast_resistance = 0,
on_construct = function(pos)
local meta= minetest.get_meta(pos)--calculate_grow_cof(pos)
meta:set_int("curent_grow",0)
meta:set_int("max_cof",LIST_ALL_CROPS[i][8])
local timer =minetest.get_node_timer(pos)
timer:start(10)
end,
on_timer = function(pos, elapsed)
local meta = minetest.get_meta(pos)
meta:set_int("curent_grow",meta:get_int("curent_grow")+calculate_grow_cof(pos))
if meta:get_int("max_cof")<=meta:get_int("curent_grow")
and (LIST_ALL_CROPS[i][9]=="none" or LIST_ALL_CROPS[i][9] == minetest.get_node({x=pos.x,y=pos.y-4,z=pos.z}).name ) then
minetest.set_node(pos,{name="owl_tech:plant_"..LIST_ALL_CROPS[i][1]..j+1})
end
local timer =minetest.get_node_timer(pos)
timer:start(10)
end
})
end
minetest.register_node("owl_tech:plant_"..LIST_ALL_CROPS[i][1]..LIST_ALL_CROPS[i][4], {
description = S("Mature "..LIST_ALL_CROPS[i][2]),
_doc_items_longdesc = S("Mature plants are ready to be harvested for wheat and seeds."),
sunlight_propagates = true,
paramtype = "light",
paramtype2 = "meshoptions",
place_param2 = 3,
walkable = false,
drawtype = "plantlike",
tiles = {LIST_ALL_CROPS[i][3].."8.png"},
inventory_image = LIST_ALL_CROPS[i][3].."8.png",
wield_image = LIST_ALL_CROPS[i][3].."8.png",
drop = {
max_items = 4,
items = {
{ items = {"owl_tech:seeds_"..LIST_ALL_CROPS[i][1]} },
{ items = {"owl_tech:seeds_"..LIST_ALL_CROPS[i][1]}, rarity = 2},
{ items = {"owl_tech:seeds_"..LIST_ALL_CROPS[i][1]}, rarity = 5},
{ items = {LIST_ALL_CROPS[i][6].." "..LIST_ALL_CROPS[i][7]} },
{ items = {LIST_ALL_CROPS[i][6].." "..LIST_ALL_CROPS[i][7]+1} , rarity = 4}
}
},
groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1, attached_node=1,
dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1, ready_to_harvest=1},
sounds = mcl_sounds.node_sound_leaves_defaults(),
_mcl_blast_resistance = 0,
})
end