A Rust library to export prototype definitions from Factorio.
This is both a library as well as a command line tool to export prototype definitions from Factorio.
See crate page on crates.io
sh
$ factorio_exporter ~/tmp/factorio-full -f json -d vanilla.json
$ jq '.recipe_prototypes["iron-plate"]' vanilla.json
Output:
json
{
"allow_as_intermediate": true,
"allow_decomposition": true,
"allow_inserter_overload": true,
"allow_intermediates": true,
"always_show_made_in": false,
"always_show_products": false,
"category": "smelting",
"emissions_multiplier": 1,
"enabled": true,
"energy": 3.2,
"hidden": false,
"hidden_from_flow_stats": false,
"hidden_from_player_crafting": false,
"ingredients": [
{
"amount": 1,
"name": "iron-ore",
"type": "item"
}
],
"localised_description": "Unknown key: \"recipe-description.iron-plate\"",
"localised_name": "Iron plate",
"name": "iron-plate",
"object_name": "LuaRecipePrototype",
"order": "b[iron-plate]",
"overload_multiplier": 0,
"products": [
{
"amount": 1,
"name": "iron-plate",
"probability": 1,
"type": "item"
}
],
"request_paste_multiplier": 30,
"show_amount_in_title": true,
"unlock_results": true,
"valid": true
}
```sh $ factorio_exporter --help Exports prototypes from Factorio in JSON or YAML format
Usage: factorio_exporter [OPTIONS]
Arguments:
Options:
-d, --destination
See factorio_exporter.rs for how to use the crate as a library.
This is still very much in the prototype phase. The output will be incomplete and have bugs. Please try it out anyway and report any issues that you run into!
The goal of the importer is to be as close as possible to the authoritative definition of the prototypes. It tries to achieve that goal by two design decisions:
The prototypes are exported from a running Factorio instance in the runtime stage. This means that the prototypes are as close as possible to how they are used in the game.
The list of exported properties is taken from the official definition.
Another consequence of this design is that it will be possible to export the prototypes of loaded mods. This isn't implemented, yet, however.
Contributions are welcome! Feel free to send pull requests, but if you want to make large-scale changes it would make sense to discuss them first.