Unload cached players and metadata when changing revisions. (Move metadata up a level to WorldEditor?)
This commit is contained in:
parent
3710339966
commit
6541e453a5
@ -433,29 +433,32 @@ class AnvilWorldAdapter(object):
|
|||||||
self.selectedRevision.writeFile("level.dat", self.metadata.metadataTag.save())
|
self.selectedRevision.writeFile("level.dat", self.metadata.metadataTag.save())
|
||||||
|
|
||||||
else:
|
else:
|
||||||
try:
|
self.loadMetadata()
|
||||||
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 __repr__(self):
|
def __repr__(self):
|
||||||
return "AnvilWorldAdapter(%r)" % self.filename
|
return "AnvilWorldAdapter(%r)" % self.filename
|
||||||
|
|
||||||
# --- Create, save, close ---
|
# --- 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):
|
def loadFMLMapping(self):
|
||||||
metadataTag = self.metadata.metadataTag
|
metadataTag = self.metadata.metadataTag
|
||||||
fml = metadataTag.get('FML')
|
fml = metadataTag.get('FML')
|
||||||
@ -635,6 +638,7 @@ class AnvilWorldAdapter(object):
|
|||||||
newRevision = self.revisionHistory.getRevision(index)
|
newRevision = self.revisionHistory.getRevision(index)
|
||||||
changes = self.revisionHistory.getRevisionChanges(self.selectedRevision, newRevision)
|
changes = self.revisionHistory.getRevisionChanges(self.selectedRevision, newRevision)
|
||||||
self.selectedRevision = newRevision
|
self.selectedRevision = newRevision
|
||||||
|
self.loadMetadata()
|
||||||
return changes
|
return changes
|
||||||
|
|
||||||
def listRevisions(self):
|
def listRevisions(self):
|
||||||
|
@ -225,6 +225,7 @@ class WorldEditor(object):
|
|||||||
"""
|
"""
|
||||||
assert index is not None, "None is not a revision index!"
|
assert index is not None, "None is not a revision index!"
|
||||||
self.syncToDisk()
|
self.syncToDisk()
|
||||||
|
self.playerCache.clear()
|
||||||
|
|
||||||
changes = self.adapter.selectRevision(index)
|
changes = self.adapter.selectRevision(index)
|
||||||
self.currentRevision = index
|
self.currentRevision = index
|
||||||
@ -239,7 +240,6 @@ class WorldEditor(object):
|
|||||||
self._loadedChunks.pop((cx, cz, dimName), None)
|
self._loadedChunks.pop((cx, cz, dimName), None)
|
||||||
|
|
||||||
self.recentDirtyFiles.update(changes.files)
|
self.recentDirtyFiles.update(changes.files)
|
||||||
# xxx unload players, metadata!!
|
|
||||||
|
|
||||||
# --- Save ---
|
# --- Save ---
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user