|
@@ -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)`
|