semvec/pypi-packages huggingface dataset:
factoriolib 0.0.2
A small package to manipulate factorio blueprints
Requires Python: >=3.6

# 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")


```