Unload cached players and metadata when changing revisions. (Move metadata up a level to WorldEditor?)

This commit is contained in:
David Vierra 2015-01-30 17:36:40 -10:00
parent 3710339966
commit 6541e453a5
2 changed files with 22 additions and 18 deletions

View File

@ -433,29 +433,32 @@ class AnvilWorldAdapter(object):
self.selectedRevision.writeFile("level.dat", self.metadata.metadataTag.save())
else:
try:
metadataTag = nbt.load(buf=self.selectedRevision.readFile("level.dat"))
self.metadata = AnvilWorldMetadata(metadataTag)
self.loadFMLMapping()
except (EnvironmentError, zlib.error) as e:
log.info("Error loading level.dat, trying level.dat_old ({0})".format(e))
try:
metadataTag = nbt.load(buf=self.selectedRevision.readFile("level.dat_old"))
self.metadata = AnvilWorldMetadata(metadataTag)
log.info("level.dat restored from backup.")
self.saveChanges()
except Exception as e:
traceback.print_exc()
log.info("%r while loading level.dat_old. Initializing with defaults.", e)
self._createMetadataTag()
assert self.metadata.version == VERSION_ANVIL, "Pre-Anvil world formats are not supported (for now)"
self.loadMetadata()
def __repr__(self):
return "AnvilWorldAdapter(%r)" % self.filename
# --- Create, save, close ---
def loadMetadata(self):
try:
metadataTag = nbt.load(buf=self.selectedRevision.readFile("level.dat"))
self.metadata = AnvilWorldMetadata(metadataTag)
self.loadFMLMapping()
except (EnvironmentError, zlib.error) as e:
log.info("Error loading level.dat, trying level.dat_old ({0})".format(e))
try:
metadataTag = nbt.load(buf=self.selectedRevision.readFile("level.dat_old"))
self.metadata = AnvilWorldMetadata(metadataTag)
log.info("level.dat restored from backup.")
self.saveChanges()
except Exception as e:
traceback.print_exc()
log.info("%r while loading level.dat_old. Initializing with defaults.", e)
self._createMetadataTag()
assert self.metadata.version == VERSION_ANVIL, "Pre-Anvil world formats are not supported (for now)"
def loadFMLMapping(self):
metadataTag = self.metadata.metadataTag
fml = metadataTag.get('FML')
@ -635,6 +638,7 @@ class AnvilWorldAdapter(object):
newRevision = self.revisionHistory.getRevision(index)
changes = self.revisionHistory.getRevisionChanges(self.selectedRevision, newRevision)
self.selectedRevision = newRevision
self.loadMetadata()
return changes
def listRevisions(self):

View File

@ -225,6 +225,7 @@ class WorldEditor(object):
"""
assert index is not None, "None is not a revision index!"
self.syncToDisk()
self.playerCache.clear()
changes = self.adapter.selectRevision(index)
self.currentRevision = index
@ -239,7 +240,6 @@ class WorldEditor(object):
self._loadedChunks.pop((cx, cz, dimName), None)
self.recentDirtyFiles.update(changes.files)
# xxx unload players, metadata!!
# --- Save ---