From 76f3d7b588ea2a08549505e1c4a50fe0eb362bcc Mon Sep 17 00:00:00 2001 From: HerozDotExe Date: Thu, 8 Jan 2026 11:05:41 +0100 Subject: [PATCH] feat: only download java if not present --- src/instance/instance.ts | 57 ++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/src/instance/instance.ts b/src/instance/instance.ts index 087aa4e..299d267 100644 --- a/src/instance/instance.ts +++ b/src/instance/instance.ts @@ -14,6 +14,7 @@ import { installForge } from "../core/modloaders"; import { getJavaExecutable } from "../core/java"; import { readJson } from "../utils/fs"; import { mergeManifests } from "../core/mergeManifests"; +import { exec } from "node:child_process"; function getJavaOs() { switch (os()) { @@ -58,6 +59,20 @@ interface InstanceEvents { ]; } +function checkJava(javaLocation: string) { + const javaExe = getJavaExecutable(javaLocation); + + return new Promise((res) => { + exec(`${javaExe} -version`, (err) => { + if (err) { + res(false); + } else { + res(true); + } + }); + }); +} + export class Instance extends EventEmitter { version: string; modloader?: Modloader; @@ -117,7 +132,7 @@ export class Instance extends EventEmitter { this.args.game = game || ""; } - async initialize() { + private async initialize() { this.versionLocation = path.join(this.paths.versions, this.version); this.instanceLocation = path.join(this.paths.instances, this.version); @@ -209,26 +224,28 @@ export class Instance extends EventEmitter { error.throw(); } - try { - const javaDownloader = await core.java.JavaDownloader( - getJavaOs(), - this.versionManifest.javaVersion.component, - this.paths.javaRoot, - ); - javaDownloader.on("completed", () => { - this.emit( - "progress", - "java", - javaDownloader.done, - javaDownloader.total, - javaDownloader.doneSize, - javaDownloader.totalSize, + if (!await checkJava(this.javaLocation)) { + try { + const javaDownloader = await core.java.JavaDownloader( + getJavaOs(), + this.versionManifest.javaVersion.component, + this.paths.javaRoot, ); - }); - await javaDownloader.run(); - } catch (original) { - const error = new InstallError("java", original); - error.throw(); + javaDownloader.on("completed", () => { + this.emit( + "progress", + "java", + javaDownloader.done, + javaDownloader.total, + javaDownloader.doneSize, + javaDownloader.totalSize, + ); + }); + await javaDownloader.run(); + } catch (original) { + const error = new InstallError("java", original); + error.throw(); + } } if (this.modloader) {