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)
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