structura-core
Read and convert Minecraft structures.
Validated structure data, native format I/O and explicit conversion-loss reporting. Native formats need no Amulet Core translation engine.
The optional [world] extra reads bounded Java world regions and supports
explicit block/entity patches with backups in Java 1.18+ saves.
Quick start
pip install structura-core
structura-convert house.litematic house.nbt
structura-convert house.nbt house.schem
structura-convert house.nbt house.snbt --strict
Formats
| Format | Read | Write | Installation |
|---|---|---|---|
Java Structure .nbt |
gzip/raw NBT; multiple palettes | gzip NBT | base |
Java Structure .snbt |
UTF-8 text | UTF-8 text, preserving NBT value types | base |
Litematic .litematic |
v5–v7; named regions | new v5/v7; native copies retain their version | base |
Sponge .schem |
v1–v3 | new v2; native copies retain their version | base |
Bedrock .mcstructure |
v1 native document | v1 native document / copy | base; [bedrock] for conversion to/from Java |
Legacy .schematic |
load_structure, structura-convert, structura-convert-legacy |
no legacy writer | [legacy] |
structura-convert reads all six formats and writes the first five. Java/Bedrock
translation needs [bedrock] and can be lossy. Sponge v1 without a DataVersion
requires --source-data-version when converting to another format; supply the
source game's version, not the desired target.
The base package uses amulet-nbt for NBT parsing, NumPy for block data and
portalocker for verified backup restore. The separate amulet-core translation
dependency is installed only by [world], [legacy] or [bedrock].
Python
from structura_core import convert_structure, load_structure
structure = load_structure("house.litematic", region="Main")
print(structure.size, len(structure.present))
output = convert_structure(structure, "house.schem")
convert_structure("house.nbt", "house.snbt", strict=True)
convert_structure returns an absolute Path. Use Litematic, Schematic or
Mcstructure document objects when native regions, metadata and unknown fields
must survive a document copy.
Conversion rules
- Native Java conversion retains
DataVersion; it does not upgrade game data. - Omitted data produces
ConversionWarning.--strict/strict=Truerejects reported loss before writing; failed writes preserve an existing destination. - Same-format native document copies retain their fields. Cross-format conversion cannot preserve metadata that the destination cannot represent.
- Java/Bedrock translation supports known vanilla blocks and waterlogging, omits ordinary entities and warns about block-entity fidelity. Its default target is 1.21.0.
pip install 'structura-core[bedrock]'
structura-convert house.nbt house.mcstructure --target-version 1.21.0
For old .schematic files, install [legacy] and use
structura-convert-legacy old.schematic house.nbt --all-entities.
The shared load_structure and structura-convert entry points also accept
.schematic, retain all source entities, enforce their normal allocation limits
and report normalization losses; strict mode rejects the conversion before writing.
The legacy converter defaults to Java 1.21.1 and preserves selection bounds, air,
materials and connections. --all-entities retains every source entity; otherwise
only paintings and item frames are carried. Placement preparation belongs to
structura-geo.
Documentation
-
Release verification: installed packages, dependency upgrade and downstream checks.
-
Migration to 0.6.1: changed analysis imports, legacy defaults and compatible package versions.
-
Architecture: module responsibilities, data ownership and conversion stages.
-
structura-geo: geometry, room and material metrics, morphology and placement preparation. Core has no dependency on geo or SciPy.
-
Conversion guide: preservation rules, Litematic regions, Sponge metadata, limits and existing helpers.
-
Format recipes: SNBT round trips, Sponge v1 source versions and the full Bedrock translation contract.
-
structura-render: image, vector and 3D output from the same structures.
CLI commands support --help. Public entry points include type information
for IDE completion. Interactive editing belongs to the separate structura-edit.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file structura_core-0.6.2.tar.gz.
File metadata
- Download URL: structura_core-0.6.2.tar.gz
- Upload date:
- Size: 96.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22c6f507686d660963af8c4e18b9c306806933720cbb4a1af25f6f0b804d3398
|
|
| MD5 |
b60448636a310f48c10ab74919626925
|
|
| BLAKE2b-256 |
4b726fd67390a1d61466ef2a786679e190c075132e51db4c80152a025002d5a4
|
Provenance
The following attestation bundles were made for structura_core-0.6.2.tar.gz:
Publisher:
publish.yml on kirimba1024/structura-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
structura_core-0.6.2.tar.gz -
Subject digest:
22c6f507686d660963af8c4e18b9c306806933720cbb4a1af25f6f0b804d3398 - Sigstore transparency entry: 2808683283
- Sigstore integration time:
-
Permalink:
kirimba1024/structura-core@1dbea0991ca1761601d7eeb01655932643d69619 -
Branch / Tag:
refs/tags/v0.6.2 - Owner: https://github.com/kirimba1024
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1dbea0991ca1761601d7eeb01655932643d69619 -
Trigger Event:
release
-
Statement type:
File details
Details for the file structura_core-0.6.2-py3-none-any.whl.
File metadata
- Download URL: structura_core-0.6.2-py3-none-any.whl
- Upload date:
- Size: 64.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09250c7e435bf5481411828f385a65838cb0c7da04a5be298a08840f676859fe
|
|
| MD5 |
42ff75c62e68432e99cc9504b91a8913
|
|
| BLAKE2b-256 |
aaf0bcc8af32bc4066f39def09878e35a32db713d9dcf762c80b75c41da47201
|
Provenance
The following attestation bundles were made for structura_core-0.6.2-py3-none-any.whl:
Publisher:
publish.yml on kirimba1024/structura-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
structura_core-0.6.2-py3-none-any.whl -
Subject digest:
09250c7e435bf5481411828f385a65838cb0c7da04a5be298a08840f676859fe - Sigstore transparency entry: 2808683364
- Sigstore integration time:
-
Permalink:
kirimba1024/structura-core@1dbea0991ca1761601d7eeb01655932643d69619 -
Branch / Tag:
refs/tags/v0.6.2 - Owner: https://github.com/kirimba1024
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1dbea0991ca1761601d7eeb01655932643d69619 -
Trigger Event:
release
-
Statement type: