Metadata-Version: 2.1
Name: factoriolib
Version: 0.0.2
Summary: A small package to manipulate factorio blueprints
Home-page: https://gitlab.com/justin-guth.de/factoriolib
Author: justin-guth.de
Author-email: factoriolib@justin-guth.de
License: UNKNOWN
Project-URL: Bug Tracker, https://gitlab.com/justin-guth.de/factoriolib/-/issues
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE

# factoriolib

This repository contains a python package able to create and mainpulate factorio blueprint

## Usage

### Basics

In order to create simple blueprints you can simply create the entity objects needed and push them into the blueprint's entities list:

```py 
from factoriolib import entities
from factoriolib import blueprints
from factoriolib.core import Position, Direction

# Create a set of entity instances
transportBelt = entities.TransportBelt(
    position=Position(0.5, -0.5),
    direction=Direction(Direction.EAST)
)

inserter = entities.Inserter(
    position=Position(0.5, 0.5),
    direction=Direction(Direction.SOUTH)
)

chest = entities.WoodenChest(
    position=Position(0.5, 1.5)
)

pump = entities.Pump(
    position=Position(1.5, 0.5),
    direction=Direction(Direction.NORTH)
)

# create a blueprint instance
blueprint = blueprints.Blueprint()

# access the blueprint's entities and push all newly created entities into it
blueprint.entities().push(transportBelt, inserter, chest, pump)

# print the dict representation of the blueprint
print(blueprint.toDict())

# print the factorio exchange string
print(blueprint.exchangeString())
```

The generated exchange string can be imported into your game.

### Filters

Some entities such as chests may have logistics filters or a bar (the limit as to how many slots may be filled).

```py

from factoriolib import entities
from factoriolib import blueprints
from factoriolib.core import Position, LogisticFilter
from factoriolib.items import Wood, IronPlate

# Create a requester chest for wood and iron plates with a limit to 3 slots
chest = entities.LogisticChestRequester(
    position=Position(0.5, 0.5),
    bar=3
)

# add the filters (note that the index is 1 based)
chest.request_filters().push(
    LogisticFilter(Wood.name(), 1, 1337),
    LogisticFilter(IronPlate.name(), 2, 42),
)
```

### Circuit network

Entities that may be connected to a circuit network may be connected using the ConnectionMaker helper:

```py


from factoriolib import entities
from factoriolib import blueprints
from factoriolib.core import Position, CircuitCondition, Signal
from factoriolib.utility import ConnectionMaker
from factoriolib.items import Wood

pole = entities.MediumElectricPole(
    position=Position(0.5, 0.5)
)

inserter = entities.Inserter(
    position=Position(5.5, 0.5)
)

# set the stack size to 1
inserter.override_stack_size(1)

# set the circuit condition to wood signal greater than 1337
inserter.circuit_condition(
    CircuitCondition(
        first_signal=Signal(Wood.name(), type="item"),
        constant=1337,
        comparator=">"
    )
)

# connect both entities by red wire
ConnectionMaker.make(inserter, pole, "red")


```




