| 246 | |
| 247 | |
| 248 | class ForgeInstaller(Installer): |
| 249 | downloadInfo = pyqtSignal( |
| 250 | str, float, int, bool, bool |
| 251 | ) # filename, dl_percent, speed, done, allDone |
| 252 | |
| 253 | class InstallPlan(Enum): |
| 254 | PlanA = 0 |
| 255 | PlanB = 1 |
| 256 | |
| 257 | def __init__( |
| 258 | self, |
| 259 | serverPath, |
| 260 | file, |
| 261 | isEditing: Optional[str] = "", |
| 262 | java=None, |
| 263 | installerPath=None, |
| 264 | logDecode="utf-8", |
| 265 | ): |
| 266 | super().__init__(serverPath, file, logDecode) |
| 267 | self.java = java |
| 268 | self.serverPath = serverPath |
| 269 | self.isEditing = int(isEditing) if isEditing != "" else None |
| 270 | |
| 271 | self._mcVersion = None |
| 272 | self._profile = None |
| 273 | self._forgeVersion = None |
| 274 | self._bmclapiDownloader = None |
| 275 | self._serverJarTargetPath = "" |
| 276 | self._serverJarFileName = "" |
| 277 | self._needHost = False |
| 278 | self._dlInfoMonitor = None |
| 279 | self._dlInfoQueue = None |
| 280 | |
| 281 | try: |
| 282 | self.getInstallerData( |
| 283 | osp.join(serverPath, file) if installerPath is None else installerPath |
| 284 | ) |
| 285 | except Exception: |
| 286 | raise InstallerError( |
| 287 | self.tr( |
| 288 | "无法打开forge安装器核心文件:{path}, 可能文件已损坏." # noqa: E501 |
| 289 | ).format(path=file) # noqa: E501 |
| 290 | ) |
| 291 | if self._mcVersion >= McVersion("1.17"): |
| 292 | self.installPlan = ForgeInstaller.InstallPlan.PlanB |
| 293 | elif self._mcVersion >= McVersion("1.8"): |
| 294 | self.installPlan = ForgeInstaller.InstallPlan.PlanA |
| 295 | else: |
| 296 | raise InstallerError( |
| 297 | self.tr( |
| 298 | "不支持的自动安装版本: {mcVersion}\nMCSL2 的 Forge 自动安装仅支持 Minecraft 1.8+" # noqa: E501 |
| 299 | ).format(mcVersion=self._mcVersion) # noqa: E501 |
| 300 | ) |
| 301 | |
| 302 | def getInstallerData(self, jarFile): |
| 303 | # 打开Installer压缩包 |
| 304 | # 读取install_profile.json或version.json |
| 305 | with ZipFile(jarFile, mode="r") as zipfile: |
no outgoing calls
no test coverage detected