Compare commits

...

9 Commits

Author SHA1 Message Date
microwin7 f62908102b
Merge 0e1691ee4c into c9a81da60c 2024-04-29 09:41:54 +03:00
Gravita c9a81da60c [FIX] Profile generation 2024-04-26 02:01:50 +07:00
Gravita 6c0ead015b [FIX] NPE in new profiles 2024-04-26 01:49:09 +07:00
XakepSDK b5457ee866
[FIX OpenID validate issuer and aud (#710)
Co-authored-by: d3coder <admin@xakeps.dk>
2024-04-25 22:05:53 +07:00
Gravita 52c9196dcc [FIX] SQLCoreProvider 2024-04-25 03:05:13 +07:00
Gravita 095a5aef8b [FEATURE] Add mariadb connector 2024-04-25 02:09:17 +07:00
Gravita 765f1a9d8f [FEATURE] SQLCoreProvider 2024-04-25 02:06:44 +07:00
Gravita 9bd65c797b [REFACTOR] ClientProfileBuilder 2024-04-25 01:31:46 +07:00
microwin7 0e1691ee4c
Add Discord Widget 2023-05-19 22:40:26 +03:00
18 changed files with 360 additions and 244 deletions

View File

@ -83,6 +83,7 @@ dependencies {
bundle group: 'io.netty', name: 'netty-transport-native-epoll', version: rootProject['verNetty'], classifier: 'linux-x86_64'
bundle group: 'org.slf4j', name: 'slf4j-api', version: rootProject['verSlf4j']
bundle group: 'com.mysql', name: 'mysql-connector-j', version: rootProject['verMySQLConn']
bundle group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: rootProject['verMariaDBConn']
bundle group: 'org.postgresql', name: 'postgresql', version: rootProject['verPostgreSQLConn']
bundle group: 'com.h2database', name: 'h2', version: rootProject['verH2Conn']
bundle group: 'com.guardsquare', name: 'proguard-base', version: rootProject['verProguard']

View File

@ -55,6 +55,7 @@ public abstract class AuthCoreProvider implements AutoCloseable, Reconfigurable
providers.register("memory", MemoryAuthCoreProvider.class);
providers.register("merge", MergeAuthCoreProvider.class);
providers.register("openid", OpenIDAuthCoreProvider.class);
providers.register("sql", SQLCoreProvider.class);
registredProviders = true;
}
}

View File

@ -0,0 +1,27 @@
package pro.gravit.launchserver.auth.core;
import pro.gravit.launchserver.LaunchServer;
import pro.gravit.launchserver.auth.AuthProviderPair;
import pro.gravit.launchserver.auth.HikariSQLSourceConfig;
import pro.gravit.launchserver.auth.SQLSourceConfig;
public class SQLCoreProvider extends AbstractSQLCoreProvider {
public HikariSQLSourceConfig holder;
@Override
public void close() {
super.close();
holder.close();
}
@Override
public void init(LaunchServer server, AuthProviderPair pair) {
holder.init();
super.init(server, pair);
}
@Override
public SQLSourceConfig getSQLConfig() {
return holder;
}
}

View File

@ -36,7 +36,10 @@ public class OpenIDAuthenticator {
public OpenIDAuthenticator(OpenIDConfig openIDConfig) {
this.openIDConfig = openIDConfig;
var keyLocator = loadKeyLocator(openIDConfig);
this.jwtParser = Jwts.parser().keyLocator(keyLocator)
this.jwtParser = Jwts.parser()
.keyLocator(keyLocator)
.requireIssuer(openIDConfig.issuer())
.requireAudience(openIDConfig.clientId())
.build();
}

View File

@ -3,7 +3,8 @@ package pro.gravit.launchserver.auth.core.openid;
import java.net.URI;
public record OpenIDConfig(URI tokenUri, String authorizationEndpoint, String clientId, String clientSecret,
String redirectUri, URI jwksUri, String scopes, ClaimExtractorConfig extractorConfig) {
String redirectUri, URI jwksUri, String scopes, String issuer,
ClaimExtractorConfig extractorConfig) {
public record ClaimExtractorConfig(String usernameClaim, String uuidClaim) {}
}

View File

@ -5,6 +5,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import pro.gravit.launcher.base.Launcher;
import pro.gravit.launcher.base.profiles.ClientProfile;
import pro.gravit.launcher.base.profiles.ClientProfileBuilder;
import pro.gravit.launcher.base.profiles.ClientProfileVersions;
import pro.gravit.launchserver.LaunchServer;
import pro.gravit.launchserver.command.Command;
@ -61,9 +62,11 @@ public final class DownloadClientCommand extends Command {
try {
JsonElement clientJson = server.mirrorManager.jsonRequest(null, "GET", "clients/%s.json", versionName);
clientProfile = Launcher.gsonManager.configGson.fromJson(clientJson, ClientProfile.class);
clientProfile.setTitle(dirName);
clientProfile.setDir(dirName);
clientProfile.setUUID(UUID.randomUUID());
var builder = new ClientProfileBuilder(clientProfile);
builder.setTitle(dirName);
builder.setDir(dirName);
builder.setUuid(UUID.randomUUID());
clientProfile = builder.createClientProfile();
if (clientProfile.getServers() != null) {
ClientProfile.ServerProfile serverProfile = clientProfile.getDefaultServerProfile();
if (serverProfile != null) {

View File

@ -4,6 +4,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import pro.gravit.launcher.base.Launcher;
import pro.gravit.launcher.base.profiles.ClientProfile;
import pro.gravit.launcher.base.profiles.ClientProfileBuilder;
import pro.gravit.launchserver.LaunchServer;
import pro.gravit.launchserver.command.Command;
import pro.gravit.utils.helper.IOHelper;
@ -44,8 +45,9 @@ public class CloneProfileCommand extends Command {
try(Reader reader = IOHelper.newReader(profilePath)) {
profile = Launcher.gsonManager.gson.fromJson(reader, ClientProfile.class);
}
profile.setTitle(args[1]);
profile.setUUID(UUID.randomUUID());
var builder = new ClientProfileBuilder(profile);
builder.setTitle(args[1]);
builder.setUuid(UUID.randomUUID());
if(profile.getServers().size() == 1) {
profile.getServers().getFirst().name = args[1];
}
@ -61,7 +63,8 @@ public class CloneProfileCommand extends Command {
}
});
}
profile.setDir(args[1]);
builder.setDir(args[1]);
profile = builder.createClientProfile();
var targetPath = server.profilesDir.resolve(args[1].concat(".json"));
try(Writer writer = IOHelper.newWriter(targetPath)) {
Launcher.gsonManager.gson.toJson(profile, writer);

View File

@ -23,7 +23,6 @@ public class SaveProfilesCommand extends Command {
}
public static void saveProfile(ClientProfile profile, Path path) throws IOException {
if (profile.getUUID() == null) profile.setUUID(UUID.randomUUID());
if (profile.getServers().isEmpty()) {
ClientProfile.ServerProfile serverProfile = new ClientProfile.ServerProfile();
serverProfile.isDefault = true;

View File

@ -109,14 +109,14 @@ public class ClientLauncherProcess {
private void applyClientProfile() {
this.systemClassPath.add(IOHelper.getCodeSource(ClientLauncherEntryPoint.class).toAbsolutePath().toString());
Collections.addAll(this.jvmArgs, this.params.profile.getJvmArgs());
this.jvmArgs.addAll(this.params.profile.getJvmArgs());
for (OptionalAction a : this.params.actions) {
if (a instanceof OptionalActionJvmArgs) {
this.jvmArgs.addAll(((OptionalActionJvmArgs) a).args);
}
}
this.systemEnv.put("JAVA_HOME", javaVersion.jvmDir.toString());
Collections.addAll(this.systemClassPath, this.params.profile.getAlternativeClassPath());
this.systemClassPath.addAll(this.params.profile.getAlternativeClassPath());
if (params.ram > 0) {
this.jvmArgs.add("-Xmx" + params.ram + 'M');
}
@ -128,8 +128,6 @@ public class ClientLauncherProcess {
this.params.oauthExpiredTime = Request.getTokenExpiredTime();
this.params.extendedTokens = Request.getExtendedTokens();
}
this.jvmModules.addAll(this.params.profile.getModules());
this.jvmModulesPaths.addAll(this.params.profile.getModulePath());
LauncherEngine.modulesManager.invokeEvent(new ClientProcessBuilderCreateEvent(this));
}
@ -148,7 +146,6 @@ public class ClientLauncherProcess {
processArgs.add("-javaagent:".concat(IOHelper.getCodeSource(ClientLauncherEntryPoint.class).toAbsolutePath().toString()));
} else if (params.profile.getClassLoaderConfig() == ClientProfile.ClassLoaderConfig.SYSTEM_ARGS) {
systemClassPath.addAll(ClientLauncherEntryPoint.resolveClassPath(new HashSet<>(), workDir, params.actions, params.profile)
.filter(x -> !params.profile.getModulePath().contains(workDir.relativize(x).toString()))
.map(Path::toString)
.toList());
}

View File

@ -41,8 +41,6 @@ public final class ClientProfile implements Comparable<ClientProfile> {
@LauncherNetworkAPI
private List<String> updateExclusions;
@LauncherNetworkAPI
private List<String> updateShared;
@LauncherNetworkAPI
private List<String> updateVerify;
@LauncherNetworkAPI
private Set<OptionalFile> updateOptional;
@ -51,10 +49,6 @@ public final class ClientProfile implements Comparable<ClientProfile> {
@LauncherNetworkAPI
private List<String> classPath;
@LauncherNetworkAPI
private List<String> modulePath = new ArrayList<>();
@LauncherNetworkAPI
private List<String> modules = new ArrayList<>();
@LauncherNetworkAPI
private List<String> altClassPath;
@LauncherNetworkAPI
private List<String> clientArgs;
@ -89,54 +83,37 @@ public final class ClientProfile implements Comparable<ClientProfile> {
@LauncherNetworkAPI
private LaunchOptions.ModuleConf moduleConf;
public ClientProfile() {
update = new ArrayList<>();
updateExclusions = new ArrayList<>();
updateShared = new ArrayList<>();
updateVerify = new ArrayList<>();
updateOptional = new HashSet<>();
jvmArgs = new ArrayList<>();
classPath = new ArrayList<>();
modulePath = new ArrayList<>();
altClassPath = new ArrayList<>();
clientArgs = new ArrayList<>();
compatClasses = new ArrayList<>();
properties = new HashMap<>();
servers = new ArrayList<>(1);
classLoaderConfig = ClassLoaderConfig.LAUNCHER;
flags = new ArrayList<>();
}
public ClientProfile(List<String> update, List<String> updateExclusions, List<String> updateShared, List<String> updateVerify, Set<OptionalFile> updateOptional, List<String> jvmArgs, List<String> classPath, List<String> modulePath, List<String> modules, List<String> altClassPath, List<String> clientArgs, List<String> compatClasses, Map<String, String> properties, List<ServerProfile> servers, ClassLoaderConfig classLoaderConfig, List<CompatibilityFlags> flags, Version version, String assetIndex, String dir, String assetDir, int recommendJavaVersion, int minJavaVersion, int maxJavaVersion, ProfileDefaultSettings settings, int sortIndex, UUID uuid, String title, String info, String mainClass) {
public ClientProfile(String title, UUID uuid, Version version, String info, String dir, int sortIndex, String assetIndex, String assetDir, List<String> update, List<String> updateExclusions, List<String> updateVerify, Set<OptionalFile> updateOptional, List<String> jvmArgs, List<String> classPath, List<String> altClassPath, List<String> clientArgs, List<String> compatClasses, List<String> loadNatives, Map<String, String> properties, List<ServerProfile> servers, ClassLoaderConfig classLoaderConfig, List<CompatibilityFlags> flags, int recommendJavaVersion, int minJavaVersion, int maxJavaVersion, ProfileDefaultSettings settings, boolean limited, String mainClass, String mainModule, LaunchOptions.ModuleConf moduleConf) {
this.title = title;
this.uuid = uuid;
this.version = version;
this.info = info;
this.dir = dir;
this.sortIndex = sortIndex;
this.assetIndex = assetIndex;
this.assetDir = assetDir;
this.update = update;
this.updateExclusions = updateExclusions;
this.updateShared = updateShared;
this.updateVerify = updateVerify;
this.updateOptional = updateOptional;
this.jvmArgs = jvmArgs;
this.classPath = classPath;
this.modulePath = modulePath;
this.modules = modules;
this.altClassPath = altClassPath;
this.clientArgs = clientArgs;
this.compatClasses = compatClasses;
this.loadNatives = loadNatives;
this.properties = properties;
this.servers = servers;
this.classLoaderConfig = classLoaderConfig;
this.version = version;
this.assetIndex = assetIndex;
this.dir = dir;
this.assetDir = assetDir;
this.flags = flags;
this.recommendJavaVersion = recommendJavaVersion;
this.minJavaVersion = minJavaVersion;
this.maxJavaVersion = maxJavaVersion;
this.settings = settings;
this.sortIndex = sortIndex;
this.uuid = uuid;
this.title = title;
this.info = info;
this.limited = limited;
this.mainClass = mainClass;
this.flags = flags;
this.mainModule = mainModule;
this.moduleConf = moduleConf;
}
public ServerProfile getDefaultServerProfile() {
@ -159,34 +136,22 @@ public final class ClientProfile implements Comparable<ClientProfile> {
return getVersion().compareTo(ClientProfileVersions.MINECRAFT_1_7_10) >= 0 ? ASSET_MATCHER : null;
}
public String[] getClassPath() {
return classPath.toArray(new String[0]);
public List<String> getClassPath() {
return Collections.unmodifiableList(classPath);
}
public List<String> getModulePath() {
return Collections.unmodifiableList(modulePath);
public List<String> getAlternativeClassPath() {
return Collections.unmodifiableList(altClassPath);
}
public List<String> getModules() {
return Collections.unmodifiableList(modules);
}
public String[] getAlternativeClassPath() {
return altClassPath.toArray(new String[0]);
}
public String[] getClientArgs() {
return clientArgs.toArray(new String[0]);
public List<String> getClientArgs() {
return Collections.unmodifiableList(clientArgs);
}
public String getDir() {
return dir;
}
public void setDir(String dir) {
this.dir = dir;
}
public String getAssetDir() {
return assetDir;
}
@ -195,24 +160,25 @@ public final class ClientProfile implements Comparable<ClientProfile> {
return Collections.unmodifiableList(updateExclusions);
}
public FileNameMatcher getClientUpdateMatcher(/*boolean excludeOptional*/) {
public List<String> getUpdate() {
return Collections.unmodifiableList(update);
}
public List<String> getUpdateVerify() {
return Collections.unmodifiableList(updateVerify);
}
public FileNameMatcher getClientUpdateMatcher() {
String[] updateArray = update.toArray(new String[0]);
String[] verifyArray = updateVerify.toArray(new String[0]);
List<String> excludeList;
//if(excludeOptional)
//{
// excludeList = new ArrayList<>();
// excludeList.addAll(updateExclusions);
// excludeList.addAll(updateOptional);
//}
//else
excludeList = updateExclusions;
String[] exclusionsArray = excludeList.toArray(new String[0]);
return new FileNameMatcher(updateArray, verifyArray, exclusionsArray);
}
public String[] getJvmArgs() {
return jvmArgs.toArray(new String[0]);
public List<String> getJvmArgs() {
return Collections.unmodifiableList(jvmArgs);
}
public String getMainClass() {
@ -289,10 +255,6 @@ public final class ClientProfile implements Comparable<ClientProfile> {
return null;
}
public Collection<String> getShared() {
return updateShared;
}
public int getServerPort() {
ServerProfile profile = getDefaultServerProfile();
return profile == null ? 25565 : profile.serverPort;
@ -306,26 +268,14 @@ public final class ClientProfile implements Comparable<ClientProfile> {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public Version getVersion() {
return version;
}
public void setVersion(Version version) {
this.version = version;
}
@Deprecated
public boolean isUpdateFastCheck() {
return true;
@ -340,10 +290,6 @@ public final class ClientProfile implements Comparable<ClientProfile> {
return uuid;
}
public void setUUID(UUID uuid) {
this.uuid = uuid;
}
public boolean hasFlag(CompatibilityFlags flag) {
return flags.contains(flag);
}
@ -413,18 +359,6 @@ public final class ClientProfile implements Comparable<ClientProfile> {
return properties.get(name);
}
public void putProperty(String name, String value) {
properties.put(name, value);
}
public boolean containsProperty(String name) {
return properties.containsKey(name);
}
public void clearProperties() {
properties.clear();
}
public Map<String, String> getProperties() {
return Collections.unmodifiableMap(properties);
}
@ -450,10 +384,6 @@ public final class ClientProfile implements Comparable<ClientProfile> {
return classLoaderConfig;
}
public void setClassLoaderConfig(ClassLoaderConfig classLoaderConfig) {
this.classLoaderConfig = classLoaderConfig;
}
public boolean isLimited() {
return limited;
}

View File

@ -1,136 +1,117 @@
package pro.gravit.launcher.base.profiles;
import pro.gravit.launcher.base.profiles.optional.OptionalFile;
import pro.gravit.utils.launch.LaunchOptions;
import java.util.*;
public class ClientProfileBuilder {
private List<String> update = new ArrayList<>();
private List<String> updateExclusions = new ArrayList<>();
private List<String> updateShared = new ArrayList<>();
private List<String> updateVerify = new ArrayList<>();
private Set<OptionalFile> updateOptional = new HashSet<>();
private List<String> jvmArgs = new ArrayList<>();
private List<String> classPath = new ArrayList<>();
private List<String> modulePath = new ArrayList<>();
private List<String> modules = new ArrayList<>();
private List<String> altClassPath = new ArrayList<>();
private List<String> clientArgs = new ArrayList<>();
private List<String> compatClasses = new ArrayList<>();
private Map<String, String> properties = new HashMap<>();
private List<ClientProfile.ServerProfile> servers = new ArrayList<>();
private ClientProfile.ClassLoaderConfig classLoaderConfig = ClientProfile.ClassLoaderConfig.LAUNCHER;
private List<ClientProfile.CompatibilityFlags> flags = new ArrayList<>();
private ClientProfile.Version version;
private String assetIndex;
private String dir;
private String assetDir;
private int recommendJavaVersion = 8;
private int minJavaVersion = 8;
private int maxJavaVersion = 999;
private ClientProfile.ProfileDefaultSettings settings = new ClientProfile.ProfileDefaultSettings();
private int sortIndex;
private UUID uuid;
private String title;
private UUID uuid;
private ClientProfile.Version version;
private String info;
private String dir;
private int sortIndex;
private String assetIndex;
private String assetDir;
private List<String> update;
private List<String> updateExclusions;
private List<String> updateVerify;
private Set<OptionalFile> updateOptional;
private List<String> jvmArgs;
private List<String> classPath;
private List<String> altClassPath;
private List<String> clientArgs;
private List<String> compatClasses;
private List<String> loadNatives;
private Map<String, String> properties;
private List<ClientProfile.ServerProfile> servers;
private ClientProfile.ClassLoaderConfig classLoaderConfig;
private List<ClientProfile.CompatibilityFlags> flags;
private int recommendJavaVersion;
private int minJavaVersion;
private int maxJavaVersion;
private ClientProfile.ProfileDefaultSettings settings;
private boolean limited;
private String mainClass;
private String mainModule;
private LaunchOptions.ModuleConf moduleConf;
public void setUpdate(List<String> update) {
this.update = update;
public ClientProfileBuilder() {
this.update = new ArrayList<>();
this.updateExclusions = new ArrayList<>();
this.updateVerify = new ArrayList<>();
this.updateOptional = new HashSet<>();
this.jvmArgs = new ArrayList<>();
this.classPath = new ArrayList<>();
this.altClassPath = new ArrayList<>();
this.clientArgs = new ArrayList<>();
this.compatClasses = new ArrayList<>();
this.loadNatives = new ArrayList<>();
this.properties = new HashMap<>();
this.servers = new ArrayList<>();
this.flags = new ArrayList<>();
this.settings = new ClientProfile.ProfileDefaultSettings();
this.recommendJavaVersion = 21;
this.minJavaVersion = 17;
this.maxJavaVersion = 999;
this.classLoaderConfig = ClientProfile.ClassLoaderConfig.LAUNCHER;
}
public ClientProfileBuilder setUpdateExclusions(List<String> updateExclusions) {
this.updateExclusions = updateExclusions;
public ClientProfileBuilder(ClientProfile profile) {
this.title = profile.getTitle();
this.uuid = profile.getUUID();
this.version = profile.getVersion();
this.info = profile.getInfo();
this.dir = profile.getDir();
this.sortIndex = profile.getSortIndex();
this.assetIndex = profile.getAssetIndex();
this.assetDir = profile.getAssetDir();
this.update = new ArrayList<>(profile.getUpdate());
this.updateExclusions = new ArrayList<>(profile.getUpdateExclusions());
this.updateVerify = new ArrayList<>(profile.getUpdateVerify());
this.updateOptional = new HashSet<>(profile.getOptional());
this.jvmArgs = new ArrayList<>(profile.getJvmArgs());
this.classPath = new ArrayList<>(profile.getClassPath());
this.altClassPath = new ArrayList<>(profile.getAlternativeClassPath());
this.clientArgs = new ArrayList<>(profile.getClientArgs());
this.compatClasses = new ArrayList<>(profile.getCompatClasses());
this.loadNatives = new ArrayList<>(profile.getLoadNatives());
this.properties = new HashMap<>(profile.getProperties());
this.servers = new ArrayList<>(profile.getServers());
this.flags = new ArrayList<>(profile.getFlags());
this.recommendJavaVersion = profile.getRecommendJavaVersion();
this.minJavaVersion = profile.getMinJavaVersion();
this.maxJavaVersion = profile.getMaxJavaVersion();
this.settings = profile.getSettings();
this.limited = profile.isLimited();
this.mainClass = profile.getMainClass();
this.mainModule = profile.getMainModule();
this.moduleConf = profile.getModuleConf();
}
public ClientProfileBuilder setTitle(String title) {
this.title = title;
return this;
}
public ClientProfileBuilder setUpdateShared(List<String> updateShared) {
this.updateShared = updateShared;
public ClientProfileBuilder setUuid(UUID uuid) {
this.uuid = uuid;
return this;
}
public void setUpdateVerify(List<String> updateVerify) {
this.updateVerify = updateVerify;
}
public void setUpdateOptional(Set<OptionalFile> updateOptional) {
this.updateOptional = updateOptional;
}
public void setJvmArgs(List<String> jvmArgs) {
this.jvmArgs = jvmArgs;
}
public void setClassPath(List<String> classPath) {
this.classPath = classPath;
}
public void setAltClassPath(List<String> altClassPath) {
this.altClassPath = altClassPath;
}
public void setClientArgs(List<String> clientArgs) {
this.clientArgs = clientArgs;
}
public ClientProfileBuilder setCompatClasses(List<String> compatClasses) {
this.compatClasses = compatClasses;
return this;
}
public ClientProfileBuilder setProperties(Map<String, String> properties) {
this.properties = properties;
return this;
}
public void setServers(List<ClientProfile.ServerProfile> servers) {
this.servers = servers;
}
public void setClassLoaderConfig(ClientProfile.ClassLoaderConfig classLoaderConfig) {
this.classLoaderConfig = classLoaderConfig;
}
public void setVersion(ClientProfile.Version version) {
public ClientProfileBuilder setVersion(ClientProfile.Version version) {
this.version = version;
return this;
}
public void setAssetIndex(String assetIndex) {
this.assetIndex = assetIndex;
public ClientProfileBuilder setInfo(String info) {
this.info = info;
return this;
}
public void setDir(String dir) {
public ClientProfileBuilder setDir(String dir) {
this.dir = dir;
}
public void setAssetDir(String assetDir) {
this.assetDir = assetDir;
}
public void setRecommendJavaVersion(int recommendJavaVersion) {
this.recommendJavaVersion = recommendJavaVersion;
}
public ClientProfileBuilder setModulePath(List<String> modulePath) {
this.modulePath = modulePath;
return this;
}
public ClientProfileBuilder setModules(List<String> modules) {
this.modules = modules;
return this;
}
public void setMinJavaVersion(int minJavaVersion) {
this.minJavaVersion = minJavaVersion;
}
public void setMaxJavaVersion(int maxJavaVersion) {
this.maxJavaVersion = maxJavaVersion;
}
public ClientProfileBuilder setSettings(ClientProfile.ProfileDefaultSettings settings) {
this.settings = settings;
return this;
}
@ -139,20 +120,140 @@ public class ClientProfileBuilder {
return this;
}
public void setUuid(UUID uuid) {
this.uuid = uuid;
public ClientProfileBuilder setAssetIndex(String assetIndex) {
this.assetIndex = assetIndex;
return this;
}
public void setTitle(String title) {
this.title = title;
public ClientProfileBuilder setAssetDir(String assetDir) {
this.assetDir = assetDir;
return this;
}
public void setInfo(String info) {
this.info = info;
public ClientProfileBuilder setUpdate(List<String> update) {
this.update = update;
return this;
}
public void setMainClass(String mainClass) {
this.mainClass = mainClass;
public ClientProfileBuilder update(String value) {
this.update.add(value);
return this;
}
public ClientProfileBuilder setUpdateExclusions(List<String> updateExclusions) {
this.updateExclusions = updateExclusions;
return this;
}
public ClientProfileBuilder updateExclusions(String value) {
this.updateExclusions.add(value);
return this;
}
public ClientProfileBuilder setUpdateVerify(List<String> updateVerify) {
this.updateVerify = updateVerify;
return this;
}
public ClientProfileBuilder updateVerify(String value) {
this.updateVerify.add(value);
return this;
}
public ClientProfileBuilder setUpdateOptional(Set<OptionalFile> updateOptional) {
this.updateOptional = updateOptional;
return this;
}
public ClientProfileBuilder updateOptional(OptionalFile value) {
this.updateOptional.add(value);
return this;
}
public ClientProfileBuilder setJvmArgs(List<String> jvmArgs) {
this.jvmArgs = jvmArgs;
return this;
}
public ClientProfileBuilder jvmArg(String value) {
this.jvmArgs.add(value);
return this;
}
public ClientProfileBuilder setClassPath(List<String> classPath) {
this.classPath = classPath;
return this;
}
public ClientProfileBuilder classPath(String value) {
this.classPath.add(value);
return this;
}
public ClientProfileBuilder setAltClassPath(List<String> altClassPath) {
this.altClassPath = altClassPath;
return this;
}
public ClientProfileBuilder altClassPath(String value) {
this.altClassPath.add(value);
return this;
}
public ClientProfileBuilder setClientArgs(List<String> clientArgs) {
this.clientArgs = clientArgs;
return this;
}
public ClientProfileBuilder clientArg(String value) {
this.clientArgs.add(value);
return this;
}
public ClientProfileBuilder setCompatClasses(List<String> compatClasses) {
this.compatClasses = compatClasses;
return this;
}
public ClientProfileBuilder compatClass(String value) {
this.compatClasses.add(value);
return this;
}
public ClientProfileBuilder setLoadNatives(List<String> loadNatives) {
this.loadNatives = loadNatives;
return this;
}
public ClientProfileBuilder loadNatives(String value) {
this.loadNatives.add(value);
return this;
}
public ClientProfileBuilder setProperties(Map<String, String> properties) {
this.properties = properties;
return this;
}
public ClientProfileBuilder property(String name, String value) {
this.properties.put(name, value);
return this;
}
public ClientProfileBuilder setServers(List<ClientProfile.ServerProfile> servers) {
this.servers = servers;
return this;
}
public ClientProfileBuilder server(ClientProfile.ServerProfile value) {
this.servers.add(value);
return this;
}
public ClientProfileBuilder setClassLoaderConfig(ClientProfile.ClassLoaderConfig classLoaderConfig) {
this.classLoaderConfig = classLoaderConfig;
return this;
}
public ClientProfileBuilder setFlags(List<ClientProfile.CompatibilityFlags> flags) {
@ -160,7 +261,52 @@ public class ClientProfileBuilder {
return this;
}
public ClientProfileBuilder flag(ClientProfile.CompatibilityFlags value) {
this.flags.add(value);
return this;
}
public ClientProfileBuilder setRecommendJavaVersion(int recommendJavaVersion) {
this.recommendJavaVersion = recommendJavaVersion;
return this;
}
public ClientProfileBuilder setMinJavaVersion(int minJavaVersion) {
this.minJavaVersion = minJavaVersion;
return this;
}
public ClientProfileBuilder setMaxJavaVersion(int maxJavaVersion) {
this.maxJavaVersion = maxJavaVersion;
return this;
}
public ClientProfileBuilder setSettings(ClientProfile.ProfileDefaultSettings settings) {
this.settings = settings;
return this;
}
public ClientProfileBuilder setLimited(boolean limited) {
this.limited = limited;
return this;
}
public ClientProfileBuilder setMainClass(String mainClass) {
this.mainClass = mainClass;
return this;
}
public ClientProfileBuilder setMainModule(String mainModule) {
this.mainModule = mainModule;
return this;
}
public ClientProfileBuilder setModuleConf(LaunchOptions.ModuleConf moduleConf) {
this.moduleConf = moduleConf;
return this;
}
public ClientProfile createClientProfile() {
return new ClientProfile(update, updateExclusions, updateShared, updateVerify, updateOptional, jvmArgs, classPath, modulePath, modules, altClassPath, clientArgs, compatClasses, properties, servers, classLoaderConfig, flags, version, assetIndex, dir, assetDir, recommendJavaVersion, minJavaVersion, maxJavaVersion, settings, sortIndex, uuid, title, info, mainClass);
return new ClientProfile(title, uuid, version, info, dir, sortIndex, assetIndex, assetDir, update, updateExclusions, updateVerify, updateOptional, jvmArgs, classPath, altClassPath, clientArgs, compatClasses, loadNatives, properties, servers, classLoaderConfig, flags, recommendJavaVersion, minJavaVersion, maxJavaVersion, settings, limited, mainClass, mainModule, moduleConf);
}
}

View File

@ -18,4 +18,5 @@ public class ClientProfileVersions {
public static final ClientProfile.Version MINECRAFT_1_20 = ClientProfile.Version.of("1.20");
public static final ClientProfile.Version MINECRAFT_1_20_2 = ClientProfile.Version.of("1.20.2");
public static final ClientProfile.Version MINECRAFT_1_20_3 = ClientProfile.Version.of("1.20.3");
public static final ClientProfile.Version MINECRAFT_1_20_5 = ClientProfile.Version.of("1.20.5");
}

View File

@ -1,17 +1,19 @@
package pro.gravit.launcher.base.profiles.optional.actions;
import java.util.List;
public class OptionalActionClassPath extends OptionalAction {
public String[] args;
public List<String> args;
public boolean useAltClasspath = false;
public OptionalActionClassPath() {
}
public OptionalActionClassPath(String[] args) {
public OptionalActionClassPath(List<String> args) {
this.args = args;
}
public OptionalActionClassPath(String[] args, boolean useAltClasspath) {
public OptionalActionClassPath(List<String> args, boolean useAltClasspath) {
this.args = args;
this.useAltClasspath = useAltClasspath;
}

View File

@ -120,7 +120,6 @@ public class ClientLauncherEntryPoint {
LogHelper.debug("Verifying ClientLauncher sign and classpath");
Set<Path> ignoredPath = new HashSet<>();
List<Path> classpath = resolveClassPath(ignoredPath, clientDir, params.actions, params.profile)
.filter(x -> !profile.getModulePath().contains(clientDir.relativize(x).toString()))
.collect(Collectors.toCollection(ArrayList::new));
if(LogHelper.isDevEnabled()) {
for(var e : classpath) {
@ -253,11 +252,11 @@ public class ClientLauncherEntryPoint {
}
}
private static LinkedList<Path> resolveClassPathList(Set<Path> ignorePaths, Path clientDir, String... classPath) throws IOException {
private static LinkedList<Path> resolveClassPathList(Set<Path> ignorePaths, Path clientDir, List<String> classPath) throws IOException {
return resolveClassPathStream(ignorePaths, clientDir, classPath).collect(Collectors.toCollection(LinkedList::new));
}
private static Stream<Path> resolveClassPathStream(Set<Path> ignorePaths, Path clientDir, String... classPath) throws IOException {
private static Stream<Path> resolveClassPathStream(Set<Path> ignorePaths, Path clientDir, List<String> classPath) throws IOException {
Stream.Builder<Path> builder = Stream.builder();
for (String classPathEntry : classPath) {
Path path = clientDir.resolve(IOHelper.toPath(classPathEntry.replace(IOHelper.CROSS_SEPARATOR, IOHelper.PLATFORM_SEPARATOR)));
@ -301,7 +300,7 @@ public class ClientLauncherEntryPoint {
params.addClientLegacyArgs(args);
System.setProperty("minecraft.applet.TargetDirectory", params.clientDir);
}
Collections.addAll(args, profile.getClientArgs());
args.addAll(profile.getClientArgs());
for (OptionalAction action : params.actions) {
if (action instanceof OptionalActionClientArgs) {
args.addAll(((OptionalActionClientArgs) action).args);

View File

@ -6,9 +6,9 @@ public final class Version implements Comparable<Version> {
public static final int MAJOR = 5;
public static final int MINOR = 6;
public static final int PATCH = 1;
public static final int PATCH = 2;
public static final int BUILD = 1;
public static final Version.Type RELEASE = Type.STABLE;
public static final Version.Type RELEASE = Type.DEV;
public final int major;
public final int minor;
public final int patch;

View File

@ -1,4 +1,6 @@
# Modification of the launcher sashok724's v3 from Gravit [![Build Status](https://travis-ci.com/GravitLauncher/Launcher.svg?branch=master)](https://travis-ci.com/GravitLauncher/Launcher)
# Modification of the launcher sashok724's v3 from Gravit
[![Build Status](https://travis-ci.com/GravitLauncher/Launcher.svg?branch=master)](https://travis-ci.com/GravitLauncher/Launcher)
[![Join our Discord](https://img.shields.io/discord/853340557522370561.svg?logo=discord&label=)](https://discord.gg/b9QG4ygY75)
* [Discord channel](https://discord.gg/b9QG4ygY75)
@ -9,4 +11,4 @@
```sh
curl -s https://raw.githubusercontent.com/GravitLauncher/Launcher/master/get_it.sh | sh
```
```

View File

@ -5,7 +5,7 @@ plugins {
id 'org.openjfx.javafxplugin' version '0.1.0' apply false
}
group = 'pro.gravit.launcher'
version = '5.6.1'
version = '5.6.2-SNAPSHOT'
apply from: 'props.gradle'

View File

@ -13,6 +13,7 @@ project.ext {
verSlf4j = '2.0.9'
verLog4j = '2.20.0'
verMySQLConn = '8.3.0'
verMariaDBConn = '3.3.3'
verPostgreSQLConn = '42.7.1'
verH2Conn = '2.2.224'
verProguard = '7.4.1'