From 291506b5ed49ffbefd9046a9c9f5a297f3e198ab Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Wed, 6 Nov 2013 23:15:51 +0100 Subject: 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. --- leveldat.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 leveldat.go (limited to 'leveldat.go') 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 +} -- cgit v1.2.3-54-g00ecf