mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-22 05:42:33 +01:00
Further document the API
This commit is contained in:
parent
349676f243
commit
9a39a94272
@ -24,7 +24,7 @@ world. A few notable features:
|
|||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
The modpack is explained in the [Manual](manual.md) included in this repository.
|
The modpack is explained in the **[Manual](manual.md)** included in this repository.
|
||||||
|
|
||||||
1. My technic circuit doesn't work. No power is distributed.
|
1. My technic circuit doesn't work. No power is distributed.
|
||||||
* Make sure you have a switching station connected.
|
* Make sure you have a switching station connected.
|
||||||
@ -32,7 +32,7 @@ The modpack is explained in the [Manual](manual.md) included in this repository.
|
|||||||
* Each machine type requires its own cable type. If you do not have a
|
* Each machine type requires its own cable type. If you do not have a
|
||||||
matching circuit, consider using a "Supply Converter" for simplicity.
|
matching circuit, consider using a "Supply Converter" for simplicity.
|
||||||
|
|
||||||
The API documentation can be found here: [Technic API](technic/doc/api.md)
|
For modders: **[Technic Lua API](technic/doc/api.md)**
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
This file documents the functions within the technic modpack for use in mods.
|
This file documents the functions within the technic modpack for use in mods.
|
||||||
|
|
||||||
|
[Switch to plaintext format](https://raw.githubusercontent.com/minetest-mods/technic/master/technic/doc/api.md)
|
||||||
|
|
||||||
|
**Undocumented API may change at any time.**
|
||||||
|
|
||||||
|
|
||||||
## Tiers
|
## Tiers
|
||||||
Tier are network types. List of pre-registered tiers:
|
Tier are network types. List of pre-registered tiers:
|
||||||
@ -37,33 +41,84 @@ Available functions:
|
|||||||
The machine type indicates the direction of power flow.
|
The machine type indicates the direction of power flow.
|
||||||
List of pre-registered machine types:
|
List of pre-registered machine types:
|
||||||
|
|
||||||
* `technic.receiver = "RE"` e.g. grinder
|
* `technic.receiver = "RE"`: consumes energy. e.g. grinder
|
||||||
* `technic.producer = "PR"` e.g. solar panel
|
* `technic.producer = "PR"`: provides energy. e.g. solar panel
|
||||||
* `technic.producer_receiver = "PR_RE"` supply converter
|
* `technic.producer_receiver = "PR_RE"` supply converter
|
||||||
* `technic.battery = "BA"` e.g. LV battery box
|
* `technic.battery = "BA"`: stores energy. e.g. LV battery box
|
||||||
|
|
||||||
Available functions:
|
Available functions:
|
||||||
|
|
||||||
|
* `technic.register_base_machine(data)`
|
||||||
|
* Registers a new node and defines the underlying machine behaviour. `data` fields:
|
||||||
|
* `tier`: string, see #Tiers
|
||||||
|
* `typename`: string, equivalent to the processing type registered
|
||||||
|
by `technic.register_recipe`. Examples: `"cooking"` `"alloy"`
|
||||||
|
* `machine_name`: string, node name
|
||||||
|
* `machine_desc`: string, node description
|
||||||
|
* `demand`: table, EU consumption values for each upgrade level.
|
||||||
|
Up to three indices. Index 1 == no upgrade. Example: `{3000, 2000, 1000}`.
|
||||||
|
* `upgrade`: (boolean), whether to add upgrade slots
|
||||||
|
* `modname`: (string), mod origin
|
||||||
|
* `tube`: (boolean), whether the machine has Pipeworks connectivity
|
||||||
|
* `can_insert`: (func), see Pipeworks documentation
|
||||||
|
* Accepts all inputs by default, if `tube = 1`
|
||||||
|
* See also: `technic.can_insert_unique_stack`
|
||||||
|
* `insert_object`: (func), see Pipeworks documentation
|
||||||
|
* Accepts all inputs by default, if `tube = 1`
|
||||||
|
* See also: `technic.insert_object_unique_stack`
|
||||||
|
* `connect_sides`: (table), see Lua API documentation. Defaults to all directions but front.
|
||||||
* `technic.register_machine(tier, nodename, machine_type)`
|
* `technic.register_machine(tier, nodename, machine_type)`
|
||||||
* Register an existing node as machine, bound to the network tier
|
* Register an existing node as machine, bound to the network tier
|
||||||
* `tier`: see `register_tier`
|
* `tier`: string, see #Tiers
|
||||||
* `nodename`: string, node name
|
* `nodename`: string, node name
|
||||||
* `machine_type`: string, following options are possible:
|
* `machine_type`: string, following options are possible:
|
||||||
* `"RE"`: Receiver
|
* `technic.receiver = "RE"`: Consumes energy
|
||||||
* `"PR"`: Producer
|
* `technic.producer = "PR"`: Provides energy
|
||||||
* `"BA"`: Battery, energy storage
|
* `technic.battery = "BA"`: Energy storage
|
||||||
* See also `Machine types`
|
* See also `Machine types`
|
||||||
|
|
||||||
Functions to use for callbacks:
|
Callbacks for pipeworks item transfer:
|
||||||
|
|
||||||
* `technic.can_insert_unique_stack(pos, node, stack, direction)`
|
* `technic.can_insert_unique_stack(pos, node, stack, direction)`
|
||||||
* `technic.insert_object_unique_stack(pos, node, stack, direction)`
|
* `technic.insert_object_unique_stack(pos, node, stack, direction)`
|
||||||
* Functions for the parameters `can_insert` and `insert_object` to avoid
|
* Functions for the parameters `can_insert` and `insert_object` to avoid
|
||||||
filling multiple inventory slots with same type of item.
|
filling multiple inventory slots with same type of item.
|
||||||
|
|
||||||
### Specific machines
|
### Recipes
|
||||||
* `technic.register_solar_array(data)`
|
|
||||||
* data is a table (TODO)
|
* `technic.register_recipe_type(typename, recipedef)`
|
||||||
|
* Registers a new recipe type used for machine processing
|
||||||
|
* `typename`: string, name of the recipe type
|
||||||
|
* Fields of `recipedef`:
|
||||||
|
* `description`: string, descriptor of the recipe type
|
||||||
|
* `input_size`: (numeric), count of input ItemStacks. default 1
|
||||||
|
* `output_size`: (numeric), count of output ItemStacks. default 1
|
||||||
|
* `technic.register_recipe(recipe)`
|
||||||
|
* Registers a individual input/output recipe. Fields of `recipe`:
|
||||||
|
* `input`: table, integer-indexed list of input ItemStacks.
|
||||||
|
* `output`: table/ItemStack, single output or list of output ItemStacks.
|
||||||
|
* `time`: numeric, process time in seconds.
|
||||||
|
* `technic.get_recipe(typename, items)`
|
||||||
|
* `typename`: string, see `technic.register_recipe_type`
|
||||||
|
* `items`: table, integer-indexed list of input ItemStacks.
|
||||||
|
* Returns: `recipe` table on success, `nil` otherwise
|
||||||
|
|
||||||
|
|
||||||
|
The following functions can be used to register recipes for
|
||||||
|
a specific machine type:
|
||||||
|
|
||||||
|
* Centrifuge
|
||||||
|
* `technic.register_separating_recipe(recipe)`
|
||||||
|
* Compressor
|
||||||
|
* `technic.register_compressor_recipe(recipe)`
|
||||||
|
* Furnaces (electric, normal)
|
||||||
|
* `minetest.register_recipe(recipe)`
|
||||||
|
* Extractor
|
||||||
|
* `technic.register_extractor_recipe(recipe)`
|
||||||
|
* Freezer
|
||||||
|
* `technic.register_freezer_recipe(recipe)`
|
||||||
|
* Grinder
|
||||||
|
* `technic.register_grinder_recipe(recipe)`
|
||||||
|
|
||||||
|
|
||||||
## Tools
|
## Tools
|
||||||
@ -132,7 +187,7 @@ Groups:
|
|||||||
|
|
||||||
Additional definition fields:
|
Additional definition fields:
|
||||||
|
|
||||||
* `wear_represents = "string"`
|
* `<itemdef>.wear_represents = "string"`
|
||||||
* Specifies how the tool wear level is handled. Available modes:
|
* Specifies how the tool wear level is handled. Available modes:
|
||||||
* `"mechanical_wear"`: represents physical damage
|
* `"mechanical_wear"`: represents physical damage
|
||||||
* `"technic_RE_charge"`: represents electrical charge
|
* `"technic_RE_charge"`: represents electrical charge
|
||||||
@ -140,16 +195,22 @@ Additional definition fields:
|
|||||||
* This callback is used to update the node.
|
* This callback is used to update the node.
|
||||||
Modders have to manually change the information about supply etc. in the
|
Modders have to manually change the information about supply etc. in the
|
||||||
node metadata.
|
node metadata.
|
||||||
|
* Technic-registered machines use this callback by default.
|
||||||
* `<itemdef>.technic_disabled_machine_name = "string"`
|
* `<itemdef>.technic_disabled_machine_name = "string"`
|
||||||
* Specifies the machine's node name to use when it's not connected connected to a network
|
* Specifies the machine's node name to use when it's not connected connected to a network
|
||||||
* `<itemdef>.technic_on_disable = function(pos, node) ...`
|
* `<itemdef>.technic_on_disable = function(pos, node) ...`
|
||||||
* This callback is run when the machine is no longer connected to a technic-powered network.
|
* This callback is run when the machine is no longer connected to a technic-powered network.
|
||||||
* `<itemdef>.technic_get_charge = function(itemstack) ...`
|
* `<itemdef>.technic_get_charge = function(itemstack) ...`
|
||||||
* This optional callback will be used to get itemstack charge and max\_charge
|
* Optional callback to overwrite the default charge behaviour.
|
||||||
* Have to return values `charge, max_charge`
|
* `itemstack`: ItemStack, the tool to analyse
|
||||||
|
* Return values:
|
||||||
|
* `charge`: Electrical charge of the tool
|
||||||
|
* `max_charge`: Upper charge limit
|
||||||
* Etc. `local charge, maxcharge = itemdef.technic_get_charge(itemstack)`
|
* Etc. `local charge, maxcharge = itemdef.technic_get_charge(itemstack)`
|
||||||
* `<itemdef>.technic_set_charge = function(itemstack, charge) ...`
|
* `<itemdef>.technic_set_charge = function(itemstack, charge) ...`
|
||||||
* This optional callback will be used to set itemstack charge
|
* Optional callback to overwrite the default charge behaviour.
|
||||||
|
* `itemstack`: ItemStack, the tool to update
|
||||||
|
* `charge`: numeric, value between `0` and `max_charge`
|
||||||
|
|
||||||
|
|
||||||
## Node Metadata fields
|
## Node Metadata fields
|
||||||
@ -171,33 +232,30 @@ data:
|
|||||||
multiple tiers (or networks).
|
multiple tiers (or networks).
|
||||||
|
|
||||||
|
|
||||||
## Switching Station mechanics
|
## Manual: Network basics
|
||||||
|
|
||||||
The switching station is the center of all power distribution on an electric
|
The switching station is the center of all power distribution on an electric
|
||||||
network.
|
network. This node is used to calculate the power supply of the network and
|
||||||
|
to distribute the power across nodes.
|
||||||
|
|
||||||
The station collects power from sources (PR), distributes it to sinks (RE),
|
The switching station is the center of all electricity distribution. It collects
|
||||||
and uses the excess/shortfall to charge and discharge batteries (BA).
|
power from sources (PR), distributes it to sinks (RE), and uses the
|
||||||
|
excess/shortfall to charge and discharge batteries (BA).
|
||||||
|
|
||||||
For now, all supply and demand values are expressed in kW.
|
As a thumb of rule, "EU" (energy unit) values are expressed in kW.
|
||||||
|
|
||||||
It works like this:
|
Network functionality:
|
||||||
All PR,BA,RE nodes are indexed and tagged with the switching station.
|
|
||||||
The tagging is a workaround to allow more stations to be built without allowing
|
|
||||||
a cheat with duplicating power.
|
|
||||||
All the RE nodes are queried for their current EU demand. Those which are off
|
|
||||||
would require no or a small standby EU demand, while those which are on would
|
|
||||||
require more.
|
|
||||||
If the total demand is less than the available power they are all updated with
|
|
||||||
the demand number.
|
|
||||||
If any surplus exists from the PR nodes the batteries will be charged evenly
|
|
||||||
with this.
|
|
||||||
If the total demand requires draw on the batteries they will be discharged
|
|
||||||
evenly.
|
|
||||||
|
|
||||||
If the total demand is more than the available power all RE nodes will be shut
|
1. All PR, BA, RE nodes are indexed and tagged with one switching station.
|
||||||
down. We have a brown-out situation.
|
The tagging is a workaround to allow more stations to be built without allowing
|
||||||
|
a cheat with duplicating power.
|
||||||
Hence for now all the power distribution logic resides in this single node.
|
2. All the RE nodes are queried for their current EU demand.
|
||||||
|
If the total demand is less than the available power they are all updated
|
||||||
|
with the demand number.
|
||||||
|
3. BA nodes are evenly charged from energy surplus.
|
||||||
|
4. Excess power draw will discharge batteries evenly.
|
||||||
|
5. If the total demand is more than the available power all RE nodes will be shut
|
||||||
|
down. We have a brown-out situation.
|
||||||
|
|
||||||
## Deprecated functions
|
## Deprecated functions
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user