diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 00c8687fa..813b58d39 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -6,26 +6,28 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: submodules: recursive - name: Cache Gradle - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.gradle/caches key: gravit-${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}-launcher - name: Set up JDK 21 - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: 21 + distribution: temurin - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew build + - name: Generate and submit dependency graph uses: gradle/actions/dependency-submission@417ae3ccd767c252f5661f1ace9f835f9654f2b5 @@ -42,7 +44,7 @@ jobs: cp modules/*_lmodule/build/libs/*.jar artifacts/modules || true - name: Upload artifacts - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: Launcher path: artifacts @@ -63,7 +65,7 @@ jobs: - name: Create release id: create_release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 if: startsWith(github.event.ref, 'refs/tags') env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/LaunchServer/build.gradle b/LaunchServer/build.gradle index fbf36cdc3..303c086fe 100644 --- a/LaunchServer/build.gradle +++ b/LaunchServer/build.gradle @@ -61,7 +61,6 @@ tasks.register('cleanjar', Jar) { dependsOn jar archiveClassifier.set('clean') manifest.attributes("Main-Class": mainClassName, - "Premain-Class": mainAgentName, "Automatic-Module-Name": "launchserver" ) from sourceSets.main.output @@ -71,7 +70,6 @@ tasks.register('cleanjar', Jar) { dependencies { pack project(':LauncherAPI') bundle group: 'me.tongfei', name: 'progressbar', version: '0.10.1' - bundle group: 'com.github.Marcono1234', name: 'gson-record-type-adapter-factory', version: 'v0.3.0' bundle group: 'org.fusesource.jansi', name: 'jansi', version: rootProject['verJansi'] bundle group: 'org.jline', name: 'jline', version: rootProject['verJline'] bundle group: 'org.jline', name: 'jline-reader', version: rootProject['verJline'] @@ -93,20 +91,16 @@ dependencies { bundle group: 'io.jsonwebtoken', name: 'jjwt-api', version: rootProject['verJwt'] bundle group: 'io.jsonwebtoken', name: 'jjwt-impl', version: rootProject['verJwt'] bundle group: 'io.jsonwebtoken', name: 'jjwt-gson', version: rootProject['verJwt'] + bundle group: 'com.google.code.gson', name: 'gson', version: rootProject['verGson'] annotationProcessor(group: 'org.apache.logging.log4j', name: 'log4j-core', version: rootProject['verLog4j']) testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter', version: rootProject['verJunit'] - hikari 'io.micrometer:micrometer-core:1.8.4' - hikari('com.zaxxer:HikariCP:5.0.1') { + hikari 'io.micrometer:micrometer-core:1.13.1' + hikari('com.zaxxer:HikariCP:5.1.0') { exclude group: 'javassist' exclude group: 'io.micrometer' exclude group: 'org.slf4j' } - - compileOnlyA group: 'com.google.guava', name: 'guava', version: rootProject['verGuavaC'] - // Do not update (laggy deps). - compileOnlyA 'log4j:log4j:1.2.17' - compileOnlyA 'org.apache.logging.log4j:log4j-core:2.14.1' } tasks.register('hikari', Copy) { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java index d3a435ea7..6a50ae8e0 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java @@ -82,6 +82,9 @@ public final class LaunchServer implements Runnable, AutoCloseable, Reconfigurab */ public final Path profilesDir; public final Path tmpDir; + public final Path modulesDir; + public final Path launcherModulesDir; + public final Path librariesDir; /** * This object contains runtime configuration */ @@ -136,6 +139,9 @@ public LaunchServer(LaunchServerDirectories directories, LaunchServerEnv env, La launcherLibraries = directories.launcherLibrariesDir; launcherLibrariesCompile = directories.launcherLibrariesCompileDir; launcherPack = directories.launcherPackDir; + modulesDir = directories.modules; + launcherModulesDir = directories.launcherModules; + librariesDir = directories.launcherLibrariesDir; this.shardId = shardId; if(!Files.isDirectory(launcherPack)) { Files.createDirectories(launcherPack); @@ -351,14 +357,17 @@ public void run() { // Sync updates dir CommonHelper.newThread("Profiles and updates sync", true, () -> { try { - if (!IOHelper.isDir(updatesDir)) - Files.createDirectory(updatesDir); - updatesManager.readUpdatesDir(); - // Sync profiles dir if (!IOHelper.isDir(profilesDir)) Files.createDirectory(profilesDir); syncProfilesDir(); + + // Sync updates dir + if (!IOHelper.isDir(updatesDir)) + Files.createDirectory(updatesDir); + updatesManager.readUpdatesDir(); + + modulesManager.invokeEvent(new LaunchServerProfilesSyncEvent(this)); } catch (IOException e) { logger.error("Updates/Profiles not synced", e); @@ -488,9 +497,10 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO public static class LaunchServerDirectories { public static final String UPDATES_NAME = "updates", PROFILES_NAME = "profiles", TRUSTSTORE_NAME = "truststore", LAUNCHERLIBRARIES_NAME = "launcher-libraries", - LAUNCHERLIBRARIESCOMPILE_NAME = "launcher-libraries-compile", LAUNCHERPACK_NAME = "launcher-pack", KEY_NAME = ".keys"; + LAUNCHERLIBRARIESCOMPILE_NAME = "launcher-libraries-compile", LAUNCHERPACK_NAME = "launcher-pack", KEY_NAME = ".keys", MODULES = "modules", LAUNCHER_MODULES = "launcher-modules", LIBRARIES = "libraries"; public Path updatesDir; public Path profilesDir; + public Path librariesDir; public Path launcherLibrariesDir; public Path launcherLibrariesCompileDir; public Path launcherPackDir; @@ -498,6 +508,8 @@ public static class LaunchServerDirectories { public Path dir; public Path trustStore; public Path tmpDir; + public Path modules; + public Path launcherModules; public void collect() { if (updatesDir == null) updatesDir = getPath(UPDATES_NAME); @@ -506,9 +518,12 @@ public void collect() { if (launcherLibrariesDir == null) launcherLibrariesDir = getPath(LAUNCHERLIBRARIES_NAME); if (launcherLibrariesCompileDir == null) launcherLibrariesCompileDir = getPath(LAUNCHERLIBRARIESCOMPILE_NAME); - if(launcherPackDir == null) + if (launcherPackDir == null) launcherPackDir = getPath(LAUNCHERPACK_NAME); if (keyDirectory == null) keyDirectory = getPath(KEY_NAME); + if (modules == null) modules = getPath(MODULES); + if (launcherModules == null) launcherModules = getPath(LAUNCHER_MODULES); + if (librariesDir == null) librariesDir = getPath(LIBRARIES); if (tmpDir == null) tmpDir = Paths.get(System.getProperty("java.io.tmpdir")).resolve("launchserver-%s".formatted(SecurityHelper.randomStringToken())); } diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerStarter.java b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerStarter.java index addab8f3a..16542fb65 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerStarter.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServerStarter.java @@ -34,6 +34,7 @@ import java.nio.file.Path; import java.security.Security; import java.security.cert.CertificateException; +import java.util.ArrayList; import java.util.List; public class LaunchServerStarter { @@ -51,10 +52,13 @@ public static void main(String[] args) throws Exception { try { Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider"); Security.addProvider(new BouncyCastleProvider()); - } catch (ClassNotFoundException ex) { + } catch (ClassNotFoundException | NoClassDefFoundError ex) { LogHelper.error("Library BouncyCastle not found! Is directory 'libraries' empty?"); return; } + LaunchServer.LaunchServerDirectories directories = new LaunchServer.LaunchServerDirectories(); + directories.dir = dir; + directories.collect(); CertificateManager certificateManager = new CertificateManager(); try { certificateManager.readTrustStore(dir.resolve("truststore")); @@ -78,7 +82,7 @@ public static void main(String[] args) throws Exception { LaunchServerRuntimeConfig runtimeConfig; LaunchServerConfig config; LaunchServer.LaunchServerEnv env = LaunchServer.LaunchServerEnv.PRODUCTION; - LaunchServerModulesManager modulesManager = new LaunchServerModulesManager(dir.resolve("modules"), dir.resolve("config"), certificateManager.trustManager); + LaunchServerModulesManager modulesManager = new LaunchServerModulesManager(directories.modules, dir.resolve("config"), certificateManager.trustManager); modulesManager.autoload(); modulesManager.initModules(null); registerAll(); @@ -123,8 +127,6 @@ public static void main(String[] args) throws Exception { } LaunchServer.LaunchServerConfigManager launchServerConfigManager = new BasicLaunchServerConfigManager(configFile, runtimeConfigFile); - LaunchServer.LaunchServerDirectories directories = new LaunchServer.LaunchServerDirectories(); - directories.dir = dir; LaunchServer server = new LaunchServerBuilder() .setDirectories(directories) .setEnv(env) @@ -135,7 +137,24 @@ public static void main(String[] args) throws Exception { .setLaunchServerConfigManager(launchServerConfigManager) .setCertificateManager(certificateManager) .build(); - if (!prepareMode) { + List allArgs = List.of(args); + boolean isPrepareMode = prepareMode || allArgs.contains("--prepare"); + boolean isRunCommand = false; + String runCommand = null; + for(var e : allArgs) { + if(e.equals("--run")) { + isRunCommand = true; + continue; + } + if(isRunCommand) { + runCommand = e; + isRunCommand = false; + } + } + if(runCommand != null) { + localCommandHandler.eval(runCommand, false); + } + if (!isPrepareMode) { server.run(); } else { server.close(); @@ -201,7 +220,7 @@ public static void generateConfigIfNotExists(Path configFile, CommandHandler com address = System.getProperty("launchserver.address", null); } if (address == null) { - System.out.println("LaunchServer address(default: localhost): "); + System.out.println("External launchServer address:port (default: localhost:9274): "); address = commandHandler.readLine(); } String projectName = System.getenv("PROJECTNAME"); @@ -215,18 +234,29 @@ public static void generateConfigIfNotExists(Path configFile, CommandHandler com newConfig.setProjectName(projectName); } if (address == null || address.isEmpty()) { - logger.error("Address null. Using localhost"); - address = "localhost"; + logger.error("Address null. Using localhost:9274"); + address = "localhost:9274"; } if (newConfig.projectName == null || newConfig.projectName.isEmpty()) { logger.error("ProjectName null. Using MineCraft"); newConfig.projectName = "MineCraft"; } - - newConfig.netty.address = "ws://" + address + ":9274/api"; - newConfig.netty.downloadURL = "http://" + address + ":9274/%dirname%/"; - newConfig.netty.launcherURL = "http://" + address + ":9274/Launcher.jar"; - newConfig.netty.launcherEXEURL = "http://" + address + ":9274/Launcher.exe"; + int port = 9274; + if(address.contains(":")) { + String portString = address.substring(address.indexOf(':')+1); + try { + port = Integer.parseInt(portString); + } catch (NumberFormatException e) { + logger.warn("Unknown port {}, using 9274", portString); + } + } else { + logger.info("Address {} doesn't contains port (you want to use nginx?)", address); + } + newConfig.netty.address = "ws://" + address + "/api"; + newConfig.netty.downloadURL = "http://" + address + "/%dirname%/"; + newConfig.netty.launcherURL = "http://" + address + "/Launcher.jar"; + newConfig.netty.launcherEXEURL = "http://" + address + "/Launcher.exe"; + newConfig.netty.binds[0].port = port; // Write LaunchServer config logger.info("Writing LaunchServer config file"); diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/Main.java b/LaunchServer/src/main/java/pro/gravit/launchserver/Main.java index 8ca8b467b..aabf4fe15 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/Main.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/Main.java @@ -21,6 +21,7 @@ public class Main { private static final List classpathOnly = List.of("proguard", "jline", "progressbar", "kotlin", "epoll"); private static final String LOG4J_PROPERTY = "log4j2.configurationFile"; private static final String DEBUG_PROPERTY = "launchserver.main.debug"; + private static final String LIBRARIES_PROPERTY = "launchserver.dir.libraries"; private static boolean isClasspathOnly(Path path) { var fileName = path.getFileName().toString(); for(var e : classpathOnly) { @@ -56,8 +57,9 @@ public static void main(String[] args) throws Throwable { ModuleLaunch launch = new ModuleLaunch(); LaunchOptions options = new LaunchOptions(); options.moduleConf = new LaunchOptions.ModuleConf(); + Path librariesPath = Path.of(System.getProperty(LIBRARIES_PROPERTY, "libraries")); List libraries; - try(Stream files = Files.walk(Path.of("libraries"), FileVisitOption.FOLLOW_LINKS)) { + try(Stream files = Files.walk(librariesPath, FileVisitOption.FOLLOW_LINKS)) { libraries = new ArrayList<>(files.filter(e -> e.getFileName().toString().endsWith(".jar")).toList()); } List classpath = new ArrayList<>(); diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/AbstractSQLCoreProvider.java b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/AbstractSQLCoreProvider.java index 857f9b7f8..4e732542e 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/AbstractSQLCoreProvider.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/AbstractSQLCoreProvider.java @@ -276,7 +276,7 @@ public void close() { protected SQLUser constructUser(ResultSet set) throws SQLException { return set.next() ? new SQLUser(UUID.fromString(set.getString(uuidColumn)), set.getString(usernameColumn), - set.getString(accessTokenColumn), set.getString(serverIDColumn), set.getString(passwordColumn), requestPermissions(set.getString(uuidColumn))) : null; + set.getString(accessTokenColumn), set.getString(serverIDColumn), set.getString(passwordColumn)) : null; } public ClientPermissions requestPermissions (String uuid) throws SQLException @@ -286,14 +286,17 @@ public ClientPermissions requestPermissions (String uuid) throws SQLException } private SQLUser queryUser(String sql, String value) throws SQLException { + SQLUser user; try (Connection c = getSQLConfig().getConnection()) { PreparedStatement s = c.prepareStatement(sql); s.setString(1, value); s.setQueryTimeout(MySQLSourceConfig.TIMEOUT); try (ResultSet set = s.executeQuery()) { - return constructUser(set); + user = constructUser(set); } } + user.permissions = requestPermissions(user.uuid.toString()); + return user; } private List queryPermissions(String sql, String value) throws SQLException { @@ -340,15 +343,14 @@ public static class SQLUser implements User { protected String accessToken; protected String serverId; protected final String password; - protected final ClientPermissions permissions; + protected ClientPermissions permissions; - public SQLUser(UUID uuid, String username, String accessToken, String serverId, String password, ClientPermissions permissions) { + public SQLUser(UUID uuid, String username, String accessToken, String serverId, String password) { this.uuid = uuid; this.username = username; this.accessToken = accessToken; this.serverId = serverId; this.password = password; - this.permissions = permissions; } @Override diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/MySQLCoreProvider.java b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/MySQLCoreProvider.java index 84c0ce3c0..af1045ca3 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/MySQLCoreProvider.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/auth/core/MySQLCoreProvider.java @@ -72,7 +72,7 @@ protected String makeUserCols() { @Override protected MySQLUser constructUser(ResultSet set) throws SQLException { return set.next() ? new MySQLUser(UUID.fromString(set.getString(uuidColumn)), set.getString(usernameColumn), - set.getString(accessTokenColumn), set.getString(serverIDColumn), set.getString(passwordColumn), requestPermissions(set.getString(uuidColumn)), set.getLong(hardwareIdColumn)) : null; + set.getString(accessTokenColumn), set.getString(serverIDColumn), set.getString(passwordColumn), set.getLong(hardwareIdColumn)) : null; } private MySQLUserHardware fetchHardwareInfo(ResultSet set) throws SQLException, IOException { @@ -336,8 +336,8 @@ public String toString() { public static class MySQLUser extends SQLUser { protected long hwidId; - public MySQLUser(UUID uuid, String username, String accessToken, String serverId, String password, ClientPermissions permissions, long hwidId) { - super(uuid, username, accessToken, serverId, password, permissions); + public MySQLUser(UUID uuid, String username, String accessToken, String serverId, String password, long hwidId) { + super(uuid, username, accessToken, serverId, password); this.hwidId = hwidId; } diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/tasks/PrepareBuildTask.java b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/tasks/PrepareBuildTask.java index 09473e544..e509edf3b 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/binary/tasks/PrepareBuildTask.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/binary/tasks/PrepareBuildTask.java @@ -37,7 +37,9 @@ public Path process(Path inputFile) throws IOException { server.launcherBinary.addonLibs.clear(); server.launcherBinary.files.clear(); IOHelper.walk(server.launcherLibraries, new ListFileVisitor(server.launcherBinary.coreLibs), false); - IOHelper.walk(server.launcherLibrariesCompile, new ListFileVisitor(server.launcherBinary.addonLibs), false); + if(Files.isDirectory(server.launcherLibrariesCompile)) { + IOHelper.walk(server.launcherLibrariesCompile, new ListFileVisitor(server.launcherBinary.addonLibs), false); + } try(Stream stream = Files.walk(server.launcherPack).filter((e) -> { try { return !Files.isDirectory(e) && !Files.isHidden(e); diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/components/ProGuardComponent.java b/LaunchServer/src/main/java/pro/gravit/launchserver/components/ProGuardComponent.java index 97a36b49e..9b1586bbc 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/components/ProGuardComponent.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/components/ProGuardComponent.java @@ -213,7 +213,7 @@ public Path process(Path inputFile) throws IOException { args.add(IOHelper.resolveJavaBin(IOHelper.JVM_DIR).toAbsolutePath().toString()); args.addAll(component.jvmArgs); args.add("-cp"); - try(Stream files = Files.walk(Path.of("libraries"), FileVisitOption.FOLLOW_LINKS)) { + try(Stream files = Files.walk(server.librariesDir, FileVisitOption.FOLLOW_LINKS)) { args.add(files .filter(e -> e.getFileName().toString().endsWith(".jar")) .map(path -> path.toAbsolutePath().toString()) diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/helper/MakeProfileHelper.java b/LaunchServer/src/main/java/pro/gravit/launchserver/helper/MakeProfileHelper.java index 50cf3ba90..5b139d123 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/helper/MakeProfileHelper.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/helper/MakeProfileHelper.java @@ -103,6 +103,7 @@ public static ClientProfile makeProfile(ClientProfile.Version version, String ti } if (fabric.isPresent()) { builder.setAltClassPath(fabric.orElseThrow().getAltClassPath()); + jvmArgs.add("-Dsodium.checks.issue2561=false"); // Please don't check LWJL3 version (Sodium: https://github.com/CaffeineMC/sodium-fabric/issues/2561 ) } if(quilt.isPresent()) { builder.setClassLoaderConfig(ClientProfile.ClassLoaderConfig.SYSTEM_ARGS); @@ -196,6 +197,9 @@ public static String getMainClassByVersion(ClientProfile.Version version, MakePr if(version.compareTo(ClientProfileVersions.MINECRAFT_1_7_10) == 0) { return "com.gtnewhorizons.retrofuturabootstrap.Main"; } + if(version.compareTo(ClientProfileVersions.MINECRAFT_1_12_2) == 0) { + return "top.outlands.foundation.boot.Foundation"; // Cleanroom + } if (findOption(options, MakeProfileOptionLaunchWrapper.class).isPresent()) { return "net.minecraft.launchwrapper.Launch"; } @@ -203,7 +207,7 @@ public static String getMainClassByVersion(ClientProfile.Version version, MakePr return "cpw.mods.modlauncher.Launcher"; } if (findOption(options, MakeProfileOptionFabric.class).isPresent()) { - return "net.fabricmc.loader.launch.knot.KnotClient"; + return "net.fabricmc.loader.impl.launch.knot.KnotClient"; } if(findOption(options, MakeProfilesOptionsQuilt.class).isPresent()) { return "org.quiltmc.loader.impl.launch.knot.KnotClient"; diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/launchermodules/LauncherModuleLoader.java b/LaunchServer/src/main/java/pro/gravit/launchserver/launchermodules/LauncherModuleLoader.java index f50945a5b..922efc054 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/launchermodules/LauncherModuleLoader.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/launchermodules/LauncherModuleLoader.java @@ -33,7 +33,7 @@ public class LauncherModuleLoader { public LauncherModuleLoader(LaunchServer server) { this.server = server; - modulesDir = server.dir.resolve("launcher-modules"); + modulesDir = server.launcherModulesDir; } public void init() { diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/manangers/LaunchServerGsonManager.java b/LaunchServer/src/main/java/pro/gravit/launchserver/manangers/LaunchServerGsonManager.java index 07deb0934..7f26c4867 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/manangers/LaunchServerGsonManager.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/manangers/LaunchServerGsonManager.java @@ -1,7 +1,6 @@ package pro.gravit.launchserver.manangers; import com.google.gson.GsonBuilder; -import marcono1234.gson.recordadapter.RecordTypeAdapterFactory; import pro.gravit.launcher.base.events.request.GetAvailabilityAuthRequestEvent; import pro.gravit.launcher.core.managers.GsonManager; import pro.gravit.launcher.base.modules.events.PreGsonPhase; @@ -34,9 +33,6 @@ public LaunchServerGsonManager(LaunchServerModulesManager modulesManager) { @Override public void registerAdapters(GsonBuilder builder) { super.registerAdapters(builder); - builder.registerTypeAdapterFactory(RecordTypeAdapterFactory.builder() - .allowMissingComponentValues() - .create()); builder.registerTypeAdapter(ClientProfile.Version.class, new ClientProfile.Version.GsonSerializer()); builder.registerTypeAdapter(TextureProvider.class, new UniversalJsonAdapter<>(TextureProvider.providers)); builder.registerTypeAdapter(AuthCoreProvider.class, new UniversalJsonAdapter<>(AuthCoreProvider.providers)); diff --git a/LauncherAPI/src/main/java/pro/gravit/launcher/base/profiles/ClientProfileBuilder.java b/LauncherAPI/src/main/java/pro/gravit/launcher/base/profiles/ClientProfileBuilder.java index 3b156f506..2839dc031 100644 --- a/LauncherAPI/src/main/java/pro/gravit/launcher/base/profiles/ClientProfileBuilder.java +++ b/LauncherAPI/src/main/java/pro/gravit/launcher/base/profiles/ClientProfileBuilder.java @@ -79,6 +79,7 @@ public ClientProfileBuilder(ClientProfile profile) { this.loadNatives = new ArrayList<>(profile.getLoadNatives()); this.properties = new HashMap<>(profile.getProperties()); this.servers = new ArrayList<>(profile.getServers()); + this.classLoaderConfig = profile.getClassLoaderConfig(); this.flags = new ArrayList<>(profile.getFlags()); this.recommendJavaVersion = profile.getRecommendJavaVersion(); this.minJavaVersion = profile.getMinJavaVersion(); diff --git a/LauncherAPI/src/main/java/pro/gravit/launcher/base/profiles/optional/OptionalView.java b/LauncherAPI/src/main/java/pro/gravit/launcher/base/profiles/optional/OptionalView.java index 80df36669..7837a1278 100644 --- a/LauncherAPI/src/main/java/pro/gravit/launcher/base/profiles/optional/OptionalView.java +++ b/LauncherAPI/src/main/java/pro/gravit/launcher/base/profiles/optional/OptionalView.java @@ -88,7 +88,7 @@ public Set getEnabledActions() { public void fixDependencies() { Set disabled = all.stream().filter(t -> !isEnabled(t)).collect(Collectors.toSet()); for (OptionalFile file : disabled) { - if (file.group != null && Arrays.stream(file.group).noneMatch(this::isEnabled)) { + if (file.group != null && file.group.length > 0 && Arrays.stream(file.group).noneMatch(this::isEnabled)) { enable(file.group[0], false, null); } } diff --git a/LauncherCore/build.gradle b/LauncherCore/build.gradle index efd55c0ad..068bbf703 100644 --- a/LauncherCore/build.gradle +++ b/LauncherCore/build.gradle @@ -6,7 +6,6 @@ dependencies { compileOnly group: 'org.jline', name: 'jline', version: rootProject['verJline'] compileOnly group: 'org.jline', name: 'jline-reader', version: rootProject['verJline'] compileOnly group: 'org.jline', name: 'jline-terminal', version: rootProject['verJline'] - compileOnly group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: rootProject['verBcprov'] compileOnly group: 'org.slf4j', name: 'slf4j-api', version: rootProject['verSlf4j'] api group: 'com.google.code.gson', name: 'gson', version: rootProject['verGson'] testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter', version: rootProject['verJunit'] diff --git a/LauncherCore/src/main/java/pro/gravit/utils/Version.java b/LauncherCore/src/main/java/pro/gravit/utils/Version.java index 7356b3ec4..73b08ab88 100644 --- a/LauncherCore/src/main/java/pro/gravit/utils/Version.java +++ b/LauncherCore/src/main/java/pro/gravit/utils/Version.java @@ -6,7 +6,7 @@ public final class Version implements Comparable { public static final int MAJOR = 5; public static final int MINOR = 6; - public static final int PATCH = 2; + public static final int PATCH = 3; public static final int BUILD = 1; public static final Version.Type RELEASE = Type.STABLE; public final int major; diff --git a/build.gradle b/build.gradle index 211d7b5dd..4de8fcaed 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { id 'org.openjfx.javafxplugin' version '0.1.0' apply false } group = 'pro.gravit.launcher' -version = '5.6.2' +version = '5.6.3' apply from: 'props.gradle' diff --git a/modules b/modules index a52b9cc85..0b9e8819d 160000 --- a/modules +++ b/modules @@ -1 +1 @@ -Subproject commit a52b9cc8552445167b95e8933f4289bbaa70677d +Subproject commit 0b9e8819db5c3d7db874b334cfa629a73daabf01 diff --git a/props.gradle b/props.gradle index 8b85574d6..af811c064 100644 --- a/props.gradle +++ b/props.gradle @@ -1,18 +1,16 @@ project.ext { verAsm = '9.7' - verNetty = '4.1.110.Final' + verNetty = '4.1.111.Final' verOshiCore = '6.6.1' verJunit = '5.10.2' - verGuavaC = '30.1.1-jre' verJansi = '2.4.1' verJline = '3.26.1' verJwt = '0.12.5' - verBcprov = '1.70' verGson = '2.11.0' verBcpkix = '1.78.1' verSlf4j = '2.0.13' verLog4j = '2.23.1' - verMySQLConn = '8.4.0' + verMySQLConn = '9.0.0' verMariaDBConn = '3.4.0' verPostgreSQLConn = '42.7.3' verH2Conn = '2.2.224'