Esempio n. 1
0
    def __init__(self, folder):
        """
        Load a world from disk.

        :Parameters:
            folder : str
                The directory containing the world.
        """

        self.folder = FilePath(folder)
        if not self.folder.exists():
            self.folder.makedirs()

        self.chunk_cache = weakref.WeakValueDictionary()
        self.dirty_chunk_cache = dict()

        self._pending_chunks = dict()

        self.spawn = (0, 0, 0)
        self.seed = random.randint(0, sys.maxint)

        level = self.folder.child("level%s" % extension())
        if level.exists() and level.getsize():
            self.load_from_tag(read_from_file(level.open("r")))

        write_to_file(self.save_to_tag(), level.open("w"))

        self.chunk_management_loop = LoopingCall(self.sort_chunks)
        self.chunk_management_loop.start(1)
Esempio n. 2
0
    def save_player(self, username, player):

        f = self.folder.child("players")
        if not f.exists():
            f.makedirs()
        f = f.child("%s%s" % (username, extension()))
        write_to_file(player.save_to_tag(), f.open("w"))
Esempio n. 3
0
def names_for_chunk(x, z):
    """
    Calculate the folder and file names for given chunk coordinates.
    """

    first = base36(x & 63)
    second = base36(z & 63)
    third = "c.%s.%s%s" % (base36(x), base36(z), extension())

    return first, second, third
Esempio n. 4
0
    def load_player(self, username):
        """
        Retrieve player data.
        """

        player = self.factory.create_entity(self.spawn[0], self.spawn[1],
            self.spawn[2], "Player", username=username)

        player.location.stance = self.spawn[1]
        player.username = username

        f = self.folder.child("players")
        if not f.exists():
            f.makedirs()
        f = f.child("%s%s" % (username, extension()))
        if f.exists() and f.getsize():
            player.load_from_tag(read_from_file(f.open("r")))

        return player