func (world *World) LoadChunk(x int32, z int32) (err os.Error) { if err = world.verifyLock(); err != nil { return } xz := MakeXZ(x, z) if _, ok := world.Chunks[xz]; ok { return // nothing to do } var px, pz = posmod64(x), posmod64(z) chunkPath := path.Join( world.dir, int32ToBase36String(px), int32ToBase36String(pz), fmt.Sprint( "c.", int32ToBase36String(x), ".", int32ToBase36String(z), ".dat")) _, chunkmap, err := nbt.Load(chunkPath) if err != nil { err = error.NewError(fmt.Sprintf("could not load chunk (%d, %d)", x, z), err) return } world.Chunks[xz] = toChunk(chunkmap) return }
func Open(worlddir string) (w *World, err os.Error) { w = &World{dir: worlddir} if err = w.verifyFormat(); err != nil { err = error.NewError("could not verify world format", err) return } if err = w.lock(); err != nil { err = error.NewError("unable to obtain lock on world", err) return } _, levelDat, err := nbt.Load(path.Join(w.dir, leveldat)) if err != nil { err = error.NewError("could not read level", err) return } w.Chunks = make(map[XZ]*Chunk) w.loadLevelDat(levelDat) return }