123 lines
5.6 KiB
Markdown
123 lines
5.6 KiB
Markdown
|
Trees are common. Yet they are all registered manually so far. And plugging
|
||
|
in to their growing mechanism with mods is difficult.
|
||
|
|
||
|
Author: Sokomine
|
||
|
Contact: see https://github.com/Sokomine
|
||
|
|
||
|
License: LGPL (same as minetest_game) for the trees_lib from 11.04.2017 onward
|
||
|
(trees_lib_examples may contain code from other mods)
|
||
|
|
||
|
List of files:
|
||
|
init.lua The actual trees_lib.
|
||
|
|
||
|
If you want to see some examples, take a look at
|
||
|
https://github.com/Sokomine/trees_lib_examples
|
||
|
which contains the following additional files:
|
||
|
init.lua Just runs dofile on the other files.
|
||
|
trees_lib_growing_functions.lua Some tree growing functions as examples.
|
||
|
example_tree.lua A complex example for one tree.
|
||
|
trees.lua Replacement for default/trees.lua
|
||
|
|
||
|
Not covered by trees_lib:
|
||
|
* fuel receipes for the tree, wood, leaves nodes
|
||
|
* crafting of tree into wood (use trees_lib.register_on_new_tree_type for those)
|
||
|
* leafdecay
|
||
|
|
||
|
If you want to test trees_lib with the default mod, do the following:
|
||
|
|
||
|
1. (optional) remove/comment out all receipes for tree trunk -> 4 wood in default/crafting.lua
|
||
|
2. (optional) remove/comment out all tree, wood, leaves and fruit nodes in default/nodes.lua
|
||
|
If doing so, also remove/comment out all calls of default.register_leafdecay plus all
|
||
|
leafdecay-related functions in default/functions.lua.
|
||
|
3. (optional) rename the file default/trees.lua in order to create a backup.
|
||
|
4. copy trees_lib_examples/trees.lua to default/trees.lua
|
||
|
|
||
|
If you want to add a new tree using trees_lib, do the following:
|
||
|
|
||
|
1. Create a mod (MODNAME)
|
||
|
2. Find a name for your tree (TREENAME)
|
||
|
3. Create the following textures for your new tree:
|
||
|
MODNAME/textures/MODNAME_TREENAME_tree_top.png
|
||
|
MODNAME/textures/MODNAME_TREENAME_tree.png
|
||
|
MODNAME/textures/MODNAME_TREENAME_wood.png
|
||
|
MODNAME/textures/MODNAME_TREENAME_sapling.png
|
||
|
MODNAME/textures/MODNAME_TREENAME_leaves.png
|
||
|
MODNAME/textures/MODNAME_TREENAME_fruit.png
|
||
|
4. Make your mod depend on trees_lib by adding a line trees_lib to
|
||
|
MODNAME/depends.txt
|
||
|
5. Actually register the tree somewhere in your mod:
|
||
|
trees_lib.register_tree( TREENAME, minetest.get_current_modname() )
|
||
|
All other parameters to trees_lib.register_tree are optional.
|
||
|
|
||
|
|
||
|
Important functions:
|
||
|
|
||
|
register_tree
|
||
|
|
||
|
trees_lib.register_tree(tree_name, nodes, growing_methods, grows_on_node_type_list, can_grow_function, select_how_to_grow_function, interval, chance )
|
||
|
* tree_name needs to be unique withhin each mod, but not necessarily
|
||
|
withhin the entire game. This parameter is required.
|
||
|
* nodes may contain further information about the nodes the tree is composed
|
||
|
of (tree, wood, leaves, leaves2, leaves3, leaves4, leaves5, sapling, fruit).
|
||
|
Specify everything you want to override here (i.e. diffrent node name,
|
||
|
textures, drawtype, ...). Specify node_name = "air" (see trees.lua) if you
|
||
|
don't want a particular node (mostly used for trees that have no fruit)
|
||
|
* growing_methods is a list of how the sapling can be grown into a full tree.
|
||
|
Each entry needs one of the following entries:
|
||
|
use_function = function_to_grow_the_sapling
|
||
|
or
|
||
|
use_schematic = path_to_the_schematic_file
|
||
|
or
|
||
|
use_schematic = table_containing_the_schematic
|
||
|
or
|
||
|
use_lsystem = table_containing_lsystem_growth_data
|
||
|
In addition, the following values are usually needed:
|
||
|
xoff = x_offset, zoff = z_offset, yoff = y_offset (how deep burried),
|
||
|
height = height (total height of the tree)
|
||
|
These values describe which area the Voxelmanip needs to load or how
|
||
|
far away from the sapling's position the schematic ought to be placed.
|
||
|
* grows_on_node_type_list is a list of nodenames (or groups in the form
|
||
|
of i.e "group:stone") on which the sapling will grow.
|
||
|
* can_grow_function will be called when the abm for a sapling fires:
|
||
|
if can_grow( pos, node, ground_found ) returns
|
||
|
1, the tree will grow
|
||
|
0, the tree will try again next time (i.e. too dark)
|
||
|
-1, the tree really doesn't like this place and fails to grow,
|
||
|
usually turning into dry shrub
|
||
|
* select_how_to_grow_function can modify the way a tree will grow:
|
||
|
select_how_to_grow( pos, node, growing.how_to_grow, ground_found )
|
||
|
It can either return a number (thus choosing one of the growing methods
|
||
|
from the growing_methods parameter), or its own new growing method.
|
||
|
* interval
|
||
|
The interval parameter for the abm for the growing of the sapling.
|
||
|
Default value is 10.
|
||
|
* chance
|
||
|
The chance parameter for the abm for the growing of the sapling.
|
||
|
Default value is 50.
|
||
|
|
||
|
|
||
|
trees_lib.register_on_new_tree_type( new_tree_type_function )
|
||
|
The function new_tree_type_function will be called once for each registered
|
||
|
tree with the following parameters:
|
||
|
new_tree_type_function( tree_name, mod_prefix, nodes )
|
||
|
This is useful for i.e. adding craft receipes and further nodes. See
|
||
|
trees.lua for an example.
|
||
|
If trees have allready been registered when the new function is registered,
|
||
|
it will be called for each known tree once, and of course for all
|
||
|
subsequently registered trees.
|
||
|
|
||
|
|
||
|
trees_lib.failed_to_grow( pos, node )
|
||
|
This function is called when a tree failed to grow (i.e. because it does not
|
||
|
like the ground it is placed on). The default action is to turn the sapling
|
||
|
into dry shrub.
|
||
|
|
||
|
trees_lib.a_tree_has_grown( pos, node, how_to_grow )
|
||
|
Called whenever a tree has successfully grown. Useful i.e. for logging (see
|
||
|
trees.lua)
|
||
|
|
||
|
trees_lib.tree_abm_grow_tree( pos, node, sapling_data, how_to_grow, force_grow )
|
||
|
The actual function that lets the tree grow.
|
||
|
|
||
|
|