Example #1
0
    def saveWorld(self, data, io=None):
        returnDict = {}
        returnDict.update(walkDictWithRef(data, self.requiredFields, self._saveRequired, lambda k, v: not isinstance(v, dict)))
        returnDict.update(walkDictWithRef(data, self.optionalFields, self._saveOptional, lambda k, v: not isinstance(v, dict)))

        nbtObject = NBTFile(value=returnDict)
        if io is None:
            with gzip.open(self.path + ".tmp", 'rb') as io:
                nbtObject.save(io, True)
        else:
            nbtObject.save(io, True)

        nbtObject.save()
        shutil.move(self.path + ".tmp", self.path)
Example #2
0
    def loadWorld(self, io=None):
        returnDict = {}

        if io is None:
            with gzip.open(self.path, 'rb') as io:
                nbtObject = NBTFile(io)
        else:
            nbtObject = NBTFile(io)

        if nbtObject.name != "ClassicWorld":
            raise WorldLoadError(ERRORS["header_mismatch"], "Header mismatch. Maybe the file is broken?")
        if nbtObject["FormatVersion"].value not in self.ACCEPTABLE_LEVEL_VERSIONS:
            raise WorldLoadError(ERRORS["unsupported_level_version"], "Level version unsupported.")

        returnDict.update(walkDictWithRef(nbtObject, self.requiredFields, self._loadRequired, lambda k, v: not isinstance(v, dict)))
        returnDict.update(walkDictWithRef(nbtObject, self.optionalFields, self._loadOptional, lambda k, v: not isinstance(v, dict)))
        self.logger.debug(returnDict)
        return returnDict