Esempio n. 1
0
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

}
Esempio n. 2
0
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
}