Default: Convert saplings to use node timers

Each sapling is given a single node timer that is between
2 and 4 days of game play time (40-80 minutes). If you walk out
of the zone, and come back later, the tree will always grow
to full if the timer has elapsed.

Because trees.lua is all functions, it needs to be parsed before
nodes.lua, since that references some of its functions. Hence,
change the order of parsing here. Otherwise saplings would not
grow to full.
This commit is contained in:
Auke Kok 2016-03-06 21:39:07 -08:00 committed by paramat
parent 70ef7864c1
commit e0cb3fce02
3 changed files with 73 additions and 48 deletions

@ -36,6 +36,7 @@ default.gui_survival_form = "size[8,8.5]"..
-- Load files -- Load files
dofile(minetest.get_modpath("default").."/functions.lua") dofile(minetest.get_modpath("default").."/functions.lua")
dofile(minetest.get_modpath("default").."/trees.lua")
dofile(minetest.get_modpath("default").."/nodes.lua") dofile(minetest.get_modpath("default").."/nodes.lua")
dofile(minetest.get_modpath("default").."/furnace.lua") dofile(minetest.get_modpath("default").."/furnace.lua")
dofile(minetest.get_modpath("default").."/tools.lua") dofile(minetest.get_modpath("default").."/tools.lua")
@ -43,6 +44,5 @@ dofile(minetest.get_modpath("default").."/craftitems.lua")
dofile(minetest.get_modpath("default").."/crafting.lua") dofile(minetest.get_modpath("default").."/crafting.lua")
dofile(minetest.get_modpath("default").."/mapgen.lua") dofile(minetest.get_modpath("default").."/mapgen.lua")
dofile(minetest.get_modpath("default").."/player.lua") dofile(minetest.get_modpath("default").."/player.lua")
dofile(minetest.get_modpath("default").."/trees.lua")
dofile(minetest.get_modpath("default").."/aliases.lua") dofile(minetest.get_modpath("default").."/aliases.lua")
dofile(minetest.get_modpath("default").."/legacy.lua") dofile(minetest.get_modpath("default").."/legacy.lua")

@ -455,6 +455,10 @@ minetest.register_node("default:sapling", {
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, walkable = false,
on_timer = default.grow_sapling,
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
@ -573,6 +577,10 @@ minetest.register_node("default:junglesapling", {
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, walkable = false,
on_timer = default.grow_sapling,
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
@ -634,6 +642,10 @@ minetest.register_node("default:pine_sapling", {
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, walkable = false,
on_timer = default.grow_sapling,
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
@ -695,6 +707,10 @@ minetest.register_node("default:acacia_sapling", {
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, walkable = false,
on_timer = default.grow_sapling,
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
@ -755,6 +771,10 @@ minetest.register_node("default:aspen_sapling", {
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, walkable = false,
on_timer = default.grow_sapling,
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800))
end,
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}

@ -59,18 +59,15 @@ end
-- Sapling ABM -- Sapling ABM
minetest.register_abm({ function default.grow_sapling(pos)
nodenames = {"default:sapling", "default:junglesapling",
"default:pine_sapling", "default:acacia_sapling",
"default:aspen_sapling"},
interval = 10,
chance = 50,
action = function(pos, node)
if not default.can_grow(pos) then if not default.can_grow(pos) then
-- try a bit later again
minetest.get_node_timer(pos):start(math.random(240, 600))
return return
end end
local mapgen = minetest.get_mapgen_params().mgname local mapgen = minetest.get_mapgen_params().mgname
local node = minetest.get_node(pos)
if node.name == "default:sapling" then if node.name == "default:sapling" then
minetest.log("action", "A sapling grows into a tree at ".. minetest.log("action", "A sapling grows into a tree at "..
minetest.pos_to_string(pos)) minetest.pos_to_string(pos))
@ -107,10 +104,18 @@ minetest.register_abm({
minetest.pos_to_string(pos)) minetest.pos_to_string(pos))
default.grow_new_aspen_tree(pos) default.grow_new_aspen_tree(pos)
end end
end
minetest.register_lbm({
name = "default:convert_saplings_to_node_timer",
nodenames = {"default:sapling", "default:junglesapling",
"default:pine_sapling", "default:acacia_sapling",
"default:aspen_sapling"},
action = function(pos)
minetest.get_node_timer(pos):start(math.random(1200, 2400))
end end
}) })
-- --
-- Tree generation -- Tree generation
-- --