aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/lua_api.txt371
1 files changed, 220 insertions, 151 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 0bbf9c79b..65e1a4eac 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1353,8 +1353,8 @@ HUD element types
-----------------
The position field is used for all element types.
-To account for differing resolutions, the position coordinates are the percentage
-of the screen, ranging in value from `0` to `1`.
+To account for differing resolutions, the position coordinates are the
+percentage of the screen, ranging in value from `0` to `1`.
The name field is not yet used, but should contain a description of what the
HUD element represents. The direction field is the direction in which something
@@ -1363,20 +1363,22 @@ is drawn.
`0` draws from left to right, `1` draws from right to left, `2` draws from
top to bottom, and `3` draws from bottom to top.
-The `alignment` field specifies how the item will be aligned. It ranges from `-1` to `1`,
-with `0` being the center, `-1` is moved to the left/up, and `1` is to the right/down.
-Fractional values can be used.
+The `alignment` field specifies how the item will be aligned. It ranges from
+`-1` to `1`, with `0` being the center. `-1` is moved to the left/up, and `1`
+is to the right/down. Fractional values can be used.
-The `offset` field specifies a pixel offset from the position. Contrary to position,
-the offset is not scaled to screen size. This allows for some precisely-positioned
-items in the HUD.
+The `offset` field specifies a pixel offset from the position. Contrary to
+position, the offset is not scaled to screen size. This allows for some
+precisely positioned items in the HUD.
-**Note**: `offset` _will_ adapt to screen DPI as well as user defined scaling factor!
+**Note**: `offset` _will_ adapt to screen DPI as well as user defined scaling
+factor!
-Below are the specific uses for fields in each type; fields not listed for that type are ignored.
+Below are the specific uses for fields in each type; fields not listed for that
+type are ignored.
-**Note**: Future revisions to the HUD API may be incompatible; the HUD API is still
-in the experimental stages.
+**Note**: Future revisions to the HUD API may be incompatible; the HUD API is
+still in the experimental stages.
### `image`
Displays an image on the HUD.
@@ -1395,8 +1397,8 @@ Displays text on the HUD.
* `scale`: Defines the bounding rectangle of the text.
A value such as `{x=100, y=100}` should work.
* `text`: The text to be displayed in the HUD element.
-* `number`: An integer containing the RGB value of the color used to draw the text.
- Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on.
+* `number`: An integer containing the RGB value of the color used to draw the
+ text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on.
* `alignment`: The alignment of the text.
* `offset`: offset in pixels from position.
@@ -1408,7 +1410,8 @@ Displays a horizontal bar made up of half-images.
If odd, will end with a vertically center-split texture.
* `direction`
* `offset`: offset in pixels from position.
-* `size`: If used, will force full-image size to this value (override texture pack image size)
+* `size`: If used, will force full-image size to this value (override texture
+ pack image size)
### `inventory`
* `text`: The name of the inventory list to be displayed.
@@ -1422,7 +1425,8 @@ Displays distance to selected world position.
* `name`: The name of the waypoint.
* `text`: Distance suffix. Can be blank.
-* `number:` An integer containing the RGB value of the color used to draw the text.
+* `number:` An integer containing the RGB value of the color used to draw the
+ text.
* `world_pos`: World position of the waypoint.
Representations of simple things
@@ -1441,8 +1445,8 @@ For helper functions see "Vector helpers".
Flag Specifier Format
---------------------
-Flags using the standardized flag specifier format can be specified in either of
-two ways, by string or table.
+Flags using the standardized flag specifier format can be specified in either
+of two ways, by string or table.
The string format is a comma-delimited set of flag names; whitespace and
unrecognized flag fields are ignored. Specifying a flag in the string sets the
@@ -1791,7 +1795,7 @@ a non-tool item, so that it can do something else than take damage.
On the Lua side, every punch calls:
- entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction, damage)
+ entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction, damage)
This should never be called directly, because damage is usually not handled by
the entity itself.
@@ -1808,12 +1812,12 @@ Return value of this function will determine if damage is done by this function
To punch an entity/object in Lua, call:
- object:punch(puncher, time_from_last_punch, tool_capabilities, direction)
+ object:punch(puncher, time_from_last_punch, tool_capabilities, direction)
* Return value is tool wear.
* Parameters are equal to the above callback.
-* If `direction` equals `nil` and `puncher` does not equal `nil`,
- `direction` will be automatically filled in based on the location of `puncher`.
+* If `direction` equals `nil` and `puncher` does not equal `nil`, `direction`
+ will be automatically filled in based on the location of `puncher`.
Node Metadata
-------------
@@ -1867,7 +1871,8 @@ Item metadata only contains a key-value store.
Some of the values in the key-value store are handled specially:
-* `description`: Set the item stack's description. Defaults to `idef.description`
+* `description`: Set the item stack's description. Defaults to
+ `idef.description`.
* `color`: A `ColorString`, which sets the stack's color.
* `palette_index`: If the item has a palette, this is used to get the
current color from the palette.
@@ -1920,7 +1925,8 @@ examples.
#### `position[<X>,<Y>]`
* Must be used after `size` element.
* Defines the position on the game window of the formspec's `anchor` point.
-* For X and Y, 0.0 and 1.0 represent opposite edges of the game window, for example:
+* For X and Y, 0.0 and 1.0 represent opposite edges of the game window,
+ for example:
* [0.0, 0.0] sets the position to the top left corner of the game window.
* [1.0, 1.0] sets the position to the bottom right of the game window.
* Defaults to the center of the game window [0.5, 0.5].
@@ -1928,7 +1934,8 @@ examples.
#### `anchor[<X>,<Y>]`
* Must be used after both `size` and `position` (if present) elements.
* Defines the location of the anchor point within the formspec.
-* For X and Y, 0.0 and 1.0 represent opposite edges of the formspec, for example:
+* For X and Y, 0.0 and 1.0 represent opposite edges of the formspec,
+ for example:
* [0.0, 1.0] sets the anchor to the bottom left corner of the formspec.
* [1.0, 0.0] sets the anchor to the top right of the formspec.
* Defaults to the center of the formspec [0.5, 0.5].
@@ -1937,13 +1944,15 @@ examples.
extending off the game window due to particular game window sizes.
#### `container[<X>,<Y>]`
-* Start of a container block, moves all physical elements in the container by (X, Y)
+* Start of a container block, moves all physical elements in the container by
+ (X, Y).
* Must have matching `container_end`
* Containers can be nested, in which case the offsets are added
(child containers are relative to parent containers)
#### `container_end[]`
-* End of a container, following elements are no longer relative to this container
+* End of a container, following elements are no longer relative to this
+ container.
#### `list[<inventory location>;<list name>;<X>,<Y>;<W>,<H>;]`
* Show an inventory list
@@ -1993,7 +2002,8 @@ examples.
#### `bgcolor[<color>;<fullscreen>]`
* Sets background color of formspec as `ColorString`
-* If `true`, the background color is drawn fullscreen (does not effect the size of the formspec)
+* If `true`, the background color is drawn fullscreen (does not effect the size
+ of the formspec).
#### `background[<X>,<Y>;<W>,<H>;<texture name>]`
* Use a background. Inventory rectangles are not drawn then.
@@ -2011,8 +2021,8 @@ examples.
#### `pwdfield[<X>,<Y>;<W>,<H>;<name>;<label>]`
* Textual password style field; will be sent to server when a button is clicked
-* When enter is pressed in field, fields.key_enter_field will be sent with the name
- of this field.
+* When enter is pressed in field, fields.key_enter_field will be sent with the
+ name of this field.
* `x` and `y` position the field relative to the top left of the menu
* `w` and `h` are the size of the field
* Fields are a set height, but will be vertically centred on `h`
@@ -2023,8 +2033,8 @@ examples.
#### `field[<X>,<Y>;<W>,<H>;<name>;<label>;<default>]`
* Textual field; will be sent to server when a button is clicked
-* When enter is pressed in field, `fields.key_enter_field` will be sent with the name
- of this field.
+* When enter is pressed in field, `fields.key_enter_field` will be sent with
+ the name of this field.
* `x` and `y` position the field relative to the top left of the menu
* `w` and `h` are the size of the field
* Fields are a set height, but will be vertically centred on `h`
@@ -2039,8 +2049,8 @@ examples.
#### `field[<name>;<label>;<default>]`
* As above, but without position/size units
-* When enter is pressed in field, `fields.key_enter_field` will be sent with the name
- of this field.
+* When enter is pressed in field, `fields.key_enter_field` will be sent with
+ the name of this field.
* Special field for creating simple forms, such as sign text input
* Must be used without a `size[]` element
* A "Proceed" button will be added automatically
@@ -2048,13 +2058,14 @@ examples.
#### `field_close_on_enter[<name>;<close_on_enter>]`
* <name> is the name of the field
-* if <close_on_enter> is false, pressing enter in the field will submit the form but not close it
+* if <close_on_enter> is false, pressing enter in the field will submit the
+ form but not close it.
* defaults to true when not specified (ie: no tag for a field)
#### `textarea[<X>,<Y>;<W>,<H>;<name>;<label>;<default>]`
* Same as fields above, but with multi-line input
* if the text overflows a vertical scrollbar is added
-* if the name is empty the textarea is readonly. The label is not displayed then
+* if the name is empty the textarea is readonly, the label is not displayed.
#### `label[<X>,<Y>;<label>]`
* `x` and `y` work as per field
@@ -2084,7 +2095,8 @@ examples.
* `x`, `y`, `w`, `h`, and `name` work as per button
* `texture name` is the filename of an image
* Position and size units are inventory slots
-* `noclip=true` means the image button doesn't need to be within specified formsize
+* `noclip=true` means the image button doesn't need to be within specified
+ formsize.
* `drawborder`: draw button border or not
* `pressed texture name` is the filename of an image on pressed state
@@ -2105,20 +2117,24 @@ examples.
* Scrollable item list showing arbitrary text elements
* `x` and `y` position the itemlist relative to the top left of the menu
* `w` and `h` are the size of the itemlist
-* `name` fieldname sent to server on doubleclick value is current selected element
-* `listelements` can be prepended by #color in hexadecimal format RRGGBB (only),
+* `name` fieldname sent to server on doubleclick value is current selected
+ element.
+* `listelements` can be prepended by #color in hexadecimal format RRGGBB
+ (only).
* if you want a listelement to start with "#" write "##".
#### `textlist[<X>,<Y>;<W>,<H>;<name>;<listelem 1>,<listelem 2>,...,<listelem n>;<selected idx>;<transparent>]`
* Scrollable itemlist showing arbitrary text elements
* `x` and `y` position the item list relative to the top left of the menu
* `w` and `h` are the size of the item list
-* `name` fieldname sent to server on doubleclick value is current selected element
+* `name` fieldname sent to server on doubleclick value is current selected
+ element.
* `listelements` can be prepended by #RRGGBB (only) in hexadecimal format
* if you want a listelement to start with "#" write "##"
* Index to be selected within textlist
* `true`/`false`: draw transparent background
-* See also `minetest.explode_textlist_event` (main menu: `engine.explode_textlist_event`)
+* See also `minetest.explode_textlist_event`
+ (main menu: `engine.explode_textlist_event`).
#### `tabheader[<X>,<Y>;<name>;<caption 1>,<caption 2>,...,<caption n>;<current_tab>;<transparent>;<draw_border>]`
* Show a tab**header** at specific position (ignores formsize)
@@ -2163,7 +2179,8 @@ examples.
* `orientation`: `vertical`/`horizontal`
* Fieldname data is transferred to Lua
* Value this trackbar is set to (`0`-`1000`)
-* See also `minetest.explode_scrollbar_event` (main menu: `engine.explode_scrollbar_event`)
+* See also `minetest.explode_scrollbar_event`
+ (main menu: `engine.explode_scrollbar_event`).
#### `table[<X>,<Y>;<W>,<H>;<name>;<cell 1>,<cell 2>,...,<cell n>;<selected idx>]`
* Show scrollable table using options defined by the previous `tableoptions[]`
@@ -2173,7 +2190,8 @@ examples.
* `name`: fieldname sent to server on row select or doubleclick
* `cell 1`...`cell n`: cell contents given in row-major order
* `selected idx`: index of row to be selected within table (first row = `1`)
-* See also `minetest.explode_table_event` (main menu: `engine.explode_table_event`)
+* See also `minetest.explode_table_event`
+ (main menu: `engine.explode_table_event`).
#### `tableoptions[<opt 1>;<opt 2>;...]`
* Sets options for `table[]`
@@ -2195,10 +2213,14 @@ examples.
* Sets columns for `table[]`
* Types: `text`, `image`, `color`, `indent`, `tree`
* `text`: show cell contents as text
- * `image`: cell contents are an image index, use column options to define images
- * `color`: cell contents are a ColorString and define color of following cell
- * `indent`: cell contents are a number and define indentation of following cell
- * `tree`: same as indent, but user can open and close subtrees (treeview-like)
+ * `image`: cell contents are an image index, use column options to define
+ images.
+ * `color`: cell contents are a ColorString and define color of following
+ cell.
+ * `indent`: cell contents are a number and define indentation of following
+ cell.
+ * `tree`: same as indent, but user can open and close subtrees
+ (treeview-like).
* Column options:
* `align=<value>`
* for `text` and `image`: content alignment within cells.
@@ -2216,10 +2238,11 @@ examples.
* and so on; defined indices need not be contiguous empty or
non-numeric cells are treated as `0`.
* `color` column options:
- * `span=<value>`: number of following columns to affect (default: infinite)
+ * `span=<value>`: number of following columns to affect
+ (default: infinite).
-**Note**: do _not_ use a element name starting with `key_`; those names are reserved to
-pass key press events to formspec!
+**Note**: do _not_ use a element name starting with `key_`; those names are
+reserved to pass key press events to formspec!
Inventory locations
-------------------
@@ -2248,9 +2271,9 @@ Player Inventory lists
Named colors are also supported and are equivalent to
[CSS Color Module Level 4](http://dev.w3.org/csswg/css-color/#named-colors).
-To specify the value of the alpha channel, append `#AA` to the end of the color name
-(e.g. `colorname#08`). For named colors the hexadecimal string representing the alpha
-value must (always) be two hexadecimal digits.
+To specify the value of the alpha channel, append `#AA` to the end of the color
+name (e.g. `colorname#08`). For named colors the hexadecimal string
+representing the alpha value must (always) be two hexadecimal digits.
`ColorSpec`
-----------
@@ -2289,7 +2312,8 @@ The following functions provide escape sequences:
Spatial Vectors
---------------
-For the following functions, `v`, `v1`, `v2` are vectors, `p1`, `p2` are positions:
+For the following functions, `v`, `v1`, `v2` are vectors,
+`p1`, `p2` are positions:
* `vector.new(a[, b, c])`:
* Returns a vector.
@@ -2310,7 +2334,8 @@ For the following functions, `v`, `v1`, `v2` are vectors, `p1`, `p2` are positio
* `vector.round(v)`:
* Returns a vector, each dimension rounded to nearest integer.
* `vector.apply(v, func)`:
- * Returns a vector where the function `func` has been applied to each component.
+ * Returns a vector where the function `func` has been applied to each
+ component.
* `vector.equals(v1, v2)`:
* Returns a boolean, `true` if the vectors are identical.
* `vector.sort(v1, v2)`:
@@ -2329,12 +2354,12 @@ For the following functions `x` can be either a vector or a number:
Helper functions
----------------
-* `dump2(obj, name, dumped)`: returns a string which makes `obj` human readable,
- handles reference loops
+* `dump2(obj, name, dumped)`: returns a string which makes `obj`
+ human-readable, handles reference loops.
* `obj`: arbitrary variable
* `name`: string, default: `"_"`
* `dumped`: table, default: `{}`
-* `dump(obj, dumped)`: returns a string which makes `obj` human readable
+* `dump(obj, dumped)`: returns a string which makes `obj` human-readable
* `obj`: arbitrary variable
* `dumped`: table, default: `{}`
* `math.hypot(x, y)`
@@ -2374,49 +2399,60 @@ Helper functions
* `minetest.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)")`: returns two positions
* Converts a string representing an area box into two positions
* `minetest.formspec_escape(string)`: returns a string
- * escapes the characters "[", "]", "\", "," and ";", which can not be used in formspecs
+ * escapes the characters "[", "]", "\", "," and ";", which can not be used
+ in formspecs.
* `minetest.is_yes(arg)`
* returns true if passed 'y', 'yes', 'true' or a number that isn't zero.
* `minetest.get_us_time()`
* returns time with microsecond precision. May not return wall time.
* `table.copy(table)`: returns a table
* returns a deep copy of `table`
-* `minetest.pointed_thing_to_face_pos(placer, pointed_thing)`: returns a position
+* `minetest.pointed_thing_to_face_pos(placer, pointed_thing)`: returns a
+ position.
* returns the exact position on the surface of a pointed node
Translations
------------
-Texts can be translated client-side with the help of `minetest.translate` and translation files.
+Texts can be translated client-side with the help of `minetest.translate` and
+translation files.
### Translating a string
-Two functions are provided to translate strings: `minetest.translate` and `minetest.get_translator`.
+Two functions are provided to translate strings: `minetest.translate` and
+`minetest.get_translator`.
-* `minetest.get_translator(textdomain)` is a simple wrapper around `minetest.translate`, and
- `minetest.get_translator(textdomain)(str, ...)` is equivalent to `minetest.translate(textdomain, str, ...)`.
- It is intended to be used in the following way, so that it avoids verbose repetitions of `minetest.translate`:
+* `minetest.get_translator(textdomain)` is a simple wrapper around
+ `minetest.translate`, and `minetest.get_translator(textdomain)(str, ...)` is
+ equivalent to `minetest.translate(textdomain, str, ...)`.
+ It is intended to be used in the following way, so that it avoids verbose
+ repetitions of `minetest.translate`:
local S = minetest.get_translator(textdomain)
S(str, ...)
As an extra commodity, if `textdomain` is nil, it is assumed to be "" instead.
-* `minetest.translate(textdomain, str, ...)` translates the string `str` with the given `textdomain`
- for disambiguation. The textdomain must match the textdomain specified in the translation file in order
- to get the string translated. This can be used so that a string is translated differently in different contexts.
- It is advised to use the name of the mod as textdomain whenever possible, to avoid clashes with other mods.
- This function must be given a number of arguments equal to the number of arguments the translated string expects.
- Arguments are literal strings -- they will not be translated, so if you want them to be, they need to come as
- outputs of `minetest.translate` as well.
-
- For instance, suppose we want to translate "@1 Wool" with "@1" being replaced by the translation of "Red".
- We can do the following:
+* `minetest.translate(textdomain, str, ...)` translates the string `str` with
+ the given `textdomain` for disambiguation. The textdomain must match the
+ textdomain specified in the translation file in order to get the string
+ translated. This can be used so that a string is translated differently in
+ different contexts.
+ It is advised to use the name of the mod as textdomain whenever possible, to
+ avoid clashes with other mods.
+ This function must be given a number of arguments equal to the number of
+ arguments the translated string expects.
+ Arguments are literal strings -- they will not be translated, so if you want
+ them to be, they need to come as outputs of `minetest.translate` as well.
+
+ For instance, suppose we want to translate "@1 Wool" with "@1" being replaced
+ by the translation of "Red". We can do the following:
local S = minetest.get_translator()
S("@1 Wool", S("Red"))
- This will be displayed as "Red Wool" on old clients and on clients that do not have localization enabled.
- However, if we have for instance a translation file named `wool.fr.tr` containing the following:
+ This will be displayed as "Red Wool" on old clients and on clients that do
+ not have localization enabled. However, if we have for instance a translation
+ file named `wool.fr.tr` containing the following:
@1 Wool=Laine @1
Red=Rouge
@@ -2425,36 +2461,43 @@ Two functions are provided to translate strings: `minetest.translate` and `minet
### Operations on translated strings
-The output of `minetest.translate` is a string, with escape sequences adding additional information to that string
-so that it can be translated on the different clients. In particular, you can't expect operations like string.length
-to work on them like you would expect them to, or string.gsub to work in the expected manner. However, string
-concatenation will still work as expected (note that you should only use this for things like formspecs; do not
-translate sentences by breaking them into parts; arguments should be used instead), and operations such as
-`minetest.colorize` which are only concatenation under the hood as well.
+The output of `minetest.translate` is a string, with escape sequences adding
+additional information to that string so that it can be translated on the
+different clients. In particular, you can't expect operations like string.length
+to work on them like you would expect them to, or string.gsub to work in the
+expected manner. However, string concatenation will still work as expected
+(note that you should only use this for things like formspecs; do not translate
+sentences by breaking them into parts; arguments should be used instead), and
+operations such as `minetest.colorize` which are also concatenation.
### Translation file format
-A translation file has the suffix `.[lang].tr`, where `[lang]` is the language it corresponds to.
+A translation file has the suffix `.[lang].tr`, where `[lang]` is the language
+it corresponds to.
The file should be a text file, with the following format:
-* Lines beginning with `# textdomain:` (the space is significant) can be used to specify the text
- domain of all following translations in the file.
+* Lines beginning with `# textdomain:` (the space is significant) can be used
+ to specify the text domain of all following translations in the file.
* All other empty lines or lines beginning with `#` are ignored.
-* Other lines should be in the format `original=translated`. Both `original` and `translated` can
- contain escape sequences beginning with `@` to insert arguments, literal `@`, `=` or newline
- (See ### Escapes below). There must be no extraneous whitespace around the `=` or at the beginning
- or the end of the line.
+* Other lines should be in the format `original=translated`. Both `original`
+ and `translated` can contain escape sequences beginning with `@` to insert
+ arguments, literal `@`, `=` or newline (See ### Escapes below).
+ There must be no extraneous whitespace around the `=` or at the beginning or
+ the end of the line.
### Escapes
Strings that need to be translated can contain several escapes, preceded by `@`.
* `@@` acts as a literal `@`.
-* `@n`, where `n` is a digit between 1 and 9, is an argument for the translated string that will be inlined
- when translation. Due to how translations are implemented, the original translation string **must** have
- its arguments in increasing order, without gaps or repetitions, starting from 1.
-* `@=` acts as a literal `=`. It is not required in strings given to `minetest.translate`, but is in translation
- files to avoid being confused with the `=` separating the original from the translation.
-* `@\n` (where the `\n` is a literal newline) acts as a literal newline. As with `@=`, this escape is not required
- in strings given to `minetest.translate`, but is in translation files.
+* `@n`, where `n` is a digit between 1 and 9, is an argument for the translated
+ string that will be inlined when translation. Due to how translations are
+ implemented, the original translation string **must** have its arguments in
+ increasing order, without gaps or repetitions, starting from 1.
+* `@=` acts as a literal `=`. It is not required in strings given to
+ `minetest.translate`, but is in translation files to avoid being confused
+ with the `=` separating the original from the translation.
+* `@\n` (where the `\n` is a literal newline) acts as a literal newline.
+ As with `@=`, this escape is not required in strings given to
+ `minetest.translate`, but is in translation files.
* `@n` acts as a literal newline as well.
`minetest` namespace reference
@@ -2462,8 +2505,10 @@ Strings that need to be translated can contain several escapes, preceded by `@`.
### Utilities
-* `minetest.get_current_modname()`: returns the currently loading mod's name, when we are loading a mod
-* `minetest.get_modpath(modname)`: returns e.g. `"/home/user/.minetest/usermods/modname"`
+* `minetest.get_current_modname()`: returns the currently loading mod's name,
+ when loading a mod.
+* `minetest.get_modpath(modname)`: returns e.g.
+ `"/home/user/.minetest/usermods/modname"`.
* Useful for loading additional `.lua` modules or static data from mod
* `minetest.get_modnames()`: returns a list of installed mods
* Return a list of installed mods, sorted alphabetically
@@ -2494,7 +2539,8 @@ Strings that need to be translated can contain several escapes, preceded by `@`.
* `arg`: string or table in format `{foo=true, bar=true}`
* `missing_features`: `{foo=true, bar=true}`
* `minetest.get_player_information(player_name)`:
- * Returns a table containing information about a player. Example return value:
+ * Returns a table containing information about a player.
+ Example return value:
{
address = "127.0.0.1", -- IP address of client
@@ -2525,14 +2571,15 @@ Strings that need to be translated can contain several escapes, preceded by `@`.
* true: return only subdirectory names, or
* false: return only file names.
* `minetest.safe_file_write(path, content)`: returns boolean indicating success
- * Replaces contents of file at path with new contents in a safe (atomic) way.
- Use this instead of below code when writing e.g. database files:
+ * Replaces contents of file at path with new contents in a safe (atomic)
+ way. Use this instead of below code when writing e.g. database files:
`local f = io.open(path, "wb"); f:write(content); f:close()`
* `minetest.get_version()`: returns a table containing components of the
engine version. Components:
* `project`: Name of the project, eg, "Minetest"
* `string`: Simple version, eg, "1.2.3-dev"
- * `hash`: Full git version (only set if available), eg, "1.2.3-dev-01234567-dirty"
+ * `hash`: Full git version (only set if available),
+ eg, "1.2.3-dev-01234567-dirty".
Use this for informational purposes only. The information in the returned
table does not represent the capabilities of the engine, nor is it
reliable or verifiable. Compatible forks will have a different name and
@@ -2568,11 +2615,14 @@ Call these functions only at load time!
* Check recipe table syntax for different types below.
* `minetest.clear_craft(recipe)`
* Will erase existing craft based either on output item or on input recipe.
- * Specify either output or input only. If you specify both, input will be ignored. For input use the same recipe table
- syntax as for `minetest.register_craft(recipe)`. For output specify only the item, without a quantity.
+ * Specify either output or input only. If you specify both, input will be
+ ignored. For input use the same recipe table syntax as for
+ `minetest.register_craft(recipe)`. For output specify only the item,
+ without a quantity.
* If no erase candidate could be found, Lua exception will be thrown.
- * **Warning**! The type field ("shaped","cooking" or any other) will be ignored if the recipe
- contains output. Erasing is then done independently from the crafting method.
+ * **Warning**! The type field ("shaped","cooking" or any other) will be
+ ignored if the recipe contains output. Erasing is then done independently
+ from the crafting method.
* `minetest.register_ore(ore definition)`
* `minetest.register_biome(biome definition)`
* `minetest.register_decoration(decoration definition)`
@@ -2591,19 +2641,19 @@ Call these functions only at load time!
* Called every server step, usually interval of 0.1s
* `minetest.register_on_shutdown(func())`
* Called before server shutdown
- * **Warning**: If the server terminates abnormally (i.e. crashes), the registered
- callbacks **will likely not be run**. Data should be saved at
+ * **Warning**: If the server terminates abnormally (i.e. crashes), the
+ registered callbacks **will likely not be run**. Data should be saved at
semi-frequent intervals as well as on server shutdown.
* `minetest.register_on_placenode(func(pos, newnode, placer, oldnode, itemstack, pointed_thing))`
* Called when a node has been placed
* If return `true` no item is taken from `itemstack`
* `placer` may be any valid ObjectRef or nil.
- * **Not recommended**; use `on_construct` or `after_place_node` in node definition
- whenever possible
+ * **Not recommended**; use `on_construct` or `after_place_node` in node
+ definition whenever possible.
* `minetest.register_on_dignode(func(pos, oldnode, digger))`
* Called when a node has been dug.
- * **Not recommended**; Use `on_destruct` or `after_dig_node` in node definition
- whenever possible
+ * **Not recommended**; Use `on_destruct` or `after_dig_node` in node
+ definition whenever possible.
* `minetest.register_on_punchnode(func(pos, node, puncher, pointed_thing))`
* Called when a node is punched
* `minetest.register_on_generated(func(minp, maxp, blockseed))`
@@ -2617,7 +2667,8 @@ Call these functions only at load time!
* Called when a player is punched
* `player` - ObjectRef - Player that was punched
* `hitter` - ObjectRef - Player that hit
- * `time_from_last_punch`: Meant for disallowing spamming of clicks (can be nil)
+ * `time_from_last_punch`: Meant for disallowing spamming of clicks
+ (can be nil).
* `tool_capabilities`: capability table of used tool (can be nil)
* `dir`: unit vector of direction of punch. Always defined. Points from
the puncher to the punched.
@@ -2628,23 +2679,26 @@ Call these functions only at load time!
* `player`: ObjectRef of the player
* `hp_change`: the amount of change. Negative when it is damage.
* `modifier`: when true, the function should return the actual `hp_change`.
- Note: modifiers only get a temporary hp_change that can be modified by later modifiers.
- modifiers can return true as a second argument to stop the execution of further functions.
- Non-modifiers receive the final hp change calculated by the modifiers.
+ Note: modifiers only get a temporary hp_change that can be modified by
+ later modifiers. modifiers can return true as a second argument to stop
+ the execution of further functions. Non-modifiers receive the final hp
+ change calculated by the modifiers.
* `minetest.register_on_respawnplayer(func(ObjectRef))`
* Called when player is to be respawned
* Called _before_ repositioning of player occurs
* return true in func to disable regular player placement
* `minetest.register_on_prejoinplayer(func(name, ip))`
* Called before a player joins the game
- * If it returns a string, the player is disconnected with that string as reason
+ * If it returns a string, the player is disconnected with that string as
+ reason.
* `minetest.register_on_joinplayer(func(ObjectRef))`
* Called when a player joins the game
* `minetest.register_on_leaveplayer(func(ObjectRef, timed_out))`
* Called when a player leaves the game
* `timed_out`: True for timeout, false for other reasons.
* `minetest.register_on_auth_fail(func(name, ip))`
- * Called when a client attempts to log into an account but supplies the wrong password.
+ * Called when a client attempts to log into an account but supplies the
+ wrong password.
* `ip`: The IP address of the client.
* `name`: The account the client attempted to log into.
* `minetest.register_on_cheat(func(ObjectRef, cheat))`
@@ -2658,7 +2712,8 @@ Call these functions only at load time!
* `dug_too_fast`
* `minetest.register_on_chat_message(func(name, message))`
* Called always when a player says something
- * Return `true` to mark the message as handled, which means that it will not be sent to other players
+ * Return `true` to mark the message as handled, which means that it will
+ not be sent to other players.
* `minetest.register_on_player_receive_fields(func(player, formname, fields))`
* Called when a button is pressed in player's inventory form
* Newest functions are called first
@@ -2666,30 +2721,34 @@ Call these functions only at load time!
* `minetest.register_on_craft(func(itemstack, player, old_craft_grid, craft_inv))`
* Called when `player` crafts something
* `itemstack` is the output
- * `old_craft_grid` contains the recipe (Note: the one in the inventory is cleared)
+ * `old_craft_grid` contains the recipe (Note: the one in the inventory is
+ cleared).
* `craft_inv` is the inventory with the crafting grid
- * Return either an `ItemStack`, to replace the output, or `nil`, to not modify it
+ * Return either an `ItemStack`, to replace the output, or `nil`, to not
+ modify it.
* `minetest.register_craft_predict(func(itemstack, player, old_craft_grid, craft_inv))`
- * The same as before, except that it is called before the player crafts, to make
- craft prediction, and it should not change anything.
+ * The same as before, except that it is called before the player crafts, to
+ make craft prediction, and it should not change anything.
* `minetest.register_on_protection_violation(func(pos, name))`
- * Called by `builtin` and mods when a player violates protection at a position
- (eg, digs a node or punches a protected entity).
- * The registered functions can be called using `minetest.record_protection_violation`
- * The provided function should check that the position is protected by the mod
- calling this function before it prints a message, if it does, to allow for
- multiple protection mods.
+ * Called by `builtin` and mods when a player violates protection at a
+ position (eg, digs a node or punches a protected entity).
+ * The registered functions can be called using
+ `minetest.record_protection_violation`.
+ * The provided function should check that the position is protected by the
+ mod calling this function before it prints a message, if it does, to
+ allow for multiple protection mods.
* `minetest.register_on_item_eat(func(hp_change, replace_with_item, itemstack, user, pointed_thing))`
* Called when an item is eaten, by `minetest.item_eat`
- * Return `true` or `itemstack` to cancel the default item eat response (i.e.: hp increase)
+ * Return `true` or `itemstack` to cancel the default item eat response
+ (i.e.: hp increase).
* `minetest.register_on_priv_grant(function(name, granter, priv))`
* Called when `granter` grants the priv `priv` to `name`.
- * Note that the callback will be called twice if it's done by a player, once with granter being the player name,
- and again with granter being nil.
+ * Note that the callback will be called twice if it's done by a player,
+ once with granter being the player name, and again with granter being nil.
* `minetest.register_on_priv_revoke(function(name, revoker, priv))`
* Called when `revoker` revokes the priv `priv` from `name`.
- * Note that the callback will be called twice if it's done by a player, once with revoker being the player name,
- and again with revoker being nil.
+ * Note that the callback will be called twice if it's done by a player,
+ once with revoker being the player name, and again with revoker being nil.
* `minetest.register_can_bypass_userlimit(function(name, ip))`
* Called when `name` user connects with `ip`.
* Return `true` to by pass the player limit
@@ -2707,16 +2766,21 @@ Call these functions only at load time!
* Unregisters a chatcommands registered with `register_chatcommand`.
* `minetest.register_privilege(name, definition)`
* `definition`: `"description text"`
- * `definition`: `{ description = "description text", give_to_singleplayer = boolean}`
- the default of `give_to_singleplayer` is true
- * To allow players with `basic_privs` to grant, see `basic_privs` minetest.conf setting.
- * `on_grant(name, granter_name)`: Called when given to player `name` by `granter_name`.
+ * `definition`:
+ `{description = "description text", give_to_singleplayer = boolean}`
+ the default of `give_to_singleplayer` is true.
+ * To allow players with `basic_privs` to grant, see `basic_privs`
+ minetest.conf setting.
+ * `on_grant(name, granter_name)`: Called when given to player `name` by
+ `granter_name`.
`granter_name` will be nil if the priv was granted by a mod.
- * `on_revoke(name, revoker_name)`: Called when taken from player `name` by `revoker_name`.
+ * `on_revoke(name, revoker_name)`: Called when taken from player `name` by
+ `revoker_name`.
`revoker_name` will be nil if the priv was revoked by a mod
- * Note that the above two callbacks will be called twice if a player is responsible -
- once with the player name, and then with a nil player name.
- * Return true in the above callbacks to stop register_on_priv_grant or revoke being called.
+ * Note that the above two callbacks will be called twice if a player is
+ responsible, once with the player name, and then with a nil player name.
+ * Return true in the above callbacks to stop register_on_priv_grant or
+ revoke being called.
* `minetest.register_authentication_handler(authentication handler definition)`
* Registers an auth handler that overrides the builtin one
* This function can be called by a single mod once only.
@@ -2732,7 +2796,8 @@ Call these functions only at load time!
* `minetest.privs_to_string(privs)`: returns `"priv1,priv2,..."`
* Convert between two privilege representations
* `minetest.get_player_privs(name) -> {priv1=true,...}`
-* `minetest.check_player_privs(player_or_name, ...)`: returns `bool, missing_privs`
+* `minetest.check_player_privs(player_or_name, ...)`:
+ returns `bool, missing_privs`
* A quickhand for checking privileges.
* `player_or_name`: Either a Player object or the name of a player.
* `...` is either a list of strings, e.g. `"priva", "privb"` or
@@ -2741,8 +2806,8 @@ Call these functions only at load time!
* `minetest.check_password_entry(name, entry, password)`
* Returns true if the "password entry" for a player with name matches given
password, false otherwise.
- * The "password entry" is the password representation generated by the engine
- as returned as part of a `get_auth()` call on the auth handler.
+ * The "password entry" is the password representation generated by the
+ engine as returned as part of a `get_auth()` call on the auth handler.
* Only use this function for making it possible to log in via password from
external protocols such as IRC, other uses are frowned upon.
* `minetest.get_password_hash(name, raw_password)`
@@ -2752,7 +2817,8 @@ Call these functions only at load time!
from the function, with an externally provided password, as the hash
in the db might use the new SRP verifier format.
* For this purpose, use `minetest.check_password_entry` instead.
-* `minetest.get_player_ip(name)`: returns an IP address string for the player `name`
+* `minetest.get_player_ip(name)`: returns an IP address string for the player
+ `name`.
* The player needs to be online for this to be successful.
* `minetest.get_auth_handler()`: Return the currently active auth handler
@@ -2762,13 +2828,16 @@ Call these functions only at load time!
* `minetest.notify_authentication_modified(name)`
* Must be called by the authentication handler for privilege changes.
* `name`: string; if omitted, all auth data should be considered modified
-* `minetest.set_player_password(name, password_hash)`: Set password hash of player `name`
-* `minetest.set_player_privs(name, {priv1=true,...})`: Set privileges of player `name`
+* `minetest.set_player_password(name, password_hash)`: Set password hash of
+ player `name`.
+* `minetest.set_player_privs(name, {priv1=true,...})`: Set privileges of player
+ `name`.
* `minetest.auth_reload()`
* See `reload()` in authentication handler definition
-`minetest.set_player_password`, `minetest_set_player_privs`, `minetest_get_player_privs`
-and `minetest.auth_reload` call the authentication handler.
+`minetest.set_player_password`, `minetest_set_player_privs`,
+`minetest_get_player_privs` and `minetest.auth_reload` call the authentication
+handler.
### Chat
* `minetest.chat_send_all(text)`