crops catch up when away
parent
6459e14dfa
commit
d015db12e1
188
api.lua
188
api.lua
|
@ -41,15 +41,19 @@ end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
local base_speed = 100
|
local base_speed = 350
|
||||||
|
|
||||||
-- how often node timers for plants will tick, +/- some random value
|
-- how often node timers for plants will tick, +/- some random value
|
||||||
local function tick(pos, mul)
|
local function tick(pos, mul)
|
||||||
minetest.get_node_timer(pos):start(math.random(base_speed * 2 * mul, base_speed * 3 * mul))
|
local timer = minetest.get_node_timer(pos)
|
||||||
|
timer:stop()
|
||||||
|
timer:start(math.random(base_speed * mul, base_speed * mul))
|
||||||
end
|
end
|
||||||
-- how often a growth failure tick is retried (e.g. too dark)
|
-- how often a growth failure tick is retried (e.g. too dark)
|
||||||
local function tick_again(pos, mul)
|
local function tick_again(pos, mul)
|
||||||
minetest.get_node_timer(pos):start(math.random(base_speed * mul, base_speed * 2 * mul))
|
local timer = minetest.get_node_timer(pos)
|
||||||
|
timer:stop()
|
||||||
|
timer:start(math.random(base_speed * mul, base_speed * mul))
|
||||||
end
|
end
|
||||||
|
|
||||||
farming_super.tick_node = tick
|
farming_super.tick_node = tick
|
||||||
|
@ -221,65 +225,15 @@ farming_super.grow_plant = function(pos, elapsed)
|
||||||
local name = node.name
|
local name = node.name
|
||||||
local def = minetest.registered_nodes[name]
|
local def = minetest.registered_nodes[name]
|
||||||
local bp = def.base_plant
|
local bp = def.base_plant
|
||||||
print("base_plant ".. bp)
|
local fdef = farming_super.registered_plants[bp]
|
||||||
print("next_growth_step ".. (def.next_growth_step or "end"))
|
-- print("base_plant ".. bp)
|
||||||
|
-- print("next_growth_step ".. (def.next_growth_step or "end"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- grow seed
|
|
||||||
if minetest.get_item_group(node.name, "seed") and def.fertility then
|
|
||||||
local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z})
|
|
||||||
if not soil_node then
|
|
||||||
print("no soil")
|
|
||||||
tick_again(pos, def.step_len)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- omitted is a check for light, we assume seeds can germinate in the dark.
|
|
||||||
for _, v in pairs(def.fertility) do
|
|
||||||
print("fertility: " ..v)
|
|
||||||
if minetest.get_item_group(soil_node.name, v) ~= 0 then
|
|
||||||
|
|
||||||
local soil_meta = minetest.get_meta({x=pos.x, y=pos.y-1, z=pos.z})
|
|
||||||
local nlevel = soil_meta:get_int("nitrogen")
|
|
||||||
if nlevel == 0 then
|
|
||||||
nlevel = 9
|
|
||||||
soil_meta:set_int("nitrogen", nlevel)
|
|
||||||
end
|
|
||||||
print("nlevel: " ..nlevel)
|
|
||||||
local var_name = get_seed_variant(def, nlevel) .. "_1_1"
|
|
||||||
local var_def = minetest.registered_items[var_name]
|
|
||||||
|
|
||||||
if var_name == "death" or var_def == nil then
|
|
||||||
minetest.set_node(pos, {name="air"})
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
install_plant(var_def, pos, 1)
|
|
||||||
|
|
||||||
if var_def.groups.use_nitrogen then
|
|
||||||
soil_meta:set_int("nitrogen", math.max(1, nlevel - var_def.groups.use_nitrogen))
|
|
||||||
print("new nlevel: " ..nlevel - (var_def.groups.use_nitrogen or 0))
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[local placenode = {name = def.base_plant .. "_1_1"}
|
|
||||||
if def.place_param2 then
|
|
||||||
placenode.param2 = def.place_param2
|
|
||||||
end
|
|
||||||
]] -- minetest.swap_node(pos, placenode)
|
|
||||||
-- if minetest.registered_nodes[def.base_plant .. "_1_1"].next_plant then
|
|
||||||
tick(pos, def.step_len)
|
|
||||||
return
|
|
||||||
-- return
|
|
||||||
-- end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
local next_step = def.next_growth_step or (fdef.last_step + 1)
|
||||||
|
-- print(dump(def))
|
||||||
|
-- print(dump(fdef))
|
||||||
|
-- print(dump(next_step))
|
||||||
|
local step_len = fdef.step_len[next_step] or 1
|
||||||
|
|
||||||
|
|
||||||
-- check if on wet soil
|
-- check if on wet soil
|
||||||
|
@ -294,18 +248,88 @@ farming_super.grow_plant = function(pos, elapsed)
|
||||||
-- check light
|
-- check light
|
||||||
local light = minetest.get_node_light(pos)
|
local light = minetest.get_node_light(pos)
|
||||||
if not light or light < def.minlight or light > def.maxlight then
|
if not light or light < def.minlight or light > def.maxlight then
|
||||||
tick_again(pos, def.step_len)
|
tick_again(pos, step_len)
|
||||||
print("too dim ".. light.. ":"..def.minlight..":"..def.maxlight)
|
print("too dim ".. light.. ":"..def.minlight..":"..def.maxlight)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- print(dump(step_len))
|
||||||
|
-- print("elapsed "..elapsed)
|
||||||
|
-- calculate how many steps should have elapsed
|
||||||
|
while elapsed > step_len * base_speed do
|
||||||
|
elapsed = elapsed - step_len * base_speed
|
||||||
|
|
||||||
|
next_step = next_step + 1
|
||||||
|
step_len = fdef.step_len[next_step]
|
||||||
|
if not step_len then
|
||||||
|
step_len = 1
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
if next_step >= fdef.last_step then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- grow seed
|
||||||
|
if minetest.get_item_group(node.name, "seed") and def.fertility then
|
||||||
|
local soil_node = minetest.get_node_or_nil({x = pos.x, y = pos.y - 1, z = pos.z})
|
||||||
|
if not soil_node then
|
||||||
|
-- print("no soil")
|
||||||
|
tick_again(pos, step_len)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- omitted is a check for light, we assume seeds can germinate in the dark.
|
||||||
|
for _, v in pairs(def.fertility) do
|
||||||
|
-- print("fertility: " ..v)
|
||||||
|
if minetest.get_item_group(soil_node.name, v) ~= 0 then
|
||||||
|
|
||||||
|
local soil_meta = minetest.get_meta({x=pos.x, y=pos.y-1, z=pos.z})
|
||||||
|
local nlevel = soil_meta:get_int("nitrogen")
|
||||||
|
if nlevel == 0 then
|
||||||
|
nlevel = 9
|
||||||
|
soil_meta:set_int("nitrogen", nlevel)
|
||||||
|
end
|
||||||
|
-- print("nlevel: " ..nlevel)
|
||||||
|
local var_name = get_seed_variant(def, nlevel) .. "_1_1"
|
||||||
|
local var_def = minetest.registered_items[var_name]
|
||||||
|
|
||||||
|
if var_name == "death" or var_def == nil then
|
||||||
|
minetest.set_node(pos, {name="air"})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
install_plant(var_def, pos, math.min(next_step, fdef.last_step))
|
||||||
|
|
||||||
|
if var_def.groups.use_nitrogen then
|
||||||
|
soil_meta:set_int("nitrogen", math.max(1, nlevel - var_def.groups.use_nitrogen))
|
||||||
|
-- print("new nlevel: " ..nlevel - (var_def.groups.use_nitrogen or 0))
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[local placenode = {name = def.base_plant .. "_1_1"}
|
||||||
|
if def.place_param2 then
|
||||||
|
placenode.param2 = def.place_param2
|
||||||
|
end
|
||||||
|
]] -- minetest.swap_node(pos, placenode)
|
||||||
|
-- if minetest.registered_nodes[def.base_plant .. "_1_1"].next_plant then
|
||||||
|
tick(pos, step_len)
|
||||||
|
return
|
||||||
|
-- return
|
||||||
|
-- end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- grow
|
-- grow
|
||||||
install_plant(def, pos, def.next_growth_step)
|
install_plant(def, pos, math.min(next_step, fdef.last_step))
|
||||||
|
|
||||||
-- new timer needed?
|
-- new timer needed?
|
||||||
if def.next_growth_step then
|
if next_step < fdef.last_step then
|
||||||
tick(pos, def.step_len)
|
tick(pos, step_len)
|
||||||
else -- end of growth, give nutrients
|
else -- end of growth, give nutrients
|
||||||
local soil_meta = minetest.get_meta({x = pos.x, y = pos.y - 1, z = pos.z})
|
local soil_meta = minetest.get_meta({x = pos.x, y = pos.y - 1, z = pos.z})
|
||||||
if def.groups.fix_nitrogen then
|
if def.groups.fix_nitrogen then
|
||||||
|
@ -362,7 +386,9 @@ farming_super.register_plant = function(name, def)
|
||||||
end
|
end
|
||||||
|
|
||||||
local base_plant = mname .. ":" .. pname
|
local base_plant = mname .. ":" .. pname
|
||||||
|
def.step_len = def.step_len or {}
|
||||||
|
def.step_len[1] = def.step_len[1] or 1
|
||||||
|
|
||||||
|
|
||||||
-- Register seed -- attached node needs not be on 2nd tier nodes
|
-- Register seed -- attached node needs not be on 2nd tier nodes
|
||||||
local g = {seed = 1, snappy = 3, attached_node = 1, flammable = 2}
|
local g = {seed = 1, snappy = 3, attached_node = 1, flammable = 2}
|
||||||
|
@ -403,7 +429,7 @@ farming_super.register_plant = function(name, def)
|
||||||
base_plant = base_plant,
|
base_plant = base_plant,
|
||||||
next_growth_step = 1,
|
next_growth_step = 1,
|
||||||
tier_count = 1,
|
tier_count = 1,
|
||||||
step_len = (def.step_len and def.step_len[1]) or 1,
|
step_len = def.step_len[1],
|
||||||
groups = g,
|
groups = g,
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
@ -454,6 +480,8 @@ farming_super.register_plant = function(name, def)
|
||||||
for _,numSteps in ipairs(def.steps) do
|
for _,numSteps in ipairs(def.steps) do
|
||||||
totalSteps = totalSteps + numSteps
|
totalSteps = totalSteps + numSteps
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def.last_step = totalSteps
|
||||||
-- print("total steps " .. totalSteps)
|
-- print("total steps " .. totalSteps)
|
||||||
|
|
||||||
local tex_base = mname.."_"..pname
|
local tex_base = mname.."_"..pname
|
||||||
|
@ -461,6 +489,7 @@ farming_super.register_plant = function(name, def)
|
||||||
tex_base = def.textures.base
|
tex_base = def.textures.base
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local step = 1
|
local step = 1
|
||||||
for tierCount,numSteps in ipairs(def.steps) do
|
for tierCount,numSteps in ipairs(def.steps) do
|
||||||
|
|
||||||
|
@ -488,6 +517,20 @@ farming_super.register_plant = function(name, def)
|
||||||
height = 0.5
|
height = 0.5
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def.step_len[step+1] = def.step_len[step+1] or 1
|
||||||
|
|
||||||
|
local sbox = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
|
||||||
|
}
|
||||||
|
|
||||||
|
if tierCount > 1 then
|
||||||
|
sbox = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, height, 5 / 16},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
--print(name.."-> ".. tier .. " / "..tierCount .. " " ..height)
|
--print(name.."-> ".. tier .. " / "..tierCount .. " " ..height)
|
||||||
minetest.register_node(name, {
|
minetest.register_node(name, {
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
|
@ -499,16 +542,13 @@ farming_super.register_plant = function(name, def)
|
||||||
walkable = false,
|
walkable = false,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
drop = drops,
|
drop = drops,
|
||||||
selection_box = {
|
selection_box = sbox,
|
||||||
type = "fixed",
|
|
||||||
fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, height, 5 / 16},
|
|
||||||
},
|
|
||||||
groups = gg,
|
groups = gg,
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
next_growth_step = ns,
|
next_growth_step = ns,
|
||||||
tier_count = tierCount,
|
tier_count = tierCount,
|
||||||
base_plant = base_plant,
|
base_plant = base_plant,
|
||||||
step_len = (def.step_len and def.step_len[step+1]) or 1,
|
step_len = def.step_len[step+1],
|
||||||
on_timer = farming_super.grow_plant,
|
on_timer = farming_super.grow_plant,
|
||||||
minlight = def.minlight,
|
minlight = def.minlight,
|
||||||
maxlight = def.maxlight,
|
maxlight = def.maxlight,
|
||||||
|
@ -542,7 +582,7 @@ farming_super.register_plant = function(name, def)
|
||||||
def.next_node = next_node
|
def.next_node = next_node
|
||||||
def.stack_height = stack_height
|
def.stack_height = stack_height
|
||||||
-- print("def name "..pname)
|
-- print("def name "..pname)
|
||||||
farming_super.registered_plants[pname] = def
|
farming_super.registered_plants[base_plant] = def
|
||||||
|
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
|
|
15
init.lua
15
init.lua
|
@ -6,6 +6,7 @@ local modpath = minetest.get_modpath("farming_super")
|
||||||
dofile(modpath.."/nodes.lua")
|
dofile(modpath.."/nodes.lua")
|
||||||
dofile(modpath.."/api.lua")
|
dofile(modpath.."/api.lua")
|
||||||
dofile(modpath.."/vines.lua")
|
dofile(modpath.."/vines.lua")
|
||||||
|
--dofile(modpath.."/hops.lua")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +55,7 @@ yams
|
||||||
|
|
||||||
|
|
||||||
much later:
|
much later:
|
||||||
cucumber
|
cucumber -- gourds
|
||||||
grapes
|
grapes
|
||||||
hops
|
hops
|
||||||
kiwi
|
kiwi
|
||||||
|
@ -494,6 +495,7 @@ farming_super.register_plant("farming_super:soybeans", {
|
||||||
place_param2 = "X",
|
place_param2 = "X",
|
||||||
inventory_image = "farming_super_seed_soybeans.png",
|
inventory_image = "farming_super_seed_soybeans.png",
|
||||||
-- visual_scale = 1.3,
|
-- visual_scale = 1.3,
|
||||||
|
step_len = {1, 2, 2, 2},
|
||||||
steps = {5}, -- phases, steps per tier
|
steps = {5}, -- phases, steps per tier
|
||||||
default_drop = {},
|
default_drop = {},
|
||||||
drops = {
|
drops = {
|
||||||
|
@ -545,6 +547,7 @@ farming_super.register_plant("farming_super:cabbage", {
|
||||||
inventory_image = "farming_super_seed_cabbage.png",
|
inventory_image = "farming_super_seed_cabbage.png",
|
||||||
-- visual_scale = 1.3,
|
-- visual_scale = 1.3,
|
||||||
steps = {4}, -- phases, steps per tier
|
steps = {4}, -- phases, steps per tier
|
||||||
|
step_len = {1, 1, 2, 2},
|
||||||
textures = { -- overrides default texture naming, allowing reuse
|
textures = { -- overrides default texture naming, allowing reuse
|
||||||
p1s1t1 = "farming_super_green_pixels_1.png",
|
p1s1t1 = "farming_super_green_pixels_1.png",
|
||||||
p1s2t1 = "farming_super_green_pixels_2.png",
|
p1s2t1 = "farming_super_green_pixels_2.png",
|
||||||
|
@ -600,6 +603,7 @@ farming_super.register_plant("farming_super:cauliflower", {
|
||||||
inventory_image = "farming_super_seed_cauliflower.png",
|
inventory_image = "farming_super_seed_cauliflower.png",
|
||||||
-- visual_scale = 1.3,
|
-- visual_scale = 1.3,
|
||||||
steps = {4}, -- phases, steps per tier
|
steps = {4}, -- phases, steps per tier
|
||||||
|
step_len = {1, 1, 2, 2},
|
||||||
textures = { -- overrides default texture naming, allowing reuse
|
textures = { -- overrides default texture naming, allowing reuse
|
||||||
p1s1t1 = "farming_super_green_pixels_1.png",
|
p1s1t1 = "farming_super_green_pixels_1.png",
|
||||||
p1s2t1 = "farming_super_green_pixels_2.png",
|
p1s2t1 = "farming_super_green_pixels_2.png",
|
||||||
|
@ -822,7 +826,7 @@ farming_super.register_plant("farming_super:carrot", {
|
||||||
-- visual_scale = 1.3,
|
-- visual_scale = 1.3,
|
||||||
eat_value = 2,
|
eat_value = 2,
|
||||||
steps = {4}, -- phases, steps per tier
|
steps = {4}, -- phases, steps per tier
|
||||||
step_len = {1, 2, 2, 2},
|
step_len = {1, 2, 3, 3},
|
||||||
textures = { -- overrides default texture naming, allowing reuse
|
textures = { -- overrides default texture naming, allowing reuse
|
||||||
p1s1t1 = "farming_super_2x_green_pixels_1.png",
|
p1s1t1 = "farming_super_2x_green_pixels_1.png",
|
||||||
p1s2t1 = "farming_super_2x_green_pixels_2.png",
|
p1s2t1 = "farming_super_2x_green_pixels_2.png",
|
||||||
|
@ -878,7 +882,7 @@ farming_super.register_plant("farming_super:carrot_red", {
|
||||||
-- visual_scale = 1.3,
|
-- visual_scale = 1.3,
|
||||||
eat_value = 2,
|
eat_value = 2,
|
||||||
steps = {4}, -- phases, steps per tier
|
steps = {4}, -- phases, steps per tier
|
||||||
step_len = {1, 2, 2, 2},
|
step_len = {1, 2, 3, 3},
|
||||||
textures = { -- overrides default texture naming, allowing reuse
|
textures = { -- overrides default texture naming, allowing reuse
|
||||||
p1s1t1 = "farming_super_2x_green_pixels_1.png",
|
p1s1t1 = "farming_super_2x_green_pixels_1.png",
|
||||||
p1s2t1 = "farming_super_2x_green_pixels_2.png",
|
p1s2t1 = "farming_super_2x_green_pixels_2.png",
|
||||||
|
@ -934,7 +938,7 @@ farming_super.register_plant("farming_super:carrot_yellow", {
|
||||||
-- visual_scale = 1.3,
|
-- visual_scale = 1.3,
|
||||||
eat_value = 2,
|
eat_value = 2,
|
||||||
steps = {4}, -- phases, steps per tier
|
steps = {4}, -- phases, steps per tier
|
||||||
step_len = {1, 2, 2, 2},
|
step_len = {1, 2, 3, 3},
|
||||||
textures = { -- overrides default texture naming, allowing reuse
|
textures = { -- overrides default texture naming, allowing reuse
|
||||||
p1s1t1 = "farming_super_2x_green_pixels_1.png",
|
p1s1t1 = "farming_super_2x_green_pixels_1.png",
|
||||||
p1s2t1 = "farming_super_2x_green_pixels_2.png",
|
p1s2t1 = "farming_super_2x_green_pixels_2.png",
|
||||||
|
@ -990,7 +994,7 @@ farming_super.register_plant("farming_super:carrot_purple", {
|
||||||
-- visual_scale = 1.3,
|
-- visual_scale = 1.3,
|
||||||
eat_value = 2,
|
eat_value = 2,
|
||||||
steps = {4}, -- phases, steps per tier
|
steps = {4}, -- phases, steps per tier
|
||||||
step_len = {1, 2, 2, 2},
|
step_len = {1, 2, 3, 3},
|
||||||
textures = { -- overrides default texture naming, allowing reuse
|
textures = { -- overrides default texture naming, allowing reuse
|
||||||
p1s1t1 = "farming_super_2x_green_pixels_1.png",
|
p1s1t1 = "farming_super_2x_green_pixels_1.png",
|
||||||
p1s2t1 = "farming_super_2x_green_pixels_2.png",
|
p1s2t1 = "farming_super_2x_green_pixels_2.png",
|
||||||
|
@ -1044,6 +1048,7 @@ farming_super.register_plant("farming_super:rice", {
|
||||||
paramtype2 = "meshoptions",
|
paramtype2 = "meshoptions",
|
||||||
place_param2 = "#",
|
place_param2 = "#",
|
||||||
inventory_image = "farming_super_seed_rice.png",
|
inventory_image = "farming_super_seed_rice.png",
|
||||||
|
default_drop = {},
|
||||||
-- visual_scale = 1.3,
|
-- visual_scale = 1.3,
|
||||||
steps = {8}, -- phases, steps per tier
|
steps = {8}, -- phases, steps per tier
|
||||||
drops = {
|
drops = {
|
||||||
|
|
|
@ -23,7 +23,6 @@ minetest.register_craftitem("farming_super:kiwi", {
|
||||||
minetest.register_craftitem("farming_super:kiwi_sapling", {
|
minetest.register_craftitem("farming_super:kiwi_sapling", {
|
||||||
description = "Kiwi Sapling",
|
description = "Kiwi Sapling",
|
||||||
inventory_image = "farming_super_kiwi_vine.png",
|
inventory_image = "farming_super_kiwi_vine.png",
|
||||||
on_use = minetest.item_eat(2),
|
|
||||||
groups = {flammable = 2},
|
groups = {flammable = 2},
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
|
Loading…
Reference in New Issue