forked from luanti-org/minetest_game
Leafdecay: Node timer based implementation, API
This implements a node-timer based leafdecay mechanism, and exposes
an API to use it in mods.
The API is documented in game_api.txt.
`default.register_leafdecay(leafdecaydef)`
`leafdecaydef` is a table, with following members:
{
trunks = { "default:tree"}, -- nodes considered trunks
leaves = { "default:leaves", "default:apple"}, -- nodes considered leaves
radius = 3, -- activates leafdecay this far from the trunk
}
The algorithm will drop `leaves` items in the area if no `trunks` are found
in the `trunk_radius` sized area around the position of the leaf. If a node
listed in `leaves` has a group `leafdecay_drop > 0`, then the item is dropped,
otherwise the item is removed but not dropped.
The algorithm also implements a value `default.leafdecay_speed` (default
15) which can be modified to increase or decrease of the leaf decay. The
algorithm will vary the actual speed a bit to introduce randomness.
Leaf decay is randomized by 0.1 seconds to reduce the chance that
decay happens many times on the same second interval. This requires
nodetimer_interval to be set to values lower than 1.0 to have an
effect.
The leaves will decay between 2 and 10 seconds after digging the trunk,
and happen at non-integer second intervals.
-- The API was added by sofar.
This commit is contained in:
@@ -2072,3 +2072,57 @@ minetest.register_node("default:cloud", {
|
||||
sounds = default.node_sound_defaults(),
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
})
|
||||
|
||||
--
|
||||
-- register trees for leafdecay
|
||||
--
|
||||
|
||||
if minetest.get_mapgen_setting("mg_name") == "v6" then
|
||||
default.register_leafdecay({
|
||||
trunks = {"default:tree"},
|
||||
leaves = {"default:apple", "default:leaves"},
|
||||
radius = 2,
|
||||
})
|
||||
|
||||
default.register_leafdecay({
|
||||
trunks = {"default:jungletree"},
|
||||
leaves = {"default:jungleleaves"},
|
||||
radius = 3,
|
||||
})
|
||||
|
||||
default.register_leafdecay({
|
||||
trunks = {"default:pine_tree"},
|
||||
leaves = {"default:pine_needles"},
|
||||
radius = 3,
|
||||
})
|
||||
else
|
||||
default.register_leafdecay({
|
||||
trunks = {"default:tree"},
|
||||
leaves = {"default:apple", "default:leaves"},
|
||||
radius = 3,
|
||||
})
|
||||
|
||||
default.register_leafdecay({
|
||||
trunks = {"default:jungletree"},
|
||||
leaves = {"default:jungleleaves"},
|
||||
radius = 2,
|
||||
})
|
||||
|
||||
default.register_leafdecay({
|
||||
trunks = {"default:pine_tree"},
|
||||
leaves = {"default:pine_needles"},
|
||||
radius = 2,
|
||||
})
|
||||
end
|
||||
|
||||
default.register_leafdecay({
|
||||
trunks = {"default:acacia_tree"},
|
||||
leaves = {"default:acacia_leaves"},
|
||||
radius = 2,
|
||||
})
|
||||
|
||||
default.register_leafdecay({
|
||||
trunks = {"default:aspen_tree"},
|
||||
leaves = {"default:aspen_leaves"},
|
||||
radius = 3,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user