How do Minecraft save files work? Is there a Python interface?
-
Just for the record, the Minecraft level file format is documented on the official Minecraft site. Spec includes an example of how to parse.– sjohnstonCommented Oct 19, 2010 at 17:52
-
@sjohnston: Ah yes, I knew it existed there as well but I couldn't find it today - I'll include that in my answer if that's already with you– BlueRaja - Danny PflughoeftCommented Oct 19, 2010 at 18:05
-
@Blue Go for it.– sjohnstonCommented Oct 19, 2010 at 18:13
-
Now that this thread's been necro-bumped, I don't feel bad adding a comment. Notch recently said on his blog that the first priority on Mojang's roadmap is a better save file format. As such, most tools currently used will break until (if) an update is released.– Dave McClellandCommented Jan 9, 2011 at 22:59
-
1Just a note... The link to the documentation in sjohnston is now Not Found.– Denilson Sá MaiaCommented Jan 16, 2011 at 21:01
3 Answers
You're looking for mclevel.py. This (as the name hints at) allows python to manipulate Minecraft levels. I don't know if it also does minecarts, but I suppose so.
It can be found at http://www.minecraftforum.net/viewtopic.php?f=25&t=28518&p=507974&hilit=pymclevel#p507974
An example of what you can do with it: http://www.minecraftforum.net/viewtopic.php?f=25&t=52183
This Minepedia page has some documentation; here's a simple overview.
World<x>
holds the data for the world in thex
th slot.level.dat
contains information about your spawn point, time of day, inventory.- A number of folders used to organize data into at most 64 groups of chunks.
- A second level of folder used to organize data into at most 4,096 smaller groups of chunks
- The chunk files themselves, each storing terrain, item and monster data for the corresponding 16×16 slice of the world.
The folder hashing has been added because some systems had trouble handling folders with huge amounts of files.
For the curious, the path for the chunk at position (x,y)
for the world in slot w
is calculated as follows, using this base36
function and the %
modulus operation:
world<w>/<base36(x % 64)>/<base36(y % 64)>/c.<base36(x)>.<base36(y)>.dat
Each chunk is as large as this hole:
Image courtesy of Raven Dreamer, say hello to the creeper.