diff --git a/src/main/java/net/neoforged/moddevgradle/dsl/RunModel.java b/src/main/java/net/neoforged/moddevgradle/dsl/RunModel.java index db701542..ce73f3f8 100644 --- a/src/main/java/net/neoforged/moddevgradle/dsl/RunModel.java +++ b/src/main/java/net/neoforged/moddevgradle/dsl/RunModel.java @@ -65,6 +65,7 @@ public RunModel(String name, Project project, Iterable defaultMods) { ideName = project.getName() + " - " + ideName; } getIdeName().convention(ideName); + getIdeFolderName().convention(""); getSourceSet().convention(ExtensionUtils.getSourceSets(project).getByName(SourceSet.MAIN_SOURCE_SET_NAME)); } @@ -80,6 +81,12 @@ public String getName() { */ public abstract Property getIdeName(); + /** + * Name for the folder the run configuration is contained by in the IDE. + * If this is set to {@code ""}, no folder will be used. + */ + public abstract Property getIdeFolderName(); + /** * Directory that the game will run in. Defaults to {@code run/}. */ diff --git a/src/main/java/net/neoforged/moddevgradle/internal/IntelliJIntegration.java b/src/main/java/net/neoforged/moddevgradle/internal/IntelliJIntegration.java index 2c23eb6d..50f08e80 100644 --- a/src/main/java/net/neoforged/moddevgradle/internal/IntelliJIntegration.java +++ b/src/main/java/net/neoforged/moddevgradle/internal/IntelliJIntegration.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -175,7 +176,7 @@ private static void addIntelliJRunConfiguration(Project project, @Nullable Function outputDirectory, RunModel run, PrepareRun prepareTask) { - var appRun = new Application(run.getIdeName().get(), project); + var appRun = new ExtendedApplication(run.getIdeName().get(), project, getExtraIntelijRunProperties(run)); var sourceSets = ExtensionUtils.getSourceSets(project); var sourceSet = run.getSourceSet().get(); // Validate that the source set is part of this project @@ -269,4 +270,29 @@ private static String getIntellijModuleName(Project project, SourceSet sourceSet moduleName.append(sourceSet.getName()); return moduleName.toString(); } + + private static Map getExtraIntelijRunProperties(RunModel run) { + var extraProperties = new HashMap(); + if (!run.getIdeFolderName().get().isEmpty()) { + extraProperties.put("folderName", run.getIdeFolderName().get()); + } + return extraProperties; + } + + private static class ExtendedApplication extends Application { + private final Map extraProperties; + + public ExtendedApplication(String name, Project project, Map extraProperties) { + super(name, project); + this.extraProperties = extraProperties; + } + + @Override + public Map toMap() { + @SuppressWarnings("unchecked") + var m = (Map) super.toMap(); + m.putAll(extraProperties); + return m; + } + } } diff --git a/testproject/build.gradle b/testproject/build.gradle index 6b877ab8..140c170f 100644 --- a/testproject/build.gradle +++ b/testproject/build.gradle @@ -56,6 +56,10 @@ neoForge { client() programArguments.addAll('--username', 'Dev2') } + folderedClient { + client() + ideFolderName = "Neo Test Folder" + } clientAuth { client() devLogin = true