diff --git a/.gitignore b/.gitignore index 5cf1396..a9c6d17 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ server/builds server/packs server/data jre -.vscode \ No newline at end of file +.vscode +launcher/dependency-reduced-pom.xml diff --git a/launcher/pom.xml b/launcher/pom.xml index 54cb25c..c55decf 100644 --- a/launcher/pom.xml +++ b/launcher/pom.xml @@ -17,49 +17,36 @@ - org.apache.httpcomponents httpclient 4.5.14 - - com.fasterxml.jackson.core jackson-databind 2.15.2 - - com.google.code.gson gson 2.10.1 - - org.json json 20231013 - - org.fusesource.jansi jansi 2.4.1 - - me.tongfei progressbar 0.9.5 - - commons-io commons-io @@ -69,7 +56,7 @@ - + org.apache.maven.plugins maven-shade-plugin @@ -85,6 +72,11 @@ ${mainClass} + + ${project.version} + ZernMC Launcher + SashegDev + @@ -126,7 +118,7 @@ - + org.apache.maven.plugins maven-antrun-plugin diff --git a/launcher/src/main/java/me/sashegdev/zernmc/launcher/minecraft/MinecraftLib.java b/launcher/src/main/java/me/sashegdev/zernmc/launcher/minecraft/MinecraftLib.java index fdb9b12..861a702 100644 --- a/launcher/src/main/java/me/sashegdev/zernmc/launcher/minecraft/MinecraftLib.java +++ b/launcher/src/main/java/me/sashegdev/zernmc/launcher/minecraft/MinecraftLib.java @@ -10,9 +10,6 @@ import me.sashegdev.zernmc.launcher.utils.ZAnsi; import java.util.List; -/** - * Главный фасад MinecraftLib — точка входа для всей логики установки и запуска - */ public class MinecraftLib { private final Instance instance; @@ -21,11 +18,10 @@ public class MinecraftLib { this.instance = instance; } - // ====================== УСТАНОВКА ====================== + //Очистка - /** - * Установить vanilla версию Minecraft - */ + + //Установка public boolean installMinecraft(String versionId) throws Exception { VersionInstaller installer = new VersionInstaller(instance.getPath()); boolean success = installer.install(versionId); @@ -42,9 +38,6 @@ public class MinecraftLib { return installer.install(minecraftVersion, forgeVersion); } - /** - * Установить Fabric для выбранной версии Minecraft - */ public boolean installFabric(String minecraftVersion, String loaderVersion) throws Exception { FabricInstaller installer = new FabricInstaller(instance); boolean success = installer.install(minecraftVersion, loaderVersion); @@ -90,23 +83,7 @@ public class MinecraftLib { return true; } - // ====================== ЗАПУСК ====================== - - /** - * Сгенерировать команду запуска (пока заглушка) - */ - public List buildLaunchCommand(LaunchOptions options) throws Exception { - System.out.println(ZAnsi.cyan("Генерация команды запуска для " + instance.getName() + "...")); - - // TODO: Полная реализация LaunchCommandBuilder (перенос из MLL) - - System.out.println(ZAnsi.yellow("Генерация команды запуска пока в разработке")); - return List.of("java", "-jar", "placeholder.jar", "--version", instance.getName()); - } - - /** - * Запустить сборку - */ + //Запуск public void launch(LaunchOptions options) throws Exception { System.out.println(ZAnsi.brightGreen("Запуск сборки: " + instance.getName())); @@ -118,7 +95,6 @@ public class MinecraftLib { System.out.println(" " + arg); } - // === Реальный запуск === ProcessBuilder pb = new ProcessBuilder(command); pb.directory(instance.getPath().toFile()); @@ -138,8 +114,6 @@ public class MinecraftLib { System.out.println(ZAnsi.yellow("\nMinecraft завершился с кодом: " + exitCode)); } - // ====================== ГЕТТЕРЫ ====================== - public Instance getInstance() { return instance; } diff --git a/launcher/src/main/java/me/sashegdev/zernmc/launcher/utils/Version.java b/launcher/src/main/java/me/sashegdev/zernmc/launcher/utils/Version.java index ffb4534..e72abab 100644 --- a/launcher/src/main/java/me/sashegdev/zernmc/launcher/utils/Version.java +++ b/launcher/src/main/java/me/sashegdev/zernmc/launcher/utils/Version.java @@ -1,33 +1,52 @@ package me.sashegdev.zernmc.launcher.utils; +import java.util.jar.Attributes; +import java.util.jar.Manifest; + public class Version { public static String getCurrentVersion() { - String version = Version.class.getPackage().getImplementationVersion(); - return (version != null && !version.isBlank()) ? version : "1.0.0"; + try { + // Способ 1: Из манифеста (самый правильный) + Manifest manifest = new Manifest( + Version.class.getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF") + ); + + String version = manifest.getMainAttributes().getValue(Attributes.Name.IMPLEMENTATION_VERSION); + if (version != null && !version.isBlank()) { + return version; + } + + // Способ 2: Из Package (запасной) + version = Version.class.getPackage().getImplementationVersion(); + if (version != null && !version.isBlank()) { + return version; + } + + } catch (Exception ignored) { + // если не получилось прочитать манифест — идём дальше + } + + // Финальный fallback + return "1.0.0"; } - /** - * Универсальное сравнение версий - * Возвращает true, если serverVersion новее currentVersion - */ public static boolean isNewer(String current, String server) { if (current == null || server == null) return false; - // Убираем -SNAPSHOT для сравнения current = current.replace("-SNAPSHOT", "").trim(); server = server.replace("-SNAPSHOT", "").trim(); if (current.equals(server)) return false; - String[] currentParts = current.split("\\."); - String[] serverParts = server.split("\\."); + String[] cParts = current.split("\\."); + String[] sParts = server.split("\\."); - int maxLength = Math.max(currentParts.length, serverParts.length); + int max = Math.max(cParts.length, sParts.length); - for (int i = 0; i < maxLength; i++) { - int c = i < currentParts.length ? Integer.parseInt(currentParts[i]) : 0; - int s = i < serverParts.length ? Integer.parseInt(serverParts[i]) : 0; + for (int i = 0; i < max; i++) { + int c = i < cParts.length ? Integer.parseInt(cParts[i]) : 0; + int s = i < sParts.length ? Integer.parseInt(sParts[i]) : 0; if (s > c) return true; if (s < c) return false;