def showWorld(self, filename): if filename == self._currentFilename: return self._currentFilename = filename self.removeWorldView() try: worldEditor = worldeditor.WorldEditor(filename, readonly=True) except Exception as e: self.errorWidget = QtGui.QWidget() setWidgetError( self.errorWidget, e, "An error occurred while reading the file %s. This file might not be a Minecraft world. If it is, please file a bug report." % filename) self.stackedWidget.addWidget(self.errorWidget) self.stackedWidget.setCurrentWidget(self.errorWidget) else: dim = worldEditor.getDimension() self.setWorldView(MinimapWorldView(dim)) self.chunkLoader = ChunkLoader(dim) self.chunkLoader.addClient(self.worldView) self.chunkLoader.chunkCompleted.connect(self.worldView.update) try: try: player = worldEditor.getPlayer() log.info("Centering on single-player player.") except (PlayerNotFound, NBTFormatError): try: center = worldEditor.getWorldMetadata().Spawn log.info("Centering on spawn position.") except AttributeError: log.info("Centering on world center") center = dim.bounds.origin + (dim.bounds.size * 0.5) else: if player.dimName == dim.dimName: center = Vector(*player.Position) self.worldView.centerOnPoint(center) else: center = dim.bounds.origin + (dim.bounds.size * 0.5) self.worldView.centerOnPoint(center) except Exception as e: log.exception("Error while centering view in world list: %s", e) log.info("Switched world view")
def worldListItemClicked(self, i): if self.selectedWorldIndex == i: return self.selectedWorldIndex = i import gc gc.collect() models = {} try: worldEditor = worldeditor.WorldEditor(self.itemWidgets[i].filename, readonly=True) except (EnvironmentError, LevelFormatError) as e: setWidgetError(self.errorWidget, e) while self.stackedWidget.count(): self.stackedWidget.removeWidget(self.stackedWidget.widget(0)) self.worldViewBox.addWidget(self.errorWidget) else: i, v, p = self.getSelectedIVP() blockModels = models.get(worldEditor.blocktypes) resLoader = i.getResourceLoader(v, p) if blockModels is None: models[worldEditor.blocktypes] = blockModels = BlockModels( worldEditor.blocktypes, resLoader) textureAtlas = TextureAtlas(worldEditor, resLoader, blockModels) dim = worldEditor.getDimension() self.setWorldView(MinimapWorldView(dim, textureAtlas)) self.chunkLoader = ChunkLoader(dim) self.chunkLoader.addClient(self.worldView) self.chunkLoader.chunkCompleted.connect(self.worldView.update) try: player = worldEditor.getPlayer() log.info("Centering on single-player player.") except PlayerNotFound: try: center = worldEditor.worldSpawnPosition() log.info("Centering on spawn position.") except AttributeError: log.info("Centering on world center") center = dim.bounds.origin + (dim.bounds.size * 0.5) else: if player.dimName == dim.dimName: center = Vector(*player.Position) self.worldView.centerOnPoint(center) else: center = dim.bounds.origin + (dim.bounds.size * 0.5) self.worldView.centerOnPoint(center) log.info("Switched world view")
def showWorld(self, filename): self.removeWorldView() try: worldEditor = worldeditor.WorldEditor(filename, readonly=True) resLoader = QtGui.qApp.getResourceLoaderForFilename(filename) blockModels = BlockModels(worldEditor.blocktypes, resLoader) textureAtlas = TextureAtlas(worldEditor, resLoader, blockModels) except (EnvironmentError, LevelFormatError, zipfile.BadZipfile) as e: self.errorWidget = QtGui.QWidget() setWidgetError(self.errorWidget, e) self.stackedWidget.addWidget(self.errorWidget) self.stackedWidget.setCurrentWidget(self.errorWidget) else: dim = worldEditor.getDimension() self.setWorldView(MinimapWorldView(dim, textureAtlas)) self.chunkLoader = ChunkLoader(dim) self.chunkLoader.addClient(self.worldView) self.chunkLoader.chunkCompleted.connect(self.worldView.update) try: try: player = worldEditor.getPlayer() log.info("Centering on single-player player.") except PlayerNotFound: try: center = worldEditor.getWorldMetadata().Spawn log.info("Centering on spawn position.") except AttributeError: log.info("Centering on world center") center = dim.bounds.origin + (dim.bounds.size * 0.5) else: if player.dimName == dim.dimName: center = Vector(*player.Position) self.worldView.centerOnPoint(center) else: center = dim.bounds.origin + (dim.bounds.size * 0.5) self.worldView.centerOnPoint(center) except Exception as e: log.exception("Error while centering view in world list: %s", e) log.info("Switched world view")