From f947379727a5572d84ba2b979ae9c1d5058b98ca Mon Sep 17 00:00:00 2001 From: Pierce Date: Thu, 26 Nov 2020 19:22:41 -0500 Subject: [PATCH] ForgeWrapper 1.4.2 --- components/fw.jar | Bin 14189 -> 0 bytes components/handler.js | 88 +++++++++++++++++++++++++++++++++++------ components/launcher.js | 10 +++-- package.json | 2 +- 4 files changed, 83 insertions(+), 17 deletions(-) delete mode 100644 components/fw.jar diff --git a/components/fw.jar b/components/fw.jar deleted file mode 100644 index 0cecc1104aeb2d24be79f43e4da83b66d7c50f37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14189 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 diff --git a/components/handler.js b/components/handler.js index c5bc44a..66f5d08 100644 --- a/components/handler.js +++ b/components/handler.js @@ -374,22 +374,86 @@ class Handler { getForgedWrapped () { return new Promise(resolve => { - const libraryDirectory = path.resolve(this.options.overrides.libraryRoot || path.join(this.options.root, 'libraries')) - const launchArgs = `"${this.options.javaPath ? this.options.javaPath : 'java'}" -jar "${path.resolve(this.options.forgeWrapper.jar)}"` + - ` --installer="${this.options.forge}" --instance="${this.options.root}" ` + - `--saveTo="${path.join(libraryDirectory, 'io', 'github', 'zekerzhayard', 'ForgeWrapper', this.options.forgeWrapper.version)}"` + const forgeWrapperAgrs = [ + `-Dforgewrapper.librariesDir=${path.resolve(this.options.overrides.libraryRoot || path.join(this.options.root, 'libraries'))}`, + `-Dforgewrapper.installer=${this.options.forge}`, + `-Dforgewrapper.minecraft=${this.options.mcPath}` + ] + this.options.customArgs + ? this.options.customArgs = this.options.customArgs.concat(forgeWrapperAgrs) + : this.options.customArgs = forgeWrapperAgrs - const fw = child.exec(launchArgs) - const forgeJson = path.join(this.options.root, 'forge', this.version.id, 'version.json') + let json = null + const versionPath = path.join(this.options.root, 'forge', `${this.version.id}`, 'version.json') + // Since we're building a proper "custom" JSON that will work nativly with MCLC, the version JSON will not + // be re-generated on the next run. + if (fs.existsSync(versionPath)) { + try { + json = JSON.parse(fs.readFileSync(versionPath)) + if (!json.forgeWrapperVersion || !(json.forgeWrapperVersion === this.fw.version)) { + this.client.emit('debug', '[MCLC]: Old ForgeWrapper has generated this version JSON, re-generating') + } else { + return resolve(json) + } + } catch (e) { + this.client.emit('debug', '[MCLC]: Failed to parse Forge version JSON, re-generating') + } + } - fw.on('close', (e) => { - if (!fs.existsSync(forgeJson)) { - this.client.emit('debug', '[MCLC]: ForgeWrapper did not produce a version file, using Vanilla') - resolve(null) - } else { - resolve(JSON.parse(fs.readFileSync(forgeJson, { encoding: 'utf8' }))) + this.client.emit('debug', '[MCLC]: Generating a proper version json, this might take a bit') + const zipFile = new Zip(this.options.forge) + json = zipFile.readAsText('version.json') + let installerJson = zipFile.readAsText('install_profile.json') + + try { + json = JSON.parse(json) + installerJson = JSON.parse(installerJson) + } catch (e) { + this.client.emit('debug', '[MCLC]: Failed to load json files for ForgeWrapper, using Vanilla instead') + return resolve(null) + } + // So we know when to re-generate the file when there's a new ForgeWrapper version. + json.forgeWrapperVersion = this.options.fw.version + // Adding the installer libraries as mavenFiles so MCLC downloads them but doesn't add them to the class paths. + json.mavenFiles + ? json.mavenFiles = json.mavenFiles.concat(installerJson.libraries) + : json.mavenFiles = installerJson.libraries + + // Modifying inital forge entry to include launcher so ForgeWrapper can work properly + json.libraries[0].name = json.libraries[0].name + ':launcher' + json.libraries[0].downloads.artifact.path = json.libraries[0].downloads.artifact.path.replace('.jar', '-launcher.jar') + json.libraries[0].downloads.artifact.url = 'https://files.minecraftforge.net/maven/' + json.libraries[0].downloads.artifact.path + // Providing a download URL to the universal jar library so it can be downloaded properly. + for (const library of json.mavenFiles) { + const lib = library.name.split(':') + if (lib[0] === 'net.minecraftforge' && lib[1].includes('forge')) { + library.downloads.artifact.url = 'https://files.minecraftforge.net/maven/' + library.downloads.artifact.path + break + } + } + + const fwName = `ForgeWrapper-${this.options.fw.version}.jar` + const fwPathArr = ['io', 'github', 'zekerzhayard', 'ForgeWrapper', this.options.fw.version] + // Adding ForgeWrapper to the libraries list so MCLC includes it in the classpaths. + json.libraries.push({ + name: fwPathArr.join(':'), + downloads: { + artifact: { + path: [...fwPathArr, fwName].join('/'), + url: `${this.options.fw.baseUrl}${this.options.fw.version}/${fwName}`, + sha1: this.options.fw.sh1, + size: this.options.fw.size + } } }) + json.mainClass = 'io.github.zekerzhayard.forgewrapper.installer.Main' + + if (!fs.existsSync(path.join(this.options.root, 'forge', this.version.id))) { + fs.mkdirSync(path.join(this.options.root, 'forge', this.version.id), { recursive: true }) + } + fs.writeFileSync(versionPath, JSON.stringify(json, null, 4)) + + return resolve(json) }) } diff --git a/components/launcher.js b/components/launcher.js index 2617241..11eb221 100644 --- a/components/launcher.js +++ b/components/launcher.js @@ -22,10 +22,11 @@ class MCLCore extends EventEmitter { : undefined } } - // ForgeWrapper fork that is maintained on a side repo (https://github.com/Pierce01/ForgeWrapper) - this.options.forgeWrapper = { - jar: path.join(__dirname, 'fw.jar'), - version: '1.4.1-mclc' + this.options.fw = { + baseUrl: 'https://github.com/ZekerZhayard/ForgeWrapper/releases/download/', + version: '1.4.2', + sh1: '79ff9c1530e8743450c5c3ebc6e07b535437aa6e', + size: 22346 } this.handler = new Handler(this) @@ -71,6 +72,7 @@ class MCLCore extends EventEmitter { const mcPath = this.options.overrides.minecraftJar || (this.options.version.custom ? path.join(this.options.root, 'versions', this.options.version.custom, `${this.options.version.custom}.jar`) : path.join(directory, `${this.options.version.number}.jar`)) + this.options.mcPath = mcPath const nativePath = await this.handler.getNatives() if (!fs.existsSync(mcPath)) { diff --git a/package.json b/package.json index b2a4124..f3f2478 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "minecraft-launcher-core", - "version": "3.15.1", + "version": "3.15.6", "description": "Lightweight module that downloads and runs Minecraft using javascript / NodeJS", "main": "index.js", "dependencies": {