├── LICENSE ├── README.md ├── mmet.py ├── mmet.ui └── ui_mmet.py /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 xxtg666 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MinecraftModpackExportTool 2 | 将你的Minecraft游戏文件夹导出成CurseForge整合包格式,可发给好友,供PCL2等启动器一键安装 3 | ## 运行方法: 4 | 1.安装PySide2库 5 | 2.运行mmet.py 6 | -------------------------------------------------------------------------------- /mmet.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | from tkinter import E 4 | from PySide2.QtWidgets import * 5 | from PySide2.QtCore import * 6 | from PySide2.QtGui import * 7 | from ui_mmet import Ui_MainWindow 8 | import json 9 | import shutil 10 | import getpass 11 | import zipfile 12 | import webbrowser as wb 13 | import traceback 14 | import pyperclip 15 | import platform 16 | 17 | 18 | def make_zip(dirpath, outFullName): 19 | zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED) 20 | for path, dirnames, filenames in os.walk(dirpath): 21 | fpath = path.replace(dirpath, '') 22 | for filename in filenames: 23 | zip.write(os.path.join(path, filename), 24 | os.path.join(fpath, filename)) 25 | zip.close() 26 | 27 | 28 | def iconFromBase64(base64): 29 | pixmap = QPixmap() 30 | pixmap.loadFromData(QByteArray.fromBase64(base64.encode())) 31 | icon = QIcon(pixmap) 32 | return icon 33 | 34 | 35 | class mmet(QMainWindow, Ui_MainWindow): 36 | def __init__(self): 37 | super().__init__() 38 | self.setupUi(self) 39 | self.on_setup() 40 | self.pb_s1.clicked.connect(self.on_pb_s1) 41 | self.pb_s2.clicked.connect(self.on_pb_s2) 42 | self.cb_s3_all.clicked.connect(self.on_cb_s3_all) 43 | self.pushButton.clicked.connect(self.on_export_clicked) 44 | self.action_MMET.triggered.connect(self.show_about) 45 | self.action_GitHub.triggered.connect(self.open_github) 46 | self.action_2.triggered.connect(self.bug_report) 47 | self.setWindowIcon(iconFromBase64("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgklEQVQ4y2NgGLTAxcXlPzomSTMI3Lhx4//BgwfBGMQGiXuaif7P8JP7T5QhEhIScAwzqDNd/b+GHPd/kr0EshnmIpCBJGsGORtkM8w7RBsC0ozsbJh3iDIA2WaYGNEGoNuMbABBL2CzGdkAEMBpAC6b0Q0h2WaSQ5tkANJItmZKAABzO4WhWjcV2gAAAABJRU5ErkJggg==")) 48 | self.show() 49 | 50 | def on_setup(self): 51 | self.groupBox_2.setEnabled(False) 52 | self.groupBox_3.setEnabled(False) 53 | self.groupBox_4.setEnabled(False) 54 | 55 | def on_pb_s1(self): 56 | self.versions_path = QFileDialog.getExistingDirectory( 57 | self, "选择 versions 文件夹") 58 | if self.versions_path[-8:-1]+self.versions_path[-1] == "versions": 59 | self.pb_s1.setText(self.versions_path) 60 | self.groupBox.setEnabled(False) 61 | self.groupBox_2.setEnabled(True) 62 | else: 63 | QMessageBox.warning(self, "错误", "选择的文件夹无效") 64 | 65 | def on_pb_s2(self): 66 | versions_list = os.listdir(self.versions_path) 67 | for i in versions_list: 68 | if not os.path.isdir(self.versions_path+os.sep+i): 69 | versions_list.remove(i) 70 | version = QInputDialog.getItem( 71 | self, "选择游戏版本", '请选择一个将要导出的游戏版本', versions_list, 0, False) 72 | self.game_version = version[0] 73 | if version[1]: 74 | self.pb_s2.setText(self.game_version) 75 | self.groupBox_2.setEnabled(False) 76 | self.groupBox_3.setEnabled(True) 77 | self.groupBox_4.setEnabled(True) 78 | 79 | def on_cb_s3_all(self): 80 | e_all = self.cb_s3_all.isChecked() 81 | if e_all: 82 | self.cb_s3_config.setEnabled(False) 83 | self.cb_s3_servers.setEnabled(False) 84 | self.cb_s3_options.setEnabled(False) 85 | self.cb_s3_resourcepacks.setEnabled(False) 86 | self.cb_s3_saves.setEnabled(False) 87 | self.cb_s3_shaderpacks.setEnabled(False) 88 | else: 89 | self.cb_s3_config.setEnabled(True) 90 | self.cb_s3_servers.setEnabled(True) 91 | self.cb_s3_options.setEnabled(True) 92 | self.cb_s3_resourcepacks.setEnabled(True) 93 | self.cb_s3_saves.setEnabled(True) 94 | self.cb_s3_shaderpacks.setEnabled(True) 95 | 96 | def on_export(self): 97 | QMessageBox.information( 98 | self, "准备导出", "点击 [OK] 以开始导出\n导出时可能会未响应,请耐心等待!") 99 | self.game_folder_path = self.versions_path+os.sep+self.game_version 100 | game_json_path = self.game_folder_path+os.sep+self.game_version+".json" 101 | PCL_ini_path = self.game_folder_path+os.sep+"PCL"+os.sep+"Setup.ini" 102 | if os.path.exists(PCL_ini_path): 103 | with open(PCL_ini_path, "r", encoding="utf-8") as f: 104 | ini = f.readlines() 105 | for i in range(len(ini)): 106 | if ini[i][:14] == "VersionFabric:": 107 | ini_fabric_line = i 108 | if ini[i][:13] == "VersionForge:": 109 | ini_forge_line = i 110 | VersionFabric = ini[ini_fabric_line].replace( 111 | "VersionFabric:", "").replace("\n", "") 112 | VersionForge = ini[ini_forge_line].replace( 113 | "VersionForge:", "").replace("\n", "") 114 | if VersionFabric != "": 115 | self.loader_version = "fabric-"+VersionFabric 116 | else: 117 | self.loader_version = "forge-"+VersionForge 118 | with open(game_json_path, "r", encoding="utf-8") as f: 119 | game_json = json.load(f) 120 | self.client_version = game_json["clientVersion"] 121 | else: 122 | try: 123 | with open(game_json_path, "r", encoding="utf-8") as f: 124 | game_json = json.load(f) 125 | self.loader_version = game_json["patches"][1]["id"] + \ 126 | "-"+game_json["patches"][1]["version"] 127 | except: 128 | self.loader_version = QInputDialog.getText( 129 | self, '输入mod加载器信息', '无法自动读取mod加载器信息
请手动输入mod加载器名称及其版本
例如: fabric-0.14.6') 130 | try: 131 | self.client_version = game_json["patches"][0]["version"] 132 | except: 133 | self.client_version = QInputDialog.getText( 134 | self, '输入游戏版本信息', '无法自动读取游戏版本信息
请手动输入游戏版本
例如: 1.16.5') 135 | # QMessageBox.information(self,"debug",f"loader_version:{self.loader_version}\nclient_version:{self.client_version}\nVersionFabric:{VersionFabric}\nVersionForge:{VersionForge}") 136 | e_config = self.cb_s3_config.isChecked() 137 | e_servers = self.cb_s3_servers.isChecked() 138 | e_options = self.cb_s3_options.isChecked() 139 | e_resourcepacks = self.cb_s3_resourcepacks.isChecked() 140 | e_saves = self.cb_s3_saves.isChecked() 141 | e_shaderpacks = self.cb_s3_shaderpacks.isChecked() 142 | e_all = self.cb_s3_all.isChecked() 143 | manifest_json = {"minecraft": {"version": self.client_version, "modLoaders": [{"id": self.loader_version, "primary": True}]}, "manifestType": "minecraftModpack", 144 | "manifestVersion": 1, "name": self.game_version, "version": "1.0.0", "author": "MinecraftModpackExportTool "+getpass.getuser(), "files": [], "overrides": "overrides"} 145 | os.mkdir("mmet_temp") 146 | json.dump(manifest_json, open("mmet_temp"+os.sep + 147 | "manifest.json", "w", encoding="utf-8")) 148 | if not e_all: 149 | os.mkdir("mmet_temp"+os.sep+"overrides") 150 | shutil.copytree(self.game_folder_path+os.sep+"mods", 151 | "mmet_temp"+os.sep+"overrides"+os.sep+"mods") 152 | if e_config: 153 | shutil.copytree(self.game_folder_path+os.sep+"config", 154 | "mmet_temp"+os.sep+"overrides"+os.sep+"config") 155 | if e_servers: 156 | shutil.copy(self.game_folder_path+os.sep+"servers.dat", 157 | "mmet_temp"+os.sep+"overrides") 158 | if e_options: 159 | shutil.copy(self.game_folder_path+os.sep+"options.txt", 160 | "mmet_temp"+os.sep+"overrides") 161 | if e_resourcepacks: 162 | shutil.copytree(self.game_folder_path+os.sep + 163 | "resourcepacks", "mmet_temp"+os.sep+"overrides"+os.sep+"resourcepacks") 164 | if e_saves: 165 | shutil.copytree(self.game_folder_path+os.sep+"saves", 166 | "mmet_temp"+os.sep+"overrides"+os.sep+"saves") 167 | if e_shaderpacks: 168 | shutil.copytree(self.game_folder_path+os.sep+"shaderpacks", 169 | "mmet_temp"+os.sep+"overrides"+os.sep+"shaderpacks") 170 | else: 171 | shutil.copytree(self.game_folder_path, "mmet_temp"+os.sep+"overrides") 172 | try: 173 | shutil.rmtree("mmet_temp"+os.sep+"overrides" +os.sep+"PCL") 174 | except: 175 | pass 176 | os.remove("mmet_temp"+os.sep+"overrides" +os.sep+self.game_version+".jar") 177 | os.remove("mmet_temp"+os.sep+"overrides" +os.sep+self.game_version+".json") 178 | if os.path.exists("mmet_temp"+os.sep+"overrides"+os.sep+"config"+os.sep+"ias.json"): 179 | r = QMessageBox.warning( 180 | self, "盗号警告", "

是否忽略ias.json?


由于你在整合包中使用了此mod:
[游戏内账号切换]InGameAccountSwitcher
你的账号登录信息会被储存在配置文件ias.json
如果你登录了正版,在整合包内保留将会导致别人登上你的账号!", QMessageBox.Yes | QMessageBox.No) 181 | if r == QMessageBox.Yes: 182 | os.remove("mmet_temp"+os.sep+"overrides" + 183 | os.sep+"config"+os.sep+"ias.json") 184 | make_zip("mmet_temp", self.game_version+".zip") 185 | shutil.rmtree("mmet_temp") 186 | QMessageBox.information( 187 | self, "导出整合包成功", "已导出整合包文件:\n"+os.path.abspath(self.game_version+".zip")) 188 | 189 | def on_export_clicked(self): 190 | try: 191 | self.on_export() 192 | except Exception as e: 193 | back = traceback.format_exc() 194 | back = back.replace("\n", "
").replace(" ", " ") 195 | r=QMessageBox.critical(self, "导出失败", back + 196 | "
你可以去此项目的 GitHub 上寻求帮助!(点击 [Yes] 复制错误信息)",QMessageBox.Yes | QMessageBox.Ok) 197 | if r==QMessageBox.Yes: 198 | pyperclip.copy(back.replace("
","\n").replace(" "," ")+f"\nclient_version: {self.client_version}\nloader_version: {self.loader_version}\ngame_folder_path: {self.game_folder_path}\nSystem: {platform.platform()}") 199 | shutil.rmtree("mmet_temp") 200 | 201 | def show_about(self): 202 | QMessageBox.about( 203 | self, "关于 MMET", "MinecraftModpackExportTool

作者: xxtg666

版本 1.0.6

") 204 | 205 | def open_github(self): 206 | wb.open("https://github.com/xxtg666/MinecraftModpackExportTool") 207 | 208 | def bug_report(self): 209 | wb.open("https://github.com/xxtg666/MinecraftModpackExportTool/issues") 210 | 211 | 212 | if __name__ == "__main__": 213 | app = QApplication(sys.argv) 214 | window = mmet() 215 | sys.exit(app.exec_()) 216 | -------------------------------------------------------------------------------- /mmet.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 339 10 | 471 11 | 12 | 13 | 14 | Minecraft整合包导出工具 15 | 16 | 17 | 18 | 19 | 20 | 21 | 第一步 22 | 23 | 24 | 25 | 26 | 27 | 选择你的 versions 文件夹(请开启版本隔离) 28 | 29 | 30 | 31 | 32 | 33 | 34 | 点击此处 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 第二步 45 | 46 | 47 | 48 | 49 | 50 | 选择你要导出的游戏版本 51 | 52 | 53 | 54 | 55 | 56 | 57 | 点击此处 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 第三步 68 | 69 | 70 | 71 | 72 | 73 | 选择附加导出设置 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | servers.dat 服务器列表 83 | 84 | 85 | 86 | 87 | 88 | 89 | saves 存档 90 | 91 | 92 | 93 | 94 | 95 | 96 | config 配置文件 97 | 98 | 99 | 100 | 101 | 102 | 103 | false 104 | 105 | 106 | mods 107 | 108 | 109 | true 110 | 111 | 112 | false 113 | 114 | 115 | 116 | 117 | 118 | 119 | shaderpacks 光影包 120 | 121 | 122 | 123 | 124 | 125 | 126 | resourcepacks 资源包 127 | 128 | 129 | 130 | 131 | 132 | 133 | options.txt 游戏设置 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | Qt::Horizontal 143 | 144 | 145 | 146 | 147 | 148 | 149 | * 附带文件夹下所有内容(特殊整合包可能需要) 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 第四步 160 | 161 | 162 | 163 | 164 | 165 | 导出! 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 0 178 | 0 179 | 339 180 | 22 181 | 182 | 183 | 184 | 185 | 帮助 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 关于 MMET 197 | 198 | 199 | 200 | 201 | GitHub 202 | 203 | 204 | 205 | 206 | Bug汇报 207 | 208 | 209 | 210 | 211 | 212 | 213 | -------------------------------------------------------------------------------- /ui_mmet.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'mmet.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 5.15.2 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide2.QtCore import * 12 | from PySide2.QtGui import * 13 | from PySide2.QtWidgets import * 14 | 15 | 16 | class Ui_MainWindow(object): 17 | def setupUi(self, MainWindow): 18 | if not MainWindow.objectName(): 19 | MainWindow.setObjectName(u"MainWindow") 20 | MainWindow.resize(339, 471) 21 | self.action_MMET = QAction(MainWindow) 22 | self.action_MMET.setObjectName(u"action_MMET") 23 | self.action_GitHub = QAction(MainWindow) 24 | self.action_GitHub.setObjectName(u"action_GitHub") 25 | self.action_2 = QAction(MainWindow) 26 | self.action_2.setObjectName(u"action_2") 27 | self.centralwidget = QWidget(MainWindow) 28 | self.centralwidget.setObjectName(u"centralwidget") 29 | self.verticalLayout_5 = QVBoxLayout(self.centralwidget) 30 | self.verticalLayout_5.setObjectName(u"verticalLayout_5") 31 | self.groupBox = QGroupBox(self.centralwidget) 32 | self.groupBox.setObjectName(u"groupBox") 33 | self.verticalLayout = QVBoxLayout(self.groupBox) 34 | self.verticalLayout.setObjectName(u"verticalLayout") 35 | self.label = QLabel(self.groupBox) 36 | self.label.setObjectName(u"label") 37 | 38 | self.verticalLayout.addWidget(self.label) 39 | 40 | self.pb_s1 = QPushButton(self.groupBox) 41 | self.pb_s1.setObjectName(u"pb_s1") 42 | 43 | self.verticalLayout.addWidget(self.pb_s1) 44 | 45 | 46 | self.verticalLayout_5.addWidget(self.groupBox) 47 | 48 | self.groupBox_2 = QGroupBox(self.centralwidget) 49 | self.groupBox_2.setObjectName(u"groupBox_2") 50 | self.verticalLayout_2 = QVBoxLayout(self.groupBox_2) 51 | self.verticalLayout_2.setObjectName(u"verticalLayout_2") 52 | self.label_2 = QLabel(self.groupBox_2) 53 | self.label_2.setObjectName(u"label_2") 54 | 55 | self.verticalLayout_2.addWidget(self.label_2) 56 | 57 | self.pb_s2 = QPushButton(self.groupBox_2) 58 | self.pb_s2.setObjectName(u"pb_s2") 59 | 60 | self.verticalLayout_2.addWidget(self.pb_s2) 61 | 62 | 63 | self.verticalLayout_5.addWidget(self.groupBox_2) 64 | 65 | self.groupBox_3 = QGroupBox(self.centralwidget) 66 | self.groupBox_3.setObjectName(u"groupBox_3") 67 | self.verticalLayout_3 = QVBoxLayout(self.groupBox_3) 68 | self.verticalLayout_3.setObjectName(u"verticalLayout_3") 69 | self.label_3 = QLabel(self.groupBox_3) 70 | self.label_3.setObjectName(u"label_3") 71 | 72 | self.verticalLayout_3.addWidget(self.label_3) 73 | 74 | self.gridLayout = QGridLayout() 75 | self.gridLayout.setObjectName(u"gridLayout") 76 | self.cb_s3_servers = QCheckBox(self.groupBox_3) 77 | self.cb_s3_servers.setObjectName(u"cb_s3_servers") 78 | 79 | self.gridLayout.addWidget(self.cb_s3_servers, 2, 0, 1, 1) 80 | 81 | self.cb_s3_saves = QCheckBox(self.groupBox_3) 82 | self.cb_s3_saves.setObjectName(u"cb_s3_saves") 83 | 84 | self.gridLayout.addWidget(self.cb_s3_saves, 1, 1, 1, 1) 85 | 86 | self.cb_s3_config = QCheckBox(self.groupBox_3) 87 | self.cb_s3_config.setObjectName(u"cb_s3_config") 88 | 89 | self.gridLayout.addWidget(self.cb_s3_config, 1, 0, 1, 1) 90 | 91 | self.cb_s3_mods = QCheckBox(self.groupBox_3) 92 | self.cb_s3_mods.setObjectName(u"cb_s3_mods") 93 | self.cb_s3_mods.setEnabled(False) 94 | self.cb_s3_mods.setChecked(True) 95 | self.cb_s3_mods.setTristate(False) 96 | 97 | self.gridLayout.addWidget(self.cb_s3_mods, 0, 0, 1, 1) 98 | 99 | self.cb_s3_shaderpacks = QCheckBox(self.groupBox_3) 100 | self.cb_s3_shaderpacks.setObjectName(u"cb_s3_shaderpacks") 101 | 102 | self.gridLayout.addWidget(self.cb_s3_shaderpacks, 2, 1, 1, 1) 103 | 104 | self.cb_s3_resourcepacks = QCheckBox(self.groupBox_3) 105 | self.cb_s3_resourcepacks.setObjectName(u"cb_s3_resourcepacks") 106 | 107 | self.gridLayout.addWidget(self.cb_s3_resourcepacks, 0, 1, 1, 1) 108 | 109 | self.cb_s3_options = QCheckBox(self.groupBox_3) 110 | self.cb_s3_options.setObjectName(u"cb_s3_options") 111 | 112 | self.gridLayout.addWidget(self.cb_s3_options, 3, 0, 1, 1) 113 | 114 | 115 | self.verticalLayout_3.addLayout(self.gridLayout) 116 | 117 | self.line = QFrame(self.groupBox_3) 118 | self.line.setObjectName(u"line") 119 | self.line.setFrameShape(QFrame.HLine) 120 | self.line.setFrameShadow(QFrame.Sunken) 121 | 122 | self.verticalLayout_3.addWidget(self.line) 123 | 124 | self.cb_s3_all = QCheckBox(self.groupBox_3) 125 | self.cb_s3_all.setObjectName(u"cb_s3_all") 126 | 127 | self.verticalLayout_3.addWidget(self.cb_s3_all) 128 | 129 | 130 | self.verticalLayout_5.addWidget(self.groupBox_3) 131 | 132 | self.groupBox_4 = QGroupBox(self.centralwidget) 133 | self.groupBox_4.setObjectName(u"groupBox_4") 134 | self.verticalLayout_4 = QVBoxLayout(self.groupBox_4) 135 | self.verticalLayout_4.setObjectName(u"verticalLayout_4") 136 | self.pushButton = QPushButton(self.groupBox_4) 137 | self.pushButton.setObjectName(u"pushButton") 138 | 139 | self.verticalLayout_4.addWidget(self.pushButton) 140 | 141 | 142 | self.verticalLayout_5.addWidget(self.groupBox_4) 143 | 144 | MainWindow.setCentralWidget(self.centralwidget) 145 | self.menuBar = QMenuBar(MainWindow) 146 | self.menuBar.setObjectName(u"menuBar") 147 | self.menuBar.setGeometry(QRect(0, 0, 339, 22)) 148 | self.menu = QMenu(self.menuBar) 149 | self.menu.setObjectName(u"menu") 150 | MainWindow.setMenuBar(self.menuBar) 151 | 152 | self.menuBar.addAction(self.menu.menuAction()) 153 | self.menu.addAction(self.action_MMET) 154 | self.menu.addAction(self.action_GitHub) 155 | self.menu.addSeparator() 156 | self.menu.addAction(self.action_2) 157 | 158 | self.retranslateUi(MainWindow) 159 | 160 | QMetaObject.connectSlotsByName(MainWindow) 161 | # setupUi 162 | 163 | def retranslateUi(self, MainWindow): 164 | MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Minecraft\u6574\u5408\u5305\u5bfc\u51fa\u5de5\u5177", None)) 165 | self.action_MMET.setText(QCoreApplication.translate("MainWindow", u"\u5173\u4e8e MMET", None)) 166 | self.action_GitHub.setText(QCoreApplication.translate("MainWindow", u"GitHub", None)) 167 | self.action_2.setText(QCoreApplication.translate("MainWindow", u"Bug\u6c47\u62a5", None)) 168 | self.groupBox.setTitle(QCoreApplication.translate("MainWindow", u"\u7b2c\u4e00\u6b65", None)) 169 | self.label.setText(QCoreApplication.translate("MainWindow", u"\u9009\u62e9\u4f60\u7684 versions \u6587\u4ef6\u5939\uff08\u8bf7\u5f00\u542f\u7248\u672c\u9694\u79bb\uff09", None)) 170 | self.pb_s1.setText(QCoreApplication.translate("MainWindow", u"\u70b9\u51fb\u6b64\u5904", None)) 171 | self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow", u"\u7b2c\u4e8c\u6b65", None)) 172 | self.label_2.setText(QCoreApplication.translate("MainWindow", u"\u9009\u62e9\u4f60\u8981\u5bfc\u51fa\u7684\u6e38\u620f\u7248\u672c", None)) 173 | self.pb_s2.setText(QCoreApplication.translate("MainWindow", u"\u70b9\u51fb\u6b64\u5904", None)) 174 | self.groupBox_3.setTitle(QCoreApplication.translate("MainWindow", u"\u7b2c\u4e09\u6b65", None)) 175 | self.label_3.setText(QCoreApplication.translate("MainWindow", u"\u9009\u62e9\u9644\u52a0\u5bfc\u51fa\u8bbe\u7f6e", None)) 176 | self.cb_s3_servers.setText(QCoreApplication.translate("MainWindow", u"servers.dat \u670d\u52a1\u5668\u5217\u8868", None)) 177 | self.cb_s3_saves.setText(QCoreApplication.translate("MainWindow", u"saves \u5b58\u6863", None)) 178 | self.cb_s3_config.setText(QCoreApplication.translate("MainWindow", u"config \u914d\u7f6e\u6587\u4ef6", None)) 179 | self.cb_s3_mods.setText(QCoreApplication.translate("MainWindow", u"mods", None)) 180 | self.cb_s3_shaderpacks.setText(QCoreApplication.translate("MainWindow", u"shaderpacks \u5149\u5f71\u5305", None)) 181 | self.cb_s3_resourcepacks.setText(QCoreApplication.translate("MainWindow", u"resourcepacks \u8d44\u6e90\u5305", None)) 182 | self.cb_s3_options.setText(QCoreApplication.translate("MainWindow", u"options.txt \u6e38\u620f\u8bbe\u7f6e", None)) 183 | self.cb_s3_all.setText(QCoreApplication.translate("MainWindow", u"* \u9644\u5e26\u6587\u4ef6\u5939\u4e0b\u6240\u6709\u5185\u5bb9\uff08\u7279\u6b8a\u6574\u5408\u5305\u53ef\u80fd\u9700\u8981\uff09", None)) 184 | self.groupBox_4.setTitle(QCoreApplication.translate("MainWindow", u"\u7b2c\u56db\u6b65", None)) 185 | self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u5bfc\u51fa\uff01", None)) 186 | self.menu.setTitle(QCoreApplication.translate("MainWindow", u"\u5e2e\u52a9", None)) 187 | # retranslateUi 188 | 189 | --------------------------------------------------------------------------------