Creative: Fix width of arrow textures
[oweals/minetest_game.git] / game_api.txt
index 0d518f1c884a70607a8f587bec78eff80aebfe12..bf342674ad517f1138c1141369d3bdf1611093d2 100644 (file)
@@ -67,6 +67,15 @@ Beds API
                }
        }
 
+Bones API
+---------
+
+An ordered list of listnames (default: "main", "craft") of the player inventory,
+that will be placed into bones or dropped on player death can be looked up or changed
+in `bones.player_inventory_lists`.
+
+e.g. `table.insert(bones.player_inventory_lists, "backpack")`
+
 Creative API
 ------------
 
@@ -88,6 +97,56 @@ The contents of `creative.formspec_add` is appended to every creative inventory
 page. Mods can use it to add additional formspec elements onto the default
 creative inventory formspec to be drawn after each update.
 
+Chests API
+----------
+
+The chests API allows the creation of chests, which have their own inventories for holding items.
+
+`default.chest.get_chest_formspec(pos)`
+
+ * Returns a formspec for a specific chest.
+ * `pos` Location of the chest node, e.g `{x = 1, y = 1, z = 1}`
+
+`default.chest.chest_lid_obstructed(pos)`
+
+ * Returns a boolean depending on whether or not a chest has its top obstructed by a solid node.
+ * `pos` Location of the chest node, e.g `{x = 1, y = 1, z = 1}`
+
+`default.chest.chest_lid_close(pn)`
+
+ * Closes the chest that a player is currently looking in.
+ * `pn` The name of the player whose chest is going to be closed
+
+`default.chest.open_chests`
+
+ * A table indexed by player name to keep track of who opened what chest.
+ * Key: The name of the player.
+ * Value: A table containing information about the chest the player is looking at.
+   e.g `{ pos = {1, 1, 1}, sound = null, swap = "chest" }`
+
+`default.chest.register_chest(name, def)`
+
+ * Registers new chest
+ * `name` Name for chest
+ * `def`  See [#Chest Definition]
+
+### Chest Definition
+
+       description = "Chest",
+       tiles = {
+               "default_chest_top.png",
+               "default_chest_top.png",
+               "default_chest_side.png",
+               "default_chest_side.png",
+               "default_chest_front.png",
+               "default_chest_inside.png"
+       }, -- Textures which are applied to the chest model.
+       sounds = default.node_sound_wood_defaults(),
+       sound_open = "default_chest_open",
+       sound_close = "default_chest_close",
+       groups = {choppy = 2, oddly_breakable_by_hand = 2},
+       protected = false, -- If true, only placer can modify chest.
+
 Doors API
 ---------
 
@@ -155,11 +214,44 @@ The doors mod allows modders to register custom doors and trapdoors.
 ### Fence gate definition
 
        description = "Wooden Fence Gate",
-       texture = "default_wood.png",
+       texture = "default_wood.png", -- `backface_culling` will automatically be
+                                     -- set to `true` if not specified.
        material = "default:wood",
        groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
        sounds = default.node_sound_wood_defaults(), -- optional
 
+Dungeon Loot API
+----------------
+
+The mod that places chests with loot in dungeons provides an API to register additional loot.
+
+`dungeon_loot.register(def)`
+
+ * Registers one or more loot items
+ * `def` Can be a single [#Loot definition] or a list of them
+
+`dungeon_loot.registered_loot`
+
+ * Table of all registered loot, not to be modified manually
+
+### Loot definition
+
+       name = "item:name",
+       chance = 0.5,
+       -- ^ chance value from 0.0 to 1.0 that the item will appear in the chest when chosen
+       --   due to an extra step in the selection process, 0.5 does not(!) mean that
+       --   on average every second chest will have this item
+       count = {1, 4},
+       -- ^ table with minimum and maximum amounts of this item
+       --   optional, defaults to always single item
+       y = {-32768, -512},
+       -- ^ table with minimum and maximum heights this item can be found at
+       --   optional, defaults to no height restrictions
+       types = {"desert"},
+       -- ^ table with types of dungeons this item can be found in
+       --   supported types: "normal" (the cobble/mossycobble one), "sandstone", "desert"
+       --   optional, defaults to no type restrictions
+
 Fence API
 ---------
 
@@ -282,21 +374,63 @@ Give Initial Stuff API
 ^ str is a comma separated list of initial stuff
 ^ Adds items to the list of items to be given
 
-Nyancat API
+
+Players API
 -----------
 
-`nyancat.place(pos, facedir, length)`
+The player API can register player models and update the player's appearence
 
-^ Place a cat at `pos` facing `facedir` with tail length `length`
-  Only accepts facedir 0-3, if facedir > 3 then it will be interpreted as facedir = 0
+* `player_api.register_model(name, def)`
+       * Register a new model to be used by players
+       * name: model filename such as "character.x", "foo.b3d", etc.
+       * def: See [#Model definition]
+    * saved to player_api.registered_models
+
+* `player_api.registered_player_models[name]`
+        * Get a model's definition
+        * see [#Model definition]
+
+* `player_api.set_model(player, model_name)`
+       * Change a player's model
+       * `player`: PlayerRef
+       * `model_name`: model registered with player_api.register_model()
+
+* `player_api.set_animation(player, anim_name [, speed])`
+       * Applies an animation to a player
+       * anim_name: name of the animation.
+       * speed: frames per second. If nil, default from the model is used
+
+* `player_api.set_textures(player, textures)`
+       * Sets player textures
+       * `player`: PlayerRef
+       * `textures`: array of textures, If `textures` is nil the default
+         textures from the model def are used
+
+* `player_api.get_animation(player)`
+       * Returns a table containing fields `model`, `textures` and `animation`.
+       * Any of the fields of the returned table may be nil.
+       * player: PlayerRef
+
+### Model Definition
 
-`nyancat.generate(minp, maxp, seed)`
+       {
+               animation_speed = 30,            -- Default animation speed, in FPS.
+               textures = {"character.png", },  -- Default array of textures.
+               visual_size = {x = 1, y = 1},    -- Used to scale the model.
+               animations = {
+                       -- <anim_name> = {x = <start_frame>, y = <end_frame>},
+                       foo = {x = 0, y = 19},
+                       bar = {x = 20, y = 39},
+               -- ...
+               },
+               collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, -- In nodes from feet position
+               stepheight = 0.6, -- In nodes
+               eye_height = 1.47, -- In nodes above feet position
+       }
 
-^ Called by `minetest.register_on_generated`. To disable nyancat generation,
-  you can redefine nyancat.generate() to be an empty function
 
 TNT API
-----------
+-------
 
 `tnt.register_tnt(definition)`
 
@@ -306,6 +440,7 @@ TNT API
  * `description` A description for your TNT.
  * `radius` The radius within which the TNT can destroy nodes. The default is 3.
  * `damage_radius` The radius within which the TNT can damage players and mobs. By default it is twice the `radius`.
+ * `sound` The sound played when explosion occurs. By default it is `tnt_explode`.
  * `disable_drops` Disable drops. By default it is set to false.
  * `ignore_protection` Don't check `minetest.is_protected` before removing a node.
  * `ignore_on_blast` Don't call `on_blast` even if a node has one.
@@ -315,17 +450,20 @@ TNT API
   * `bottom` Bottom tile. By default the name of the tnt with a suffix of `_bottom.png`.
   * `burning` Top tile when lit. By default the name of the tnt with a suffix of `_top_burning_animated.png".
 
-`tnt.boom(position, definition)`
+`tnt.boom(position[, definition])`
 
 ^ Create an explosion.
 
 * `position` The center of explosion.
-* `definition` The TNT definion as passed to `tnt.register`
+* `definition` The TNT definion as passed to `tnt.register` with the following addition:
+ * `explode_center` false by default which removes TNT node on blast, when true will explode center node.
 
 `tnt.burn(position, [nodename])`
 
-^ Ignite TNT at position, nodename isn't required unless already known.
-
+^ Ignite node at position, triggering its `on_ignite` callback (see fire mod).
+If no such callback exists, fallback to turn tnt group nodes to their
+"_burning" variant.
+  nodename isn't required unless already known.
 
 To make dropping items from node inventories easier, you can use the
 following helper function from 'default':
@@ -561,6 +699,7 @@ Creates panes that automatically connect to each other
                groups = {group = rating}, -- Uses the known node groups, see [Known damage and digging time defining groups]
                sounds = SoundSpec,        -- See [#Default sounds]
                recipe = {{"","","","","","","","",""}}, -- Recipe field only
+               use_texture_alpha = true, -- Optional boolean (default: `false`) for colored glass panes
        }
 
 Raillike definitions
@@ -601,77 +740,76 @@ Default constants
 
 `default.LIGHT_MAX`  The maximum light level (see [Node definition] light_source)
 
-Player API
-----------
 
-The player API can register player models and update the player's appearence
+GUI and formspecs
+-----------------
 
-`default.player_register_model(name, def)`
+`default.get_hotbar_bg(x, y)`
 
- * Register a new model to be used by players.
- * name: model filename such as "character.x", "foo.b3d", etc.
- * def: See [#Model definition]
+ * Get the hotbar background as string, containing the formspec elements
+ * x: Horizontal position in the formspec
+ * y: Vertical position in the formspec
 
-`default.registered_player_models[name]`
+`default.gui_bg`
 
- * Get a model's definition
- * see [#Model definition]
+ * Background color formspec element
 
-`default.player_set_model(player, model_name)`
+`default.gui_bg_img`
 
- * Change a player's model
- * `player`: PlayerRef
- * `model_name`: model registered with player_register_model()
+ * Image overlay formspec element for the background to use in formspecs
 
-`default.player_set_animation(player, anim_name [, speed])`
+`default.gui_slots`
 
- * Applies an animation to a player
- * anim_name: name of the animation.
- * speed: frames per second. If nil, default from the model is used
+ * `listcolors` formspec element that is used to format the slots in formspecs
 
-`default.player_set_textures(player, textures)`
+`default.gui_survival_form`
 
- * Sets player textures
- * `player`: PlayerRef
- * `textures`: array of textures, If `textures` is nil, the default textures from the model def are used
+ * Entire formspec for the survival inventory
 
-default.player_get_animation(player)
+`default.get_furnace_active_formspec(fuel_percent, item_percent)`
 
- * Returns a table containing fields `model`, `textures` and `animation`.
- * Any of the fields of the returned table may be nil.
- * player: PlayerRef
+ * Get the active furnace formspec using the defined GUI elements
+ * fuel_percent: Percent of how much the fuel is used
+ * item_percent: Percent of how much the item is cooked
 
-### Model Definition
+`default.get_furnace_inactive_formspec()`
+
+ * Get the inactive furnace formspec using the defined GUI elements
 
-       {
-               animation_speed = 30,            -- Default animation speed, in FPS.
-               textures = {"character.png", },  -- Default array of textures.
-               visual_size = {x = 1, y = 1},    -- Used to scale the model.
-               animations = {
-                       -- <anim_name> = {x = <start_frame>, y = <end_frame>},
-                       foo = {x = 0, y = 19},
-                       bar = {x = 20, y = 39},
-               -- ...
-               },
-       }
 
 Leafdecay
 ---------
 
-To enable leaf decay for a node, add it to the `leafdecay` group.
+To enable leaf decay for leaves when a tree is cut down by a player,
+register the tree with the default.register_leafdecay(leafdecaydef)
+function.
+
+If `param2` of any registered node is ~= 0, the node will always be
+preserved. Thus, if the player places a node of that kind, you will
+want to set `param2 = 1` or so.
+
+The function `default.after_place_leaves` can be set as
+`after_place_node of a node` to set param2 to 1 if the player places
+the node (should not be used for nodes that use param2 otherwise
+(e.g. facedir)).
 
-The rating of the group determines how far from a node in the group `tree`
-the node can be without decaying.
+If the node is in the `leafdecay_drop` group then it will always be
+dropped as an item.
 
-If `param2` of the node is ~= 0, the node will always be preserved. Thus, if
-the player places a node of that kind, you will want to set `param2 = 1` or so.
+`default.register_leafdecay(leafdecaydef)`
 
-The function `default.after_place_leaves` can be set as `after_place_node of a node`
-to set param2 to 1 if the player places the node (should not be used for nodes
-that use param2 otherwise (e.g. facedir)).
+`leafdecaydef` is a table, with following members:
+       {
+               trunks = {"default:tree"}, -- nodes considered trunks
+               leaves = {"default:leaves", "default:apple"},
+                       -- nodes considered for removal
+               radius = 3, -- radius to consider for searching
+       }
+
+Note: all the listed nodes in `trunks` have their `on_after_destruct`
+callback overridden. All the nodes listed in `leaves` have their
+`on_timer` callback overridden.
 
-If the node is in the `leafdecay_drop` group then it will always be dropped as an
-item.
 
 Dyes
 ----
@@ -762,14 +900,20 @@ Trees
  * `default.grow_new_pine_tree(pos)`
   * Grows a new design pine tree at pos
 
+ * `default.grow_new_snowy_pine_tree(pos)`
+  * Grows a new design snowy pine tree at pos
+
  * `default.grow_new_acacia_tree(pos)`
   * Grows a new design acacia tree at pos
 
  * `default.grow_new_aspen_tree(pos)`
   * Grows a new design aspen tree at pos
 
- * `default.grow_new_snowy_pine_tree(pos)`
-  * Grows a new design snowy pine tree at pos
+ * `default.grow_bush(pos)`
+  * Grows a bush at pos
+
+ * `default.grow_acacia_bush(pos)`
+  * Grows an acaia bush at pos
 
 Carts
 -----