@@ -287,193 +287,6 @@ minetest.register_node("default:junglesapling", {
287
287
sounds = default .node_sound_leaves_defaults (),
288
288
})
289
289
290
- local c_air = minetest .get_content_id (" air" )
291
- local c_ignore = minetest .get_content_id (" ignore" )
292
- local c_tree = minetest .get_content_id (" default:tree" )
293
- local c_leaves = minetest .get_content_id (" default:leaves" )
294
- local c_apple = minetest .get_content_id (" default:apple" )
295
- function default .grow_tree (data , a , pos , is_apple_tree , seed )
296
- --[[
297
- NOTE: Tree-placing code is currently duplicated in the engine
298
- and in games that have saplings; both are deprecated but not
299
- replaced yet
300
- ]] --
301
- local pr = PseudoRandom (seed )
302
- local th = pr :next (4 , 5 )
303
- local x , y , z = pos .x , pos .y , pos .z
304
- for yy = y , y + th - 1 do
305
- local vi = a :index (x , yy , z )
306
- if a :contains (x , yy , z ) and (data [vi ] == c_air or yy == y ) then
307
- data [vi ] = c_tree
308
- end
309
- end
310
- y = y + th - 1 -- (x, y, z) is now last piece of trunk
311
- local leaves_a = VoxelArea :new {MinEdge = {x =- 2 , y =- 1 , z =- 2 }, MaxEdge = {x = 2 , y = 2 , z = 2 }}
312
- local leaves_buffer = {}
313
-
314
- -- Force leaves near the trunk
315
- local d = 1
316
- for xi = - d , d do
317
- for yi = - d , d do
318
- for zi = - d , d do
319
- leaves_buffer [leaves_a :index (xi , yi , zi )] = true
320
- end
321
- end
322
- end
323
-
324
- -- Add leaves randomly
325
- for iii = 1 , 8 do
326
- local d = 1
327
- local xx = pr :next (leaves_a .MinEdge .x , leaves_a .MaxEdge .x - d )
328
- local yy = pr :next (leaves_a .MinEdge .y , leaves_a .MaxEdge .y - d )
329
- local zz = pr :next (leaves_a .MinEdge .z , leaves_a .MaxEdge .z - d )
330
-
331
- for xi = 0 , d do
332
- for yi = 0 , d do
333
- for zi = 0 , d do
334
- leaves_buffer [leaves_a :index (xx + xi , yy + yi , zz + zi )] = true
335
- end
336
- end
337
- end
338
- end
339
-
340
- -- Add the leaves
341
- for xi = leaves_a .MinEdge .x , leaves_a .MaxEdge .x do
342
- for yi = leaves_a .MinEdge .y , leaves_a .MaxEdge .y do
343
- for zi = leaves_a .MinEdge .z , leaves_a .MaxEdge .z do
344
- if a :contains (x + xi , y + yi , z + zi ) then
345
- local vi = a :index (x + xi , y + yi , z + zi )
346
- if data [vi ] == c_air or data [vi ] == c_ignore then
347
- if leaves_buffer [leaves_a :index (xi , yi , zi )] then
348
- if is_apple_tree and pr :next (1 , 100 ) <= 10 then
349
- data [vi ] = c_apple
350
- else
351
- data [vi ] = c_leaves
352
- end
353
- end
354
- end
355
- end
356
- end
357
- end
358
- end
359
- end
360
-
361
- minetest .register_abm ({
362
- nodenames = {" default:sapling" },
363
- interval = 10 ,
364
- chance = 50 ,
365
- action = function (pos , node )
366
- local is_soil = minetest .registered_nodes [minetest .get_node ({x = pos .x , y = pos .y - 1 , z = pos .z }).name ].groups .soil
367
- if is_soil == nil or is_soil == 0 then return end
368
- print (" A sapling grows into a tree at " .. minetest .pos_to_string (pos ))
369
- local vm = minetest .get_voxel_manip ()
370
- local minp , maxp = vm :read_from_map ({x = pos .x - 16 , y = pos .y , z = pos .z - 16 }, {x = pos .x + 16 , y = pos .y + 16 , z = pos .z + 16 })
371
- local a = VoxelArea :new {MinEdge = minp , MaxEdge = maxp }
372
- local data = vm :get_data ()
373
- default .grow_tree (data , a , pos , math.random (1 , 4 ) == 1 , math.random (1 ,100000 ))
374
- vm :set_data (data )
375
- vm :write_to_map (data )
376
- vm :update_map ()
377
- end
378
- })
379
-
380
- local c_jungletree = minetest .get_content_id (" default:jungletree" )
381
- local c_jungleleaves = minetest .get_content_id (" default:jungleleaves" )
382
- function default .grow_jungletree (data , a , pos , seed )
383
- --[[
384
- NOTE: Tree-placing code is currently duplicated in the engine
385
- and in games that have saplings; both are deprecated but not
386
- replaced yet
387
- ]] --
388
- local pr = PseudoRandom (seed )
389
- local x , y , z = pos .x , pos .y , pos .z
390
- for xi = - 1 , 1 do
391
- for zi = - 1 , 1 do
392
- if pr :next (1 , 3 ) >= 2 then
393
- local vi1 = a :index (x + xi , y , z + zi )
394
- local vi2 = a :index (x + xi , y - 1 , z + zi )
395
- if a :contains (x + xi , y - 1 , z + zi ) and data [vi2 ] == c_air then
396
- data [vi2 ] = c_jungletree
397
- elseif a :contains (x + xi , y , z + zi ) and data [vi1 ] == c_air then
398
- data [vi1 ] = c_jungletree
399
- end
400
- end
401
- end
402
- end
403
-
404
- local th = pr :next (8 , 12 )
405
- for yy = y , y + th - 1 do
406
- local vi = a :index (x , yy , z )
407
- if a :contains (x , yy , z ) and (data [vi ] == c_air or yy == y ) then
408
- data [vi ] = c_jungletree
409
- end
410
- end
411
- y = y + th - 1 -- (x, y, z) is now last piece of trunk
412
- local leaves_a = VoxelArea :new {MinEdge = {x =- 3 , y =- 2 , z =- 3 }, MaxEdge = {x = 3 , y = 2 , z = 3 }}
413
- local leaves_buffer = {}
414
-
415
- -- Force leaves near the trunk
416
- local d = 1
417
- for xi = - d , d do
418
- for yi = - d , d do
419
- for zi = - d , d do
420
- leaves_buffer [leaves_a :index (xi , yi , zi )] = true
421
- end
422
- end
423
- end
424
-
425
- -- Add leaves randomly
426
- for iii = 1 , 30 do
427
- local d = 1
428
- local xx = pr :next (leaves_a .MinEdge .x , leaves_a .MaxEdge .x - d )
429
- local yy = pr :next (leaves_a .MinEdge .y , leaves_a .MaxEdge .y - d )
430
- local zz = pr :next (leaves_a .MinEdge .z , leaves_a .MaxEdge .z - d )
431
-
432
- for xi = 0 , d do
433
- for yi = 0 , d do
434
- for zi = 0 , d do
435
- leaves_buffer [leaves_a :index (xx + xi , yy + yi , zz + zi )] = true
436
- end
437
- end
438
- end
439
- end
440
-
441
- -- Add the leaves
442
- for xi = leaves_a .MinEdge .x , leaves_a .MaxEdge .x do
443
- for yi = leaves_a .MinEdge .y , leaves_a .MaxEdge .y do
444
- for zi = leaves_a .MinEdge .z , leaves_a .MaxEdge .z do
445
- if a :contains (x + xi , y + yi , z + zi ) then
446
- local vi = a :index (x + xi , y + yi , z + zi )
447
- if data [vi ] == c_air or data [vi ] == c_ignore then
448
- if leaves_buffer [leaves_a :index (xi , yi , zi )] then
449
- data [vi ] = c_jungleleaves
450
- end
451
- end
452
- end
453
- end
454
- end
455
- end
456
- end
457
-
458
- minetest .register_abm ({
459
- nodenames = {" default:junglesapling" },
460
- interval = 1 ,
461
- chance = 1 ,
462
- action = function (pos , node )
463
- local is_soil = minetest .registered_nodes [minetest .get_node ({x = pos .x , y = pos .y - 1 , z = pos .z }).name ].groups .soil
464
- if is_soil == nil or is_soil == 0 then return end
465
- print (" A jungle sapling grows into a tree at " .. minetest .pos_to_string (pos ))
466
- local vm = minetest .get_voxel_manip ()
467
- local minp , maxp = vm :read_from_map ({x = pos .x - 16 , y = pos .y - 1 , z = pos .z - 16 }, {x = pos .x + 16 , y = pos .y + 16 , z = pos .z + 16 })
468
- local a = VoxelArea :new {MinEdge = minp , MaxEdge = maxp }
469
- local data = vm :get_data ()
470
- default .grow_jungletree (data , a , pos , math.random (1 ,100000 ))
471
- vm :set_data (data )
472
- vm :write_to_map (data )
473
- vm :update_map ()
474
- end
475
- })
476
-
477
290
minetest .register_node (" default:junglegrass" , {
478
291
description = " Jungle Grass" ,
479
292
drawtype = " plantlike" ,
0 commit comments