Skip to content

Commit e0cb3fc

Browse files
sofarparamat
authored andcommittedMay 25, 2016
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.
1 parent 70ef786 commit e0cb3fc

File tree

3 files changed

+73
-48
lines changed

3 files changed

+73
-48
lines changed
 

‎mods/default/init.lua

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ default.gui_survival_form = "size[8,8.5]"..
3636

3737
-- Load files
3838
dofile(minetest.get_modpath("default").."/functions.lua")
39+
dofile(minetest.get_modpath("default").."/trees.lua")
3940
dofile(minetest.get_modpath("default").."/nodes.lua")
4041
dofile(minetest.get_modpath("default").."/furnace.lua")
4142
dofile(minetest.get_modpath("default").."/tools.lua")
4243
dofile(minetest.get_modpath("default").."/craftitems.lua")
4344
dofile(minetest.get_modpath("default").."/crafting.lua")
4445
dofile(minetest.get_modpath("default").."/mapgen.lua")
4546
dofile(minetest.get_modpath("default").."/player.lua")
46-
dofile(minetest.get_modpath("default").."/trees.lua")
4747
dofile(minetest.get_modpath("default").."/aliases.lua")
4848
dofile(minetest.get_modpath("default").."/legacy.lua")

‎mods/default/nodes.lua

+20
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,10 @@ minetest.register_node("default:sapling", {
455455
paramtype = "light",
456456
sunlight_propagates = true,
457457
walkable = false,
458+
on_timer = default.grow_sapling,
459+
on_construct = function(pos)
460+
minetest.get_node_timer(pos):start(math.random(2400,4800))
461+
end,
458462
selection_box = {
459463
type = "fixed",
460464
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
@@ -573,6 +577,10 @@ minetest.register_node("default:junglesapling", {
573577
paramtype = "light",
574578
sunlight_propagates = true,
575579
walkable = false,
580+
on_timer = default.grow_sapling,
581+
on_construct = function(pos)
582+
minetest.get_node_timer(pos):start(math.random(2400,4800))
583+
end,
576584
selection_box = {
577585
type = "fixed",
578586
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
@@ -634,6 +642,10 @@ minetest.register_node("default:pine_sapling", {
634642
paramtype = "light",
635643
sunlight_propagates = true,
636644
walkable = false,
645+
on_timer = default.grow_sapling,
646+
on_construct = function(pos)
647+
minetest.get_node_timer(pos):start(math.random(2400,4800))
648+
end,
637649
selection_box = {
638650
type = "fixed",
639651
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
@@ -695,6 +707,10 @@ minetest.register_node("default:acacia_sapling", {
695707
paramtype = "light",
696708
sunlight_propagates = true,
697709
walkable = false,
710+
on_timer = default.grow_sapling,
711+
on_construct = function(pos)
712+
minetest.get_node_timer(pos):start(math.random(2400,4800))
713+
end,
698714
selection_box = {
699715
type = "fixed",
700716
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
@@ -755,6 +771,10 @@ minetest.register_node("default:aspen_sapling", {
755771
paramtype = "light",
756772
sunlight_propagates = true,
757773
walkable = false,
774+
on_timer = default.grow_sapling,
775+
on_construct = function(pos)
776+
minetest.get_node_timer(pos):start(math.random(2400,4800))
777+
end,
758778
selection_box = {
759779
type = "fixed",
760780
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}

‎mods/default/trees.lua

+52-47
Original file line numberDiff line numberDiff line change
@@ -59,57 +59,62 @@ end
5959

6060
-- Sapling ABM
6161

62-
minetest.register_abm({
63-
nodenames = {"default:sapling", "default:junglesapling",
64-
"default:pine_sapling", "default:acacia_sapling",
65-
"default:aspen_sapling"},
66-
interval = 10,
67-
chance = 50,
68-
action = function(pos, node)
69-
if not default.can_grow(pos) then
70-
return
71-
end
62+
function default.grow_sapling(pos)
63+
if not default.can_grow(pos) then
64+
-- try a bit later again
65+
minetest.get_node_timer(pos):start(math.random(240, 600))
66+
return
67+
end
7268

73-
local mapgen = minetest.get_mapgen_params().mgname
74-
if node.name == "default:sapling" then
75-
minetest.log("action", "A sapling grows into a tree at "..
76-
minetest.pos_to_string(pos))
77-
if mapgen == "v6" then
78-
default.grow_tree(pos, random(1, 4) == 1)
79-
else
80-
default.grow_new_apple_tree(pos)
81-
end
82-
elseif node.name == "default:junglesapling" then
83-
minetest.log("action", "A jungle sapling grows into a tree at "..
84-
minetest.pos_to_string(pos))
85-
if mapgen == "v6" then
86-
default.grow_jungle_tree(pos)
87-
else
88-
default.grow_new_jungle_tree(pos)
89-
end
90-
elseif node.name == "default:pine_sapling" then
91-
minetest.log("action", "A pine sapling grows into a tree at "..
92-
minetest.pos_to_string(pos))
93-
local snow = is_snow_nearby(pos)
94-
if mapgen == "v6" then
95-
default.grow_pine_tree(pos, snow)
96-
elseif snow then
97-
default.grow_new_snowy_pine_tree(pos)
98-
else
99-
default.grow_new_pine_tree(pos)
100-
end
101-
elseif node.name == "default:acacia_sapling" then
102-
minetest.log("action", "An acacia sapling grows into a tree at "..
103-
minetest.pos_to_string(pos))
104-
default.grow_new_acacia_tree(pos)
105-
elseif node.name == "default:aspen_sapling" then
106-
minetest.log("action", "An aspen sapling grows into a tree at "..
107-
minetest.pos_to_string(pos))
108-
default.grow_new_aspen_tree(pos)
69+
local mapgen = minetest.get_mapgen_params().mgname
70+
local node = minetest.get_node(pos)
71+
if node.name == "default:sapling" then
72+
minetest.log("action", "A sapling grows into a tree at "..
73+
minetest.pos_to_string(pos))
74+
if mapgen == "v6" then
75+
default.grow_tree(pos, random(1, 4) == 1)
76+
else
77+
default.grow_new_apple_tree(pos)
78+
end
79+
elseif node.name == "default:junglesapling" then
80+
minetest.log("action", "A jungle sapling grows into a tree at "..
81+
minetest.pos_to_string(pos))
82+
if mapgen == "v6" then
83+
default.grow_jungle_tree(pos)
84+
else
85+
default.grow_new_jungle_tree(pos)
10986
end
87+
elseif node.name == "default:pine_sapling" then
88+
minetest.log("action", "A pine sapling grows into a tree at "..
89+
minetest.pos_to_string(pos))
90+
local snow = is_snow_nearby(pos)
91+
if mapgen == "v6" then
92+
default.grow_pine_tree(pos, snow)
93+
elseif snow then
94+
default.grow_new_snowy_pine_tree(pos)
95+
else
96+
default.grow_new_pine_tree(pos)
97+
end
98+
elseif node.name == "default:acacia_sapling" then
99+
minetest.log("action", "An acacia sapling grows into a tree at "..
100+
minetest.pos_to_string(pos))
101+
default.grow_new_acacia_tree(pos)
102+
elseif node.name == "default:aspen_sapling" then
103+
minetest.log("action", "An aspen sapling grows into a tree at "..
104+
minetest.pos_to_string(pos))
105+
default.grow_new_aspen_tree(pos)
110106
end
111-
})
107+
end
112108

109+
minetest.register_lbm({
110+
name = "default:convert_saplings_to_node_timer",
111+
nodenames = {"default:sapling", "default:junglesapling",
112+
"default:pine_sapling", "default:acacia_sapling",
113+
"default:aspen_sapling"},
114+
action = function(pos)
115+
minetest.get_node_timer(pos):start(math.random(1200, 2400))
116+
end
117+
})
113118

114119
--
115120
-- Tree generation

0 commit comments

Comments
 (0)
Please sign in to comment.