diff options
author | Kevin Chabowski <kevin@kch42.de> | 2013-11-06 23:15:51 +0100 |
---|---|---|
committer | Kevin Chabowski <kevin@kch42.de> | 2013-11-06 23:15:51 +0100 |
commit | 291506b5ed49ffbefd9046a9c9f5a297f3e198ab (patch) | |
tree | 63060f6cf67f8bb0d45acc995a95dd0f516609d5 /leveldat.go | |
parent | 8150778cbdf2e2f72d300a548c669b07b6e98d0c (diff) | |
download | biomed-291506b5ed49ffbefd9046a9c9f5a297f3e198ab.tar.gz biomed-291506b5ed49ffbefd9046a9c9f5a297f3e198ab.tar.bz2 biomed-291506b5ed49ffbefd9046a9c9f5a297f3e198ab.zip |
Worlds are now opened by their level.dat and are centered properly.
The world spawn will be read from the level.dat and the view will be
centered to that position.
Diffstat (limited to 'leveldat.go')
-rw-r--r-- | leveldat.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/leveldat.go b/leveldat.go new file mode 100644 index 0000000..51344a8 --- /dev/null +++ b/leveldat.go @@ -0,0 +1,41 @@ +package main + +import ( + "errors" + "fmt" + "github.com/kch42/gonbt/nbt" + "io" +) + +func invalidLevelDat(err error) error { + return fmt.Errorf("Invalid level.dat: %s", err) +} + +func getMapCenter(leveldat io.Reader) (int, int, error) { + lvl, _, err := nbt.ReadGzipdNamedTag(leveldat) + if err != nil { + return 0, 0, err + } + + if lvl.Type != nbt.TAG_Compound { + return 0, 0, invalidLevelDat(errors.New("Root tag has wrong type")) + } + root := lvl.Payload.(nbt.TagCompound) + + data, err := root.GetCompound("Data") + if err != nil { + return 0, 0, invalidLevelDat(err) + } + + x, err := data.GetInt("SpawnX") + if err != nil { + return 0, 0, invalidLevelDat(err) + } + + z, err := data.GetInt("SpawnZ") + if err != nil { + return 0, 0, invalidLevelDat(err) + } + + return int(x), int(z), nil +} |