Lua_api.txt: Split long lines part 2

master
paramat 2018-03-10 04:26:38 +00:00 committed by paramat
parent 644d0ab2bb
commit 5a1884c21d
1 changed files with 219 additions and 150 deletions

View File

@ -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.
* `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:
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)`