def _updateVersionsAndResourcePacks(self): self.minecraftVersionBox.clear() self.resourcePackBox.clear() self.resourcePackBox.addItem(self.tr("(No resource pack)")) self.savesFolderComboBox.clear() if self.minecraftInstallBox.count(): install = minecraftinstall.GetInstalls().getInstall( self.minecraftInstallBox.currentIndex()) for version in sorted(install.versions, reverse=True): self.minecraftVersionBox.addItem(version) for resourcePack in sorted(install.resourcePacks): self.resourcePackBox.addItem(resourcePack) for filename in install.getSaveDirs(): self.savesFolderComboBox.addItem( os.path.basename(os.path.dirname(filename)), (filename, None)) for index, instance in enumerate( minecraftinstall.GetInstalls().instances): # xxx instanceID? self.savesFolderComboBox.addItem(instance.name, (instance.saveFileDir, index))
def _updateInstalls(self): for install in minecraftinstall.GetInstalls().installs: self.minecraftInstallBox.addItem(install.name) self.minecraftInstallBox.setCurrentIndex( minecraftinstall.GetInstalls().selectedInstallIndex()) self._updateVersionsAndResourcePacks()
def getSelectedResourceLoader(self): i = minecraftinstall.currentInstallOption.value() if i == -1: return minecraftinstall.GetInstalls().getDefaultResourceLoader() install = minecraftinstall.GetInstalls().getInstall(i) v = minecraftinstall.currentVersionOption.value() if not v: v = list(install.versions)[0] p = minecraftinstall.currentResourcePackOption.value() or None return install.getResourceLoader(v, p)
def startup(self): minecraftinstall.GetInstalls().ensureValidInstall() log.info("Finding plugins") if getattr(sys, 'frozen', False): # frozen - load from app dir pluginsDir = getUserPluginsDirectory() plugins.findNewPluginsInDir(pluginsDir) else: # not frozen - load from src/plugins # from editorapp.py, ../../plugins devPluginsDir = os.path.join( os.path.dirname(os.path.dirname(__file__)), "plugins") plugins.findNewPluginsInDir(devPluginsDir) for pluginRef in plugins.getAllPlugins(): if pluginRef.enabled: if not pluginRef.load(): showPluginLoadError(pluginRef) log.info("Opening worlds from command line.") if len(self.commandLineWorlds): for filename in self.commandLineWorlds: self.loadFile(filename, self.args.view) else: self.showWorldList() if len(self.sessions) and self.args.eval: session = self.sessions[-1] eval_globals = {"session": session, "self": self} exec(self.args.eval, eval_globals)
def getSelectedIVP(self): i = self.minecraftInstallBox.currentIndex() install = minecraftinstall.GetInstalls().getInstall(i) v = self.minecraftVersionBox.currentText() if self.resourcePackBox.currentIndex() > 0: p = self.resourcePackBox.currentText() else: p = None return install, v, p
def _updateInstalls(self): self.minecraftInstallBox.clear() for install in minecraftinstall.GetInstalls().installs: self.minecraftInstallBox.addItem(install.name, install.path) for saveDir in install.getSaveDirs(): self.savesFolderComboBox.addItem( install.name + os.sep + os.path.basename(saveDir), saveDir) for instance in minecraftinstall.GetInstalls().instances: saveDir = instance.saveFileDir self.savesFolderComboBox.addItem( instance.name + os.sep + os.path.basename(saveDir), saveDir) path = minecraftinstall.GetInstalls().selectedInstallPath() index = self.minecraftInstallBox.findData(path) self.minecraftInstallBox.setCurrentIndex(index) self._updateVersionsAndResourcePacks()
def getResourceLoaderForFilename(self, filename): # Is this world inside a MultiMC instance? filename = os.path.normpath(filename) installs = minecraftinstall.GetInstalls() for instance in installs.instances: savesFolder = os.path.normpath(instance.saveFileDir) if filename.startswith(savesFolder): return instance.getResourceLoader() # Nope. Use the version and respack chosen in the world list. # ... should search for installs matching this one, but vanilla installs are still multi-version... return self.getSelectedResourceLoader()
def _updateVersionsAndResourcePacks(self): self.minecraftVersionBox.clear() self.resourcePackBox.clear() self.resourcePackBox.addItem(self.tr("(No resource pack)")) path = minecraftinstall.currentInstallOption.value() install = minecraftinstall.GetInstalls().getInstall(path) if install: for version in sorted(install.versions, reverse=True): self.minecraftVersionBox.addItem(version) for resourcePack in sorted(install.resourcePacks): self.resourcePackBox.addItem(resourcePack)
def main(): filename = "C:\Users\Rio\AppData\Roaming\.minecraft\saves\New World1_8" worldEditor = WorldEditor(filename, readonly=True) dim = worldEditor.getDimension() positions = list(dim.chunkPositions()) installs = minecraftinstall.GetInstalls() install = installs.getDefaultInstall() loader = install.getResourceLoader(install.findVersion1_8(), None) def loadModels(): o.models = BlockModels(worldEditor.blocktypes, loader) def loadTextures(): o.textureAtlas = TextureAtlas(worldEditor, loader, o.models, overrideMaxSize=2048) o.textureAtlas.load() def cookQuads(): o.models.cookQuads(o.textureAtlas) def buildMeshes(): o.worldScene = WorldScene(dim, o.textureAtlas) worker = o.worldScene.workOnChunk(dim.getChunk(*positions[0])) for i in worker: pass print("loadModels x1 in %0.2fms" % (timeit.timeit(loadModels, number=1) * 1000)) print("loadTextures x1 in %0.2fms" % (timeit.timeit(loadTextures, number=1) * 1000)) print("cookQuads x1 in %0.2fms" % (timeit.timeit(cookQuads, number=1) * 1000)) print("buildMeshes x1 in %0.2fms" % (timeit.timeit(buildMeshes, number=1) * 1000))
def __init__(self, argv): super(MCEditApp, self).__init__(argv) MCEditApp.app = self minecraftinstall.GetInstalls().ensureValidInstall() self.ensureSingle() self.commandLineWorlds = [] self.parseArgs(argv) log.warn("UserFilesDirectory: %s", getUserFilesDirectory()) # --- Necessities --- translator = QtCore.QTranslator() translator.load(resourcePath('mcedit2/i18n/en_US.ts')) self.installTranslator(translator) log.info("Loaded translator.") self.setOrganizationName("MCEdit") self.setOrganizationDomain("mcedit.net") self.setApplicationName("MCEdit") self.setWindowIcon( QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/mcediticon.png"))) styleSheet = file(resourcePath("mcedit2/styles/mcedit2.qcss")).read() self.setStyleSheet(styleSheet) log.info("Loaded stylesheet.") # --- Main Window --- self.mainWindow = mainWindow = MCEditMainWindow() self.undoGroup = QtGui.QUndoGroup() self.tabWidget = self.mainWindow.tabWidget self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested) self.tabWidget.currentChanged.connect(self.tabChanged) log.info("Loaded main window.") # --- OpenGL --- setDefaultFormat() # --- Sessions --- self._currentSession = None self.sessions = [] self.sessionDockWidgets = [] self.sessionChanged.connect(self.sessionDidChange) # --- Panel Widgets --- self.undoView = QtGui.QUndoView(self.undoGroup) self.undoDockWidget = QtGui.QDockWidget("History", mainWindow, objectName="HistoryWidget") self.undoDockWidget.setWidget(self.undoView) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.undoDockWidget) mainWindow.panelsToolBar.addAction( self.undoDockWidget.toggleViewAction()) self.undoDockWidget.close() self.logViewWidget = LogViewFrame(mainWindow) self.logViewDockWidget = QtGui.QDockWidget("Error Log", mainWindow, objectName="ErrorsWidget") self.logViewDockWidget.setWidget(self.logViewWidget) mainWindow.addDockWidget(Qt.BottomDockWidgetArea, self.logViewDockWidget) mainWindow.panelsToolBar.addAction( self.logViewDockWidget.toggleViewAction()) self.logViewDockWidget.close() self.libraryView = LibraryWidget() self.libraryDockWidget = QtGui.QDockWidget("Library", mainWindow, objectName="LibraryWidget") self.libraryDockWidget.setWidget(self.libraryView) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.libraryDockWidget) mainWindow.panelsToolBar.addAction( self.libraryDockWidget.toggleViewAction()) self.libraryDockWidget.close() self.libraryView.doubleClicked.connect(self.libraryItemDoubleClicked) self.globalPanels = [ self.undoDockWidget, self.logViewDockWidget, self.libraryDockWidget ] log.info("Loaded panels.") # --- Debug Widgets --- self.debugMenu = self.createDebugMenu() self.debugObjectInspector = ObjectInspector(mainWindow) self.inspectorDockWidget = QtGui.QDockWidget( "Inspector", mainWindow, objectName="InspectorWidget") self.inspectorDockWidget.setWidget(self.debugObjectInspector) self.debugMenu.addAction(self.inspectorDockWidget.toggleViewAction()) self.inspectorDockWidget.close() self.profileView = ProfilerWidget() self.profileDockWidget = QtGui.QDockWidget("Profiler", mainWindow, objectName="ProfilerWidget") self.profileDockWidget.setWidget(self.profileView) self.debugMenu.addAction(self.profileDockWidget.toggleViewAction()) self.profileDockWidget.close() self.textureAtlasView = QtGui.QLabel() self.textureAtlasView.setScaledContents(True) self.textureAtlasDockWidget = QtGui.QDockWidget( "Texture Atlas", mainWindow, objectName="TextureAtlasWidget") self.textureAtlasArea = QtGui.QScrollArea() self.textureAtlasArea.setWidget(self.textureAtlasView) self.textureAtlasDockWidget.setWidget(self.textureAtlasArea) self.debugMenu.addAction( self.textureAtlasDockWidget.toggleViewAction()) self.textureAtlasDockWidget.close() infoTabs = QtGui.QTabWidget() self.cursorInfo = WorldCursorInfo() infoTabs.addTab(self.cursorInfo, "Cursor") self.viewInfo = WorldViewInfo() infoTabs.addTab(self.viewInfo, "View") self.loaderInfo = ChunkLoaderInfo() infoTabs.addTab(self.loaderInfo, "Loader") self.infoDockWidget = QtGui.QDockWidget("Debug Info", mainWindow, objectName="DebugInfo") self.infoDockWidget.setWidget(infoTabs) self.infoDockWidget.close() log.info("Loaded debug widgets.") # --- Menu Actions --- # -- MCEdit menu -- mainWindow.actionNew_World.triggered.connect(self.createNewWorld) mainWindow.actionNew_World.setShortcut(QtGui.QKeySequence.New) mainWindow.actionOpen_World.triggered.connect(self.chooseOpenWorld) mainWindow.actionOpen_World.setShortcut(QtGui.QKeySequence.Open) mainWindow.actionShow_World_List.triggered.connect(self.showWorldList) mainWindow.actionShow_World_List.setShortcut( QtGui.QKeySequence("Ctrl+L")) mainWindow.actionSave_World.triggered.connect(self.saveCurrentWorld) mainWindow.actionSave_World.setShortcut(QtGui.QKeySequence.Save) mainWindow.actionSave_World_As.triggered.connect( self.saveCurrentWorldAs) mainWindow.actionSave_World_As.setShortcut(QtGui.QKeySequence.SaveAs) mainWindow.actionClose_World.triggered.connect(self.closeCurrentTab) mainWindow.actionClose_World.setShortcut(QtGui.QKeySequence.Close) mainWindow.actionExit_MCEdit.triggered.connect(self.exitEditor) mainWindow.actionExit_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Help menu -- mainWindow.actionAbout_MCEdit.triggered.connect(self.showAbout) mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Window Menu -- mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.logViewDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.libraryDockWidget.toggleViewAction()) # -- Options Menu -- mainWindow.actionEnable_Lighting_Updates.setChecked( EnableLightingSetting.value()) mainWindow.actionEnable_Lighting_Updates.toggled.connect( EnableLightingSetting.setValue) EnableLightingSetting.valueChanged.connect(self.enableLightingChanged) self.enableLightingChanged(EnableLightingSetting.value()) mainWindow.actionPreferences.triggered.connect(self.showPrefsDialog) mainWindow.actionConfigure_Blocks_Items.triggered.connect( self.showConfigureBlocksDialog) mainWindow.actionPlugins.triggered.connect(self.showPluginsDialog) mainWindow.actionEnable_Developer_Mode.setChecked( DevModeSetting.value()) mainWindow.actionEnable_Developer_Mode.toggled.connect( DevModeSetting.setValue) DevModeSetting.valueChanged.connect(self.toggleDeveloperMode) self.toggleDeveloperMode(DevModeSetting.value()) log.info("Loaded menus.") # --- World List --- self.worldList = WorldListWidget(mainWindow) self.worldList.editWorldClicked.connect(self.editWorldFromList) self.worldList.viewWorldClicked.connect(self.viewWorldFromList) self.worldList.backupWorldClicked.connect(self.backupWorldFromList) self.worldList.repairWorldClicked.connect(self.repairWorldFromList) log.info("Loaded world list.") # --- Status Bar --- self.positionLabel = QtGui.QLabel("xx, yy, zz", minimumWidth=100) self.biomeLabel = QtGui.QLabel("Nowhere", minimumWidth=100) self.blocktypeLabel = QtGui.QLabel("(-1:-1)minecraft:rocktonium", minimumWidth=250) self.blockNameLabel = QtGui.QLabel("rocktonium", minimumWidth=150) self.cpsLabel = QtGui.QLabel("-1 cps", minimumWidth=65) self.fpsLabel = QtGui.QLabel("-1 fps", minimumWidth=65) statusBar = mainWindow.statusBar() statusBar.addPermanentWidget(self.positionLabel) statusBar.addPermanentWidget(self.biomeLabel) statusBar.addPermanentWidget(self.blocktypeLabel) statusBar.addPermanentWidget(self.blockNameLabel) statusBar.addPermanentWidget(self.cpsLabel) statusBar.addPermanentWidget(self.fpsLabel) log.info("Loaded status bar.") # --- Load settings --- mainWindow.loadSettings() self.updateRecentFilesMenu() log.info("Loaded settings.") # --- App Dialogs --- self.prefsDialog = prefsdialog.PrefsDialog(None) self.configureBlocksDialog = configureblocksdialog.ConfigureBlocksDialog( None) self.configureBlocksDialog.finished.connect( self.configureBlocksFinished) # Qt weirdness - initializing QDialog with parent puts the dialog at 0,0 instead of # centering it on the parent. Have to set the parent explicitly and put the Qt.Dialog flag back on # since changing the parent resets the window flags... self.prefsDialog.setParent(mainWindow) self.prefsDialog.setWindowFlags(Qt.Dialog) self.configureBlocksDialog.setParent(mainWindow) self.configureBlocksDialog.setWindowFlags(Qt.Dialog) self.pluginsDialog = PluginsDialog() self.pluginsDialog.setParent(mainWindow) self.pluginsDialog.setWindowFlags(Qt.Dialog) log.info("Loaded app dialogs.") # --- Loader timer --- self.loadTimer = timer = LoaderTimer(self) timer.setInterval(0) timer.timeout.connect(self.loadTimerFired) timer.start() log.info("Loading timer started") mainWindow.showMaximized() QtCore.QTimer.singleShot(0, self.didFinishLaunching)
def __init__(self, argv, DEBUG=False): super(MCEditApp, self).__init__(argv) self.DEBUG = DEBUG MCEditApp.app = self minecraftinstall.GetInstalls().ensureValidInstall() self.ensureSingle() self.commandLineWorlds = [] self.parseArgs(argv) log.warn("UserFilesDirectory: %s", getUserFilesDirectory()) # --- Necessities --- translator = QtCore.QTranslator() translator.load(resourcePath('mcedit2/i18n/en_US.ts')) self.installTranslator(translator) self.setOrganizationName("MCEdit") self.setOrganizationDomain("mcedit.net") self.setApplicationName("MCEdit") self.setWindowIcon( QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/mcediticon.png"))) styleSheet = file(resourcePath("mcedit2/styles/mcedit2.qcss")).read() self.setStyleSheet(styleSheet) # --- Main Window --- self.mainWindow = mainWindow = MCEditMainWindow() self.undoGroup = QtGui.QUndoGroup() self.tabWidget = self.mainWindow.tabWidget self.tabWidget.tabCloseRequested.connect(self.tabCloseRequested) self.tabWidget.currentChanged.connect(self.tabChanged) # --- Sessions --- self._currentSession = None self.sessions = [] self.sessionDockWidgets = [] self.sessionChanged.connect(self.sessionDidChange) # --- Panel Widgets --- self.undoView = QtGui.QUndoView(self.undoGroup) self.undoDockWidget = QtGui.QDockWidget("History", mainWindow, objectName="HistoryWidget") self.undoDockWidget.setWidget(self.undoView) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.undoDockWidget) mainWindow.panelsToolBar.addAction( self.undoDockWidget.toggleViewAction()) self.undoDockWidget.close() self.logViewWidget = LogViewFrame(mainWindow) self.logViewDockWidget = QtGui.QDockWidget("Error Log", mainWindow, objectName="ErrorsWidget") self.logViewDockWidget.setWidget(self.logViewWidget) mainWindow.addDockWidget(Qt.BottomDockWidgetArea, self.logViewDockWidget) mainWindow.panelsToolBar.addAction( self.logViewDockWidget.toggleViewAction()) self.logViewDockWidget.close() self.libraryView = LibraryWidget() self.libraryDockWidget = QtGui.QDockWidget("Library", mainWindow, objectName="LibraryWidget") self.libraryDockWidget.setWidget(self.libraryView) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.libraryDockWidget) mainWindow.panelsToolBar.addAction( self.libraryDockWidget.toggleViewAction()) self.libraryDockWidget.close() self.libraryView.doubleClicked.connect(self.libraryItemDoubleClicked) self.globalPanels = [ self.undoDockWidget, self.logViewDockWidget, self.libraryDockWidget ] # --- Debug Widgets --- if DEBUG: debugMenu = self.createDebugMenu() self.debugObjectInspector = ObjectInspector(mainWindow) self.inspectorDockWidget = QtGui.QDockWidget( "Inspector", mainWindow, objectName="InspectorWidget") self.inspectorDockWidget.setWidget(self.debugObjectInspector) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.inspectorDockWidget) debugMenu.addAction(self.inspectorDockWidget.toggleViewAction()) self.inspectorDockWidget.close() self.profileView = ProfilerWidget() profileDockWidget = QtGui.QDockWidget("Profiler", mainWindow, objectName="ProfilerWidget") profileDockWidget.setWidget(self.profileView) mainWindow.addDockWidget(Qt.RightDockWidgetArea, profileDockWidget) debugMenu.addAction(profileDockWidget.toggleViewAction()) profileDockWidget.close() self.textureAtlasView = QtGui.QLabel() self.textureAtlasView.setScaledContents(True) self.textureAtlasDockWidget = QtGui.QDockWidget( "Texture Atlas", mainWindow, objectName="TextureAtlasWidget") self.textureAtlasArea = QtGui.QScrollArea() self.textureAtlasArea.setWidget(self.textureAtlasView) self.textureAtlasDockWidget.setWidget(self.textureAtlasArea) mainWindow.addDockWidget(Qt.RightDockWidgetArea, self.textureAtlasDockWidget) debugMenu.addAction(self.textureAtlasDockWidget.toggleViewAction()) self.textureAtlasDockWidget.close() infoTabs = QtGui.QTabWidget() self.cursorInfo = WorldCursorInfo() infoTabs.addTab(self.cursorInfo, "Cursor") self.viewInfo = WorldViewInfo() infoTabs.addTab(self.viewInfo, "View") self.loaderInfo = ChunkLoaderInfo() infoTabs.addTab(self.loaderInfo, "Loader") infoDockWidget = QtGui.QDockWidget("Debug Info", mainWindow, objectName="DebugInfo") infoDockWidget.setWidget(infoTabs) mainWindow.addDockWidget(Qt.BottomDockWidgetArea, infoDockWidget) mainWindow.tabifyDockWidget(infoDockWidget, self.logViewDockWidget) self.globalPanels.append(infoDockWidget) mainWindow.panelsToolBar.addAction( infoDockWidget.toggleViewAction()) infoDockWidget.close() # --- Menu Actions --- # -- MCEdit menu -- mainWindow.actionNew_World.triggered.connect(self.createNewWorld) mainWindow.actionNew_World.setShortcut(QtGui.QKeySequence.New) mainWindow.actionOpen_World.triggered.connect(self.chooseOpenWorld) mainWindow.actionOpen_World.setShortcut(QtGui.QKeySequence.Open) mainWindow.actionShow_World_List.triggered.connect(self.showWorldList) mainWindow.actionShow_World_List.setShortcut( QtGui.QKeySequence("Ctrl+L")) mainWindow.actionSave_World.triggered.connect(self.saveCurrentWorld) mainWindow.actionSave_World.setShortcut(QtGui.QKeySequence.Save) mainWindow.actionSave_World_As.triggered.connect( self.saveCurrentWorldAs) mainWindow.actionSave_World_As.setShortcut(QtGui.QKeySequence.SaveAs) mainWindow.actionClose_World.triggered.connect(self.closeCurrentTab) mainWindow.actionClose_World.setShortcut(QtGui.QKeySequence.Close) mainWindow.actionExit_MCEdit.triggered.connect(self.exitEditor) mainWindow.actionExit_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Help menu -- mainWindow.actionAbout_MCEdit.triggered.connect(self.showAbout) mainWindow.actionAbout_MCEdit.setShortcut(QtGui.QKeySequence.Quit) # -- Window Menu -- mainWindow.menuWindow.addAction(self.undoDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.logViewDockWidget.toggleViewAction()) mainWindow.menuWindow.addAction( self.libraryDockWidget.toggleViewAction()) # --- World List --- self.worldList = WorldListWidget(mainWindow) self.worldList.editWorldClicked.connect(self.editWorldFromList) self.worldList.viewWorldClicked.connect(self.viewWorldFromList) self.worldList.backupWorldClicked.connect(self.backupWorldFromList) self.worldList.repairWorldClicked.connect(self.repairWorldFromList) # --- Status Bar --- self.positionLabel = QtGui.QLabel("xx, yy, zz", minimumWidth=100) self.blocktypeLabel = QtGui.QLabel("(-1:-1)minecraft:rocktonium", minimumWidth=250) self.blockNameLabel = QtGui.QLabel("rocktonium", minimumWidth=150) self.cpsLabel = QtGui.QLabel("-1 cps", minimumWidth=65) self.fpsLabel = QtGui.QLabel("-1 fps", minimumWidth=65) statusBar = mainWindow.statusBar() statusBar.addPermanentWidget(self.positionLabel) statusBar.addPermanentWidget(self.blocktypeLabel) statusBar.addPermanentWidget(self.blockNameLabel) statusBar.addPermanentWidget(self.cpsLabel) statusBar.addPermanentWidget(self.fpsLabel) # --- Load settings --- mainWindow.loadSettings() self.updateRecentFilesMenu() self.loadTimer = timer = LoaderTimer(self) timer.setInterval(0) timer.timeout.connect(self.loadTimerFired) timer.start() log.info("Loading timer started") mainWindow.showMaximized() QtCore.QTimer.singleShot(0, self.didFinishLaunching)