Skip to content
Minecraft Levels for Python
Python Shell
Find file
Failed to load latest commit information.
regression_test added regression test for heightmap
schematics .NET gzip output doesn't always get read correctly by python's gzip
test Fixed: Off-by-one error in schematic export with extended IDs.
testfiles TileEntity.copyWithOffset now adjusts the coordinates of teleport com…
.gitattributes Add .gitattributes with core.autocrlf
.gitignore Add built docs to gitignore
.travis.yml Add cython to travis install command
LICENSE.txt added licensing terms
README.txt Formally depend on pyyaml instead of pasting it in. This way pyyaml g… Rename ->
_nbt.pyx NBT: TAG_List now accepts item assignment using slices. Added: New biome types Added: Biomes are now exported into schematic files. Fixed: import statement automatically inserted by PyCharm was relativ… Added: Block rotation for several new blocks. Add Vector.intfloor pyflakes helped fixes: resolve function redefinition
classic.yaml fix stone step graphics, change "Grey" spelling to "Gray" as it is in… Revert "Fixed: TileEntity.copyWithOffset adjusts mob position data fo… add pyflakes result fix: local variable is assigned to but never used Refactor: Change log statements to use `` instead of `info=…
indev.yaml Blocktypes: Include classic blocks in indev.yaml instead of loading c… Flush and sync lock file when acquiring session lock update for Minecraft 1.6.2 Rename -> Cleanup: Check whether a point is in the level's bounds using `in sel… Debug: Block YAML parsing errors are now fatal. dumpsigns: Don't decode sign text now that TAG_String automat… Rename -> Cleanup: Finding directories in
minecraft.yaml Syntax Fixes Server Generator: Combine stdout and stderr to be compatible with pos… Fixed: Remove self from TAG_Compound's key not found error message Clean up NBT modules. Debug: Change loggers to use __name__ instead of __file__
pocket.yaml Pocket: Fixed water, sandstone, quartz textures add profiling scripts Raise a ChunkTooBig error when trying to save a chunk that exceeds re…
requirements.txt Formally depend on pyyaml instead of pasting it in. This way pyyaml g…
requirements_test.txt Try to get travis-ci going Tests now import pymclevel modules relative to pymclevel. This remove… Tests: now uses testfiles/AnvilWorld instead o… Fixed: Schematic entities have wrong positions after rotating.
setup.cfg Added distutils setup script written by user:sixohsix. Build: Merge into
setupnbt64.bat add and setupnbt64.bat. try to import _nbt without using…


Python library for reading Minecraft levels.

Can read Alpha levels, Indev levels, and Creative levels (with help).

Includes a command-line client (

Requires numpy and PyYaml.

Read to get started.

See LICENSE.txt for licensing terms. is a command-line editor for SMP maps. It can be used interactively from a terminal, accept editing commands on standard input, or run a single editing command from the shell.

Sample usage:

$ python


    Block commands:
        clone <sourcePoint> <sourceSize> <destPoint>
        fill <blockType> [ <point> <size> ]
        replace <blockType> [with] <newBlockType> [ <point> <size> ]

        export <filename> <sourcePoint> <sourceSize>
        import <filename> <destPoint>


    Player commands:
        player [ <player> [ <point> ] ]
        spawn [ <point> ]

    Entity commands:
        removeEntities [ <EntityID> ]

    Chunk commands:
        createChunks <point> <size>
        deleteChunks <point> <size>
        prune <point> <size>
        relight [ <point> <size> ]

    World commands:

    Editor commands:
        load <filename> | <world number>

        blocks [ <block name> | <block ID> ]
        help [ <command> ]

    Points and sizes are space-separated triplets of numbers ordered X Y Z.
    X is position north-south, increasing southward.
    Y is position up-down, increasing upward.
    Z is position east-west, increasing westward.

    A player's name can be used as a point - it will use the
    position of the player's head. Use the keyword 'delta' after
    the name to specify a point near the player.

       codewarrior delta 0 5 0

    This refers to a point 5 blocks above codewarrior's head.

Please enter world number or path to world folder: 4
INFO:Identifying C:\Users\Rio\AppData\Roaming\.minecraft\saves\World4\level.dat
INFO:Detected Infdev level.dat
INFO:Saved 0 chunks
INFO:Scanning for chunks...
INFO:Found 6288 chunks.
World4> fill 20 Player delta -10 0 -10 20 20 20

Filling with Glass
Filled 8000 blocks.
World4> player Player

Player Player: [87.658381289724858, 54.620000004768372, 358.64257283335115]
World4> player Player Player delta 0 25 0

Moved player Player to (87.658381289724858, 79.620000004768372, 358.642572833351
World4> save

INFO:Asked to light 6 chunks
INFO:Batch 1/1
INFO:Lighting 20 chunks
INFO:Dispersing light...
INFO:BlockLight Pass 0: 20 chunks
INFO:BlockLight Pass 1: 2 chunks
INFO:BlockLight Pass 2: 0 chunks
INFO:BlockLight Pass 3: 0 chunks
INFO:BlockLight Pass 4: 0 chunks
INFO:BlockLight Pass 5: 0 chunks
INFO:BlockLight Pass 6: 0 chunks
INFO:BlockLight Pass 7: 0 chunks
INFO:BlockLight Pass 8: 0 chunks
INFO:BlockLight Pass 9: 0 chunks
INFO:BlockLight Pass 10: 0 chunks
INFO:BlockLight Pass 11: 0 chunks
INFO:BlockLight Pass 12: 0 chunks
INFO:BlockLight Pass 13: 0 chunks
INFO:SkyLight Pass 0: 20 chunks
INFO:SkyLight Pass 1: 22 chunks
INFO:SkyLight Pass 2: 17 chunks
INFO:SkyLight Pass 3: 9 chunks
INFO:SkyLight Pass 4: 7 chunks
INFO:SkyLight Pass 5: 2 chunks
INFO:SkyLight Pass 6: 0 chunks
INFO:SkyLight Pass 7: 0 chunks
INFO:SkyLight Pass 8: 0 chunks
INFO:SkyLight Pass 9: 0 chunks
INFO:SkyLight Pass 10: 0 chunks
INFO:SkyLight Pass 11: 0 chunks
INFO:SkyLight Pass 12: 0 chunks
INFO:SkyLight Pass 13: 0 chunks
INFO:Completed in 0:00:02.024000, 0:00:00.337333 per chunk
INFO:Saved 20 chunks
Something went wrong with that request. Please try again.