Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
A complete, well-tested, and up-to-date module to manipulate Factorio blueprint strings. Compatible with mods.
A 'draftsman' is a kind of artist that specializes in creating technical drawings across many engineering disciplines, including architectural, mechanical, and electrical.
Similarly, factorio-draftsman
is a Python module for creating and editing blueprints for the game Factorio.
from draftsman.blueprintable import Blueprint, BlueprintBook
from draftsman.constants import Direction
from draftsman.entity import ConstantCombinator
blueprint = Blueprint()
blueprint.label = "Example"
blueprint.description = "A blueprint for the readme."
blueprint.version = (1, 0) # 1.0
# Create a alt-mode combinator string
test_string = "testing"
for i, c in enumerate(test_string):
constant_combinator = ConstantCombinator()
constant_combinator.tile_position = (i, 0)
letter_signal = "signal-{}".format(c.upper())
constant_combinator.set_signal(index=0, signal=letter_signal, count=0)
blueprint.entities.append(constant_combinator)
# Create a simple clock and blinking light
constant = ConstantCombinator()
constant.tile_position = (-1, 3)
constant.direction = Direction.EAST
constant.set_signal(0, "signal-red", 1)
constant.id = "constant"
blueprint.entities.append(constant)
# Flexible ways to specify entities
blueprint.entities.append(
"decider-combinator",
id="clock",
tile_position=[0, 3],
direction=Direction.EAST,
control_behavior={
"decider_conditions": {
"first_signal": "signal-red",
"comparator": "<=",
"constant": 60,
"output_signal": "signal-red",
"copy_count_from_input": True,
}
},
)
# Use IDs to keep track of complex blueprints
blueprint.entities.append("small-lamp", id="blinker", tile_position=(2, 3))
blinker = blueprint.entities["blinker"]
blinker.set_circuit_condition("signal-red", "=", 60)
blinker.use_colors = True
blueprint.add_circuit_connection("green", "constant", "clock")
blueprint.add_circuit_connection("red", "clock", "clock", 1, 2)
blueprint.add_circuit_connection("green", "clock", "blinker", 2, 1)
# Factorio API filter capabilities
ccs = blueprint.find_entities_filtered(name="constant-combinator")
assert len(ccs) == len(test_string) + 1
blueprint_book = BlueprintBook()
blueprint_book.blueprints = [blueprint]
print(blueprint_book) # Pretty printing using json
print(blueprint_book.to_string()) # Blueprint string to import into Factorio
Simply put, Draftsman attempts to provide a universal solution to the task of creating and manipulating Factorio blueprint strings, which are compressed text strings used by players to share their constructions easily with others. Draftsman allows users to programmatically create these strings via script, allowing for designs that would normally be too tedious to design by hand, such as combinator computer compilers, image-to-blueprint converters, pumpjack placers, as well as any other complex or repetitive design better suited for a computer's touch.
For a user-friendly timeline of how this project came about, as well as some pretty illustrations of it's capabilities, you can read an article written for the amazing fan-run community spotlight website Alt-F4.
For more information on what exactly Draftsman is and does, as well as its intended purpose and philosophy, you can read the documentation here.
For more examples on what exactly you can do with Draftsman, take a look at the examples folder.
draftsman.data
for easy and flexible iterationpip install factorio-draftsman
This will install the latest version of Draftsman with a set of pre-generated data from the latest version of vanilla Factorio.
If you want to have the same data validation that Draftsman provides for vanilla data with mods as well, you can re-generate this data with the command line tool draftsman-update
, which is described in detail here.
python -m unittest discover
Note that testing currently is only guaranteed to work with a vanilla install.
coverage run
Determine where your mods are installed; you can either copy the mods you want into the local site-packages/draftsman/factorio-mods
folder where Draftsman is installed (which it looks in by default), or you can specify an external path with the -p
or --path
argument which can point to your Factorio mods folder or anywhere else convenient.
Then, simply call draftsman-update
or draftsman-update --path some/path/to/mods
to automatically update the data associated with that Draftsman installation.
draftsman-update
can also be called in script via the method draftsman.env:update()
if you want to change the mod list on the fly:
# my_update_script.py
from draftsman.env import update
update(verbose=True, path="some/path") # equivalent to 'draftsman-update -v -p some/path'
Both mod-info.json
and mod-settings.dat
are recognized by draftsman-update
, so you can also just change the settings in either of those and the loading process will adjust as well.
UpgradePlanner
and DeconstructionPlanner
Blueprint.schedules
convenience functionsdump_format
Entity
subclassEntity
is flip-able or notdata.raw
extraction and formatting?schema
(validir? requires cython, currently we're pure python)FAQs
A complete, well-tested, and up-to-date module to manipulate Factorio blueprint strings. Compatible with mods.
We found that factorio-draftsman demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.