Releases: redruin1/factorio-draftsman
Releases · redruin1/factorio-draftsman
2.0.3
2.0.2
2.0.1
- Updated
factorio-data
to version2.0.41
(latest) - Added
planets.get_surface_properties()
which grabs a dict of surface properties with valid defaults - Added
Entity.surface_conditions
, which maps directly to the Factorio APIsurface_conditions
- Added
Entity.is_placeable_on()
, which returns false if an entity'ssurface_conditions
prohibit their construction on a planet - Added
utils.passes_surface_conditions()
, which acts as the abstract backend which runsEntity.is_placable_on()
andrecipes.is_usable_on()
- Added testing for
Asteroid Collector
- Finished implementing features for
LogisticsContainer
s quality
is now an accessible and modifiable attribute ofEntity
s- Made
Container.inventory_size
proportional to the entity'squality
- (note that all quality modifiers are not yet available)
- Merge RosieBaish's pull request:
- Add logic to allow mods with different special characters
- Merge Gavinp's pull requests:
- Add test for creating items with position
- Add test for recycler
get_world_bounding_box()
draftsman
now prints usage/help on empty args.
- Fixed #142 (Logistics containers not importing properly)
- Fixed #121 (Support for Bob's Inserters)
- Fixed #151 (Severe Performance degradation when using
add_circuit_connection
)
2.0.0
For a more user friendly overview of some of the changes, see here.
- Updated
factorio-data
to version2.0.28
(latest) - Updated
compatibility/defines.lua
to2.0.28
(latest) - Updated all prototypes to match Factorio 2.0
- Added new prototypes in Factorio 2.0
AgriculturalTower
AsteroidCollector
Car
CargoBay
CargoLandingPad
CurvedRailA
CurvedRailB
DisplayPanel
ElevatedCurvedRailA
ElevatedCurvedRailB
ElevatedHalfDiagonalRail
ElevatedStraightRail
FusionGenerator
FusionReactor
HalfDiagonalRail
LightningAttractor
RailRamp
RailSupport
SelectorCombinator
SpacePlatformHub
SpiderVehicle
Thruster
- Removed command line utility
draftsman-update
- Added command line utility
draftsman
with multiple subcommandsdraftsman update ...
for the original functionality of modifying a Factorio environmentdraftsman list
to list all mods detected under a particular environmentdraftsman enable/disable ...
enables or disables one or more modsdraftsman factorio-version
reports or sets the version of Factorio's datadraftsman version
reports Draftsman's own semantic version- Write
draftsman -h
ordraftsman [command] -h
for more information
- Swapped from
schema
topydantic
- Format for specifying schemas is now much clearer
- Both blueprintables and entities now share the same exporting code, overall making more sense
- Can now create a JSON schema of any entity or blueprintable (by calling
Object.json_schema()
), which can be exported and used in any other program that reads JSON schema(!) - However, minimum Python version is now 3.7 to support type hints
- Switched from
unittest
topytest
(more features with similar syntax;coverage run
still works the same) - Changed the code to be primarily Python3 compatible with the new minimum version
- Added
extras
module which implements some handy new features:- Added
flip_belts(blueprint)
which flips all belt entities inside the blueprint (preserving continuity)
- Added
- Added a bunch of equivalent functions from the Factorio StdLib:
- Added
opposite()
,next()
,previous()
,to_orientation()
, andto_vector()
toDirection
- Added
Orientation
class, similar toDirection
; comes with it's own suite of__add__()
,to_direction()
, andto_vector()
helpers - Added
constants.Ticks
enumeration which containsSECONDS
,MINUTES
,HOURS
, etc. stored as quantities of Factorio ticks
- Added
- Added
union
,intersection
, anddifference
toEntityList
,TileList
, andScheduleList
- Updated
Direction
to now be the Factorio 2.0 16-direction enum; useLegacyDirection
for the old enumerations - Added
TrainConfiguration
, which allows you to specify entire trains with strings like"1-4-1"
and customize them on a per-car basis - Added
WaitCondition
andWaitConditions
objects which keep track of train station condition treesWaitConditions
can be combined using bitwiseand
andor
in order to collect them into aWaitConditions
object:- Added
WaitConditionType
andWaitConditionCompareType
enumerations
- Added
Collection.add_train_at_position()
andCollection.add_train_at_station()
to make placing trains easier - Added
Collection.find_trains_filtered()
to allow users to search Blueprints/Groups for trains of particular types - Added
RailPlanner
(finally) - Added
data.fluids
module with some useful helpers - Added
data.planets
module allowing you to access planet metadata for things like surface properties - Added
data.items.fuels
which is dict of sets of item names that fall under their respective fuel categories - Added data functions
signals.add_signal()
,tiles.add_tile()
,entities.add_entity()
, etc. which allow you to add entities on the fly (primarily for Factorio environment compatibility) - Added
RequestItemsMixin
toLocomotive
,CargoWagon
, andArtilleryWagon
- Added
unknown
keyword to all entity/tile creation constructs which allows the user to specify what should happen when draftsman encounters an entity it doesn't recognize - Changed
InvalidEntityError
andInvalidTileErrors
so that they now try to detect a similar tile/entity name and display that information to the user in the error message- For example, if you accidentally type
Container("wodenchest")
, it will realize you probably meant to typeContainer("wooden-chest")
and suggest that to you instead
- For example, if you accidentally type
- Added a bunch of new documentation to document the above
- Added a bunch of new examples to test out the above new features
- Added a fixture that ensures that Draftsman is running a vanilla configuration before running tests, and exits if it detects that it is not the case.
- Added a new command line option for
draftsman-update
--lua-version
, which prints the version of Lua currently being used for debugging compat issues - Added a README.md to the
examples
folder which provides short descriptions for all of the examples - Integrated aforementioned examples into the test suite
- Removed the
area
,tile_width
, andtile_height
properties fromBlueprint
, which have been replaced withget_world_bounding_box()
andget_dimensions()
- These attributes are no longer cached in the blueprint and have to be recalculated each time such information is desired
- However, this means that it only has to be calculated when the user actually wants it, instead of every time a user adds a new entity/tile to a blueprint
- The user has a better idea of when they can cache the blueprint's dimension to reduce calculation, so it's deferred to the user
- By making them functions it also makes it abundantly clear that calling them is not likely
O(1)
- Added the
get_first
method to the defaults for the name of every entity- This means that if a data configuration has zero entities of a particular type, using a default name will result in a palatable error instead of something cryptic
- Added
index
attribute to allBlueprintable
types, which allows the end user to customize the index in a parent BlueprintBook manually
(Still autogenerated based on list order if unspecified, but now can be overridden) - Added data functions
signals.add_signal()
,tiles.add_tile()
,entities.add_entity()
, etc. which allow you to add entities on the fly (primarily for Factorio environment compatibility) - Fixed a bunch of warts in the API:
- Added the ability to modify
x
andy
attributes of bothposition
andtile_position
and have each other update in tandem - Made it possible to rotate objects in parent
Collections
as long as they're either square or rotated such that they preserve their original footprint (akin to Factorio) - Added
__eq__
operators to pretty much all draftsman things (Entity
,EntityList
,TileList
,ScheduleList
,Schedule
,WaitConditions
, etc.) - Added more professional
__repr__
functions to pretty much all draftsman things as well
- Added the ability to modify
- Normalized all import filenames to use underscores consistently (potentially breaking change!)
- Finished up documentation on
DeconstructionPlanner
- [PERF] Reduced memory consumption by up to ~80 percent(!) (This also made it quite a bit faster to boot)
- Made it so that default
collision_mask
keys are resolved at once at the data level when you calldraftsman-update
, so you can queryentities.raw
for the correct default value - Bumped Lupa to 2.0 which allows me to specify Lua version 5.2 which Factorio uses (#50)
draftsman-update
will issue a warning if it cannot specify the correct Lua version: It'll still try to load and may still work anyway, but it's not guaranteed to\
- Added
--factorio-version
command fordraftsman-update
which either displays the current Factorio version or sets it to a specific Github tag - Patched InvalidModVersionError for now (#51)
- Removed
on_(tile/entity)_(insert/set/remove)
from allEntityCollection
andTileCollection
classes - Removed
on_(insert/set/remove)
from allEntity
implementations as well (they were not used and are replaced with better things now) - Renamed
data
member to_root
member onEntityList
andTileList
(Internal reasons) - Fixed issue #119
1.1.1
1.1.0
1.0.6
- Updated
factorio-data
to version1.1.88
- Updated
compatibility/defines.lua
to1.1.88
- Merged arpheno's pull request:
- Fixed
Pump
so that it now correctly exports it'sdirection
- Fixed
- Merged SIGSTACKFAULT's pull requests:
- Fix type annotation of
Tile.__init__()
- Fix type annotation of
BlueprintBook.insert()
- Fix type annotation of
draftsman-update
is now (finally) able to load mods from folder directories instead of just zip archivesdraftsman-update
will now prefer mods in folders instead of zip archives if one of each type present and they have the exact same ID and version (I think this matches Factorio, create an issue if it's not)- Added
--report
command todraftsman-update
that prints out a list of currently active mods and their versions (to aid in bug reports) - Fixed Lua
defines
table not being defined by the timefactorio-data/core
runs (#85) - Fixed UTF-8 BOM tokens not being properly stripped from all mod Lua files, resulting in issues when sending to Lupa (#84)
- Changed the Lua load process a whole lot for
draftsman-update
, hopefully behaving more predictably and causing no regressions
1.0.5
- Added
get_blueprintable_from_JSON()
and patchedget_blueprintable_from_string()
so that it no longer converts the string twice (accidentally) - Fixed issue where integer
playback_volume
values on programmable speakers wasn't getting coerced to a float and failing validation (#72) - Fixed Blueprintable objects not being correctly initialized from their constructor when JSON dicts were passed as an argument (#75)
- Fixed
OverlappingObjectsWarning
being incorrectly emitted whenGates
overlapStraightRails
(they now are only emitted if they're not perpendicular to each other) (#76) - Fixed
ConstantCombinator
not recognizing theis_on
member (#77)
1.0.4
- Updated
factorio-data
to version1.1.80
- Updated
compatibility/defines.lua
to1.1.80
- Merged louga31's pull request:
- Fix recipes so that they correctly read either internal format
- Fixed an issue where not all entities were being assigned to
entities.flippable
(#61) - Fixed mod dependency loading (hopefully) so that it should actually handle recursive requires across an arbitrary number of different mods (#70)
- Fixed an issue where required Lua files with a single prepended dot or slash would break the path resolution (#70)
1.0.3
- Updated
factorio-data
to version1.1.76
(latest stable) - Updated
compatibility/defines.lua
to1.1.76
(latest stable) - Merged penguincounter's pull request:
- Fixed logistics requester and buffer chest signatures not having the correct
circuit_mode_of_operation
key
- Fixed logistics requester and buffer chest signatures not having the correct
- Added a
dump_format()
method to entities that outputs a user friendly description of all of the possible key/value entries in the exported blueprint dict- Still needs to be done for Blueprintable; ideally there would be a
Exportable
parent class that would implement the madness - Also need to investigate faster validation options since schema is pretty slow; maybe we can unify and improve speed at the same time
- Still needs to be done for Blueprintable; ideally there would be a
- Added a
get_format()
method intended to get a readable formatted string (that can easily be autogenerated at the top of each entity in the documentation! Not yet but soon) - Changed
_exports
dict to be both more user readable and only defined on a per class basis instead of a per instance basis (so memory usage should be down) - Prepped
env.py
for when Lupa version 2.0 goes live (which will resolve #50) - Fixed
"Mining_Drones_Harder"
mod not loading because of stray "__MACOSX" folder defined alongside (#55) - Fixed
"FactorioExtended-Plus-Logistics"
not loading due to internal file titled__init__.lua
(#56) - Fixed
env.extract_entities().categorize_entities()
toget
flags instead of assuming they exist ("flags"
set is common but optional)