@@ -83,6 +83,7 @@ minetest.register_abm({
83
83
pos .y = pos .y + 1
84
84
if under .name == " default:desert_sand" then
85
85
minetest .set_node (pos , {name = " default:dry_shrub" })
86
+ return
86
87
elseif under .name ~= " default:dirt_with_grass" then
87
88
return
88
89
end
@@ -92,28 +93,22 @@ minetest.register_abm({
92
93
return
93
94
end
94
95
95
- local pos0 = {x = pos .x - 4 , y = pos .y - 4 , z = pos .z - 4 }
96
- local pos1 = {x = pos .x + 4 , y = pos .y + 4 , z = pos .z + 4 }
97
- if # minetest .find_nodes_in_area (pos0 , pos1 , " group:flora_block" ) > 0 then
96
+ local pos0 = vector .subtract (pos , 4 )
97
+ local pos1 = vector .add (pos , 4 )
98
+ if # minetest .find_nodes_in_area (pos0 , pos1 , " group:flora" ) > 3 or
99
+ # minetest .find_nodes_in_area (pos0 , pos1 , " group:flora_block" ) > 0 then
98
100
return
99
101
end
100
102
101
- local flowers = minetest .find_nodes_in_area (pos0 , pos1 , " group:flora" )
102
- if # flowers > 3 then
103
- return
104
- end
105
-
106
- local seedling = minetest .find_nodes_in_area (pos0 , pos1 , " default:dirt_with_grass" )
103
+ local seedling = minetest .find_nodes_in_area_under_air (pos0 , pos1 , " default:dirt_with_grass" )
107
104
if # seedling > 0 then
108
105
seedling = seedling [math.random (# seedling )]
109
106
seedling .y = seedling .y + 1
110
107
light = minetest .get_node_light (seedling )
111
108
if not light or light < 13 then
112
109
return
113
110
end
114
- if minetest .get_node (seedling ).name == " air" then
115
- minetest .set_node (seedling , {name = node .name })
116
- end
111
+ minetest .set_node (seedling , {name = node .name })
117
112
end
118
113
end ,
119
114
})
@@ -169,27 +164,27 @@ minetest.register_abm({
169
164
action = function (pos , node )
170
165
if minetest .get_node_light (pos , nil ) == 15 then
171
166
minetest .remove_node (pos )
167
+ return
172
168
end
173
169
local random = {
174
- x = pos .x + math.random (- 2 ,2 ),
175
- y = pos .y + math.random (- 1 ,1 ),
176
- z = pos .z + math.random (- 2 ,2 )
170
+ x = pos .x + math.random (- 2 , 2 ),
171
+ y = pos .y + math.random (- 1 , 1 ),
172
+ z = pos .z + math.random (- 2 , 2 )
177
173
}
178
174
local random_node = minetest .get_node_or_nil (random )
179
- if not random_node then
180
- return
181
- end
182
- if random_node .name ~= " air" then
175
+ if not random_node or random_node .name ~= " air" then
183
176
return
184
177
end
185
178
local node_under = minetest .get_node_or_nil ({x = random .x ,
186
179
y = random .y - 1 , z = random .z })
187
180
if not node_under then
188
181
return
189
182
end
190
- if minetest .get_item_group (node_under .name , " soil" ) ~= 0 and
191
- minetest .get_node_light (pos , nil ) <= 9 and
192
- minetest .get_node_light (random , nil ) <= 9 then
183
+
184
+ if (minetest .get_item_group (node_under .name , " soil" ) ~= 0 or
185
+ minetest .get_item_group (node_under .name , " tree" ) ~= 0 ) and
186
+ minetest .get_node_light (pos , 0.5 ) <= 3 and
187
+ minetest .get_node_light (random , 0.5 ) <= 3 then
193
188
minetest .set_node (random , {name = node .name })
194
189
end
195
190
end
0 commit comments