# API for X-Decor-libre X-Decor-libre is mostly self-contained but it allows for limited extension with a simple API. Not that extensibility is not the main goal of this mod. The function documentation can be found in the respective source code files under the header "--[[ API FUNCTIONS ]]". These are the features: ## Add custom tool enchantments You can register tools to be able to be enchanted at the enchanting table. See `src/enchanting.lua` for details. ## Add custom hammers You can add a custom hammer for repairing tools at the workbench, using custom stats. See `src/workbench.lua` for details. ## Add cut nodes You can register "cut" node variants of an existing node which can be created at the workbench. This will add thin stairs, half stairs, panels, microcubes, etc. See `src/workbench.lua` for details. ## Cauldron compatibility The cauldron needs to interact with various items and nodes to work properly. It uses ingredients and bowls for soup, and fire nodes to get heated. If your mod adds fire or hot nodes, bowls or food, this section is relevant for you. ### Soup ingredients The cauldron soup accepts a variety of food items as ingredients for the soup. It uses a heuristic to determine which items it accepts as ingredient. This heuristic may sometimes fail and recognize strange items as ingredient. To explicitly mark any item as a soup ingredient for xdecor, add the group `xdecor_soup_ingredient = 1` to it. To explicitly tell xdecor that an item is NOT a soup ingredient, use `xdecor_soup_ingredient = -1` instead. The `-1` should only be used if actually necessary. #### Information about the heuristic Any item without a valid `xdecor_soup_ingredient` group will be checked by against a heuristic to determine if it counts as a soup ingredient or not. Items that do have this group with a valid value are not subject to the heuristic. First, the heuristic checks if the item is 'eatable'. This basically checks if the function `core.item_eat` or (`minetest.item_eat`) is called. If the item is eatable, it counts as ingredient. If not, then the heuristic looks at the part of the technical itemname after the colon for certain keywords like 'apple', 'meat', 'potato' etc. (for the full list, see `ingredients_list` in `src/cooking.lua`). If a keyword was found, the item counts as an ingredient, otherwise not. There is also a small blacklist that disqualifies a few items from Minetest Game. ### Heater nodes Cauldrons need a fire below to get heated. All nodes with the group `fire` or `xdecor_cauldron_heater=1` will heat up the cauldron. You can use the latter group if adding the `fire` group would create problems. ### Bowls Players can use the `xdecor:bowl` item to collect soup from a cauldron. But other mods also have their own bowls which may not be recognized by X-Decor-libre. The following items are recognized as bowls that can collect soup from the cauldron: * Items with group `xdecor_soup_bowl=1` (recommended) * `farming:bowl` (hardcoded) * `x_farming:bowl` (hardcoded) If you want to make your bowl compatible with the cauldron, add the group `xdecor_soup_bowl=1` to it. **Only use this for empty bowls!** **Please test your bowl!** When any valid bowl is used at the cauldron, it turns into `xdecor:bowl_soup`. If the soup is eaten, the item will become the original bowl again, even if it was a custom bowl. For custom bowls (not from X-Decor-libre), the `xdecor:bowl_soup` item remembers the name of the original bowl in the metadata under `original_bowl`. If `original_bowl` is the empty string, or contains the name of an unknown item, `xdecor:bowl` is the assumed default. (However, an unknown item in `original_bowl` will trigger a warning.) ## Custom Chess bot (experimental) You can replace the (very weak) Chess computer player with a custom one. See `src/chess.lua` for details (`realchess.set_chessbot`). Note this feature is relatively experimental, but it has survived first initial tests. ## Groups This mod introduces the following groups: * `potted_flower=1`: Potted flower * `food_bowl=1`: Empty bowl * `lever=X`: Lever (1 = off, 2 = on) * `pressure_plate=X`: Pressure plate (1 = off, 2 = on) * `cauldron=X`: Cauldron * `1`: Empty cauldron * `2`: Cauldron with cold liquid * `3`: Cauldron with boiling liquid * `xdecor_cut=1`: For nodes cut by the workbench (not the normal slab, normal stair, inner or outer stair). Cut nodes will also receive one of the following groups to specify the shape: * `xdecor_cut_microslab=1`: Microslab * `xdecor_cut_nanoslab=1`: Nanoslab * `xdecor_cut_panel=1`: Panel * `xdecor_cut_doublepanel=1`: Double panel * `xdecor_cut_micropanel=1`: Micropanel * `xdecor_cut_cube=1`: Cube * `xdecor_cut_halfstair=1`: Half stair * `xdecor_cut_thinstair=1`: Thin stair * `not_cuttable=1`: Prevent this node from being cut by the workbench * `repair_hammer=1`: A hammer that repairs tools (do not add this group manually, see `src/workbench.lua`) * `chess_piece=X`: Chess piece for Chess (see `src/chess.lua` for details) * `enchanted_tool=1`: Enchanted tool * `enchantment_durable=1`: Enchanted tool with Durability enchantment * `enchantment_fast=1`: Enchanted tool with Efficiency enchantment * `enchantment_sharp=1`: Enchanted tool with Sharpness enchantment These groups are for cauldron features (please read the “Cauldron compatibility” section above before using them): * `xdecor_soup_ingredient=1`: Add this item as a possible soup ingredient * `xdecor_soup_ingredient=-1`: Exclude this item as a possible soup ingredient * `xdecor_cauldron_heater=1`: If placed below cauldron, it will heat it up * `xdecor_soup_bowl=1`: A bowl that can collect soup from the cauldron These groups are reserved for internal use: * `xdecor_actuator=X`: A node that can turned on and off and toggles neighboring doors. 1 = off, 2 = on. Used by lever and pressure plate * `sittable=1`: Player can sit down on this node (also needs to call `xdecor.sit` to function)