RunConfigSettings: Add support for fully custom main class (#871)

This commit is contained in:
Juuz
2023-04-23 11:22:41 +03:00
committed by GitHub
parent 743ba4de66
commit 162b504d64
5 changed files with 63 additions and 7 deletions

View File

@@ -138,10 +138,10 @@ public class RunConfig {
String environment = settings.getEnvironment();
SourceSet sourceSet = settings.getSource(project);
String defaultMain = settings.getDefaultMainClass();
String mainClass = settings.getMainClass().getOrNull();
if (defaultMain == null) {
throw new IllegalArgumentException("Run configuration '" + name + "' must specify 'defaultMainClass'");
if (mainClass == null) {
throw new IllegalArgumentException("Run configuration '" + name + "' must specify 'mainClass'");
}
if (configName == null) {
@@ -179,7 +179,7 @@ public class RunConfig {
// Custom parameters
runConfig.programArgs.addAll(settings.getProgramArgs());
runConfig.vmArgs.addAll(settings.getVmArgs());
runConfig.vmArgs.add("-Dfabric.dli.main=" + getMainClass(environment, extension, defaultMain));
runConfig.vmArgs.add("-Dfabric.dli.main=" + mainClass);
runConfig.environmentVariables = new HashMap<>();
runConfig.environmentVariables.putAll(settings.getEnvironmentVariables());
runConfig.projectName = project.getName();
@@ -245,7 +245,7 @@ public class RunConfig {
return sb.toString();
}
private static String getMainClass(String side, LoomGradleExtension extension, String defaultMainClass) {
static String getMainClass(String side, LoomGradleExtension extension, String defaultMainClass) {
InstallerData installerData = extension.getInstallerData();
if (installerData == null) {

View File

@@ -1,7 +1,7 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
* Copyright (c) 2021 FabricMC
* Copyright (c) 2021-2023 FabricMC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -31,10 +31,12 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import org.gradle.api.Named;
import org.gradle.api.Project;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.SourceSet;
import net.fabricmc.loom.LoomGradleExtension;
@@ -74,6 +76,14 @@ public final class RunConfigSettings implements Named {
*/
private String defaultMainClass;
/**
* The main class of the run configuration.
*
* <p>If unset, {@link #defaultMainClass} is used as the fallback, including the overwritten main class
* from installer files.
*/
private final Property<String> mainClass;
/**
* The source set getter, which obtains the source set from the given project.
*/
@@ -106,6 +116,11 @@ public final class RunConfigSettings implements Named {
this.project = project;
this.extension = LoomGradleExtension.get(project);
this.ideConfigGenerated = extension.isRootProject();
this.mainClass = project.getObjects().property(String.class).convention(project.provider(() -> {
Objects.requireNonNull(environment, "Run config " + baseName + " must specify environment");
Objects.requireNonNull(defaultMainClass, "Run config " + baseName + " must specify default main class");
return RunConfig.getMainClass(environment, extension, defaultMainClass);
}));
setSource(p -> {
final String sourceSetName = MinecraftSourceSets.get(p).getSourceSetForEnv(getEnvironment());
@@ -160,6 +175,16 @@ public final class RunConfigSettings implements Named {
this.defaultMainClass = defaultMainClass;
}
/**
* The main class of the run configuration.
*
* <p>If unset, {@link #getDefaultMainClass defaultMainClass} is used as the fallback,
* including the overwritten main class from installer files.
*/
public Property<String> getMainClass() {
return mainClass;
}
public String getRunDir() {
return runDir;
}