Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,8 @@ public void enable(Project project, LegacyForgeModdingSettings settings, LegacyF
configurations.getByName(DataFileCollections.CONFIGURATION_ACCESS_TRANSFORMERS),
configurations.getByName(DataFileCollections.CONFIGURATION_INTERFACE_INJECTION_DATA),
versionCapabilities,
settings.isDisableRecompilation());
settings.isDisableRecompilation(),
false);

var runs = ModDevRunWorkflow.create(
project,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@ public void addModdingDependenciesTo(SourceSet sourceSet) {
ModDevArtifactsWorkflow.get(project).addToSourceSet(sourceSet);
}

public void addModdingDependenciesTo(SourceSet sourceSet,boolean includeClient) {
ModDevArtifactsWorkflow.get(project).addToSourceSet(sourceSet, includeClient);
}

/**
* After enabling modding, you can retrieve the version of the modding platform you picked using this getter.
* I.e. the NeoForge or Forge version. If you chose to enable vanilla-only mode, this getter will throw.
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/net/neoforged/moddevgradle/dsl/ModModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public ModModel() {
// TODO: We could potentially do a bit of name validation
getModSourceSets().convention(List.of());
getModSourceSets().finalizeValueOnRead();
getModClientSourceSets().convention(List.of());
getModClientSourceSets().finalizeValueOnRead();
}

@Override
Expand All @@ -23,7 +25,13 @@ public ModModel() {
// Do not name getSourceSets or it will conflict with project.sourceSets in scripts.
public abstract ListProperty<SourceSet> getModSourceSets();

public abstract ListProperty<SourceSet> getModClientSourceSets();

public void sourceSet(SourceSet sourceSet) {
getModSourceSets().add(sourceSet);
}

public void clientSourceSet(SourceSet sourceSet) {
getModClientSourceSets().add(sourceSet);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public abstract class ModdingVersionSettings {
@Nullable
private String neoFormVersion;

private boolean splitDist = false;

private Set<SourceSet> enabledSourceSets = new HashSet<>();

private boolean disableRecompilation = "true".equals(System.getenv("CI"));
Expand Down Expand Up @@ -77,4 +79,16 @@ public boolean isDisableRecompilation() {
public void setDisableRecompilation(boolean disableRecompilation) {
this.disableRecompilation = disableRecompilation;
}

/**
* Enables the split-distribution source set layout. This creates a {@code client}
* source set and wires it for client-only mod classes.
*/
public boolean isSplitDist() {
return splitDist;
}

public void setSplitDist(boolean splitDist) {
this.splitDist = splitDist;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ private void addEclipseLaunchConfiguration(Project project,
}

// This is the actual main launch configuration that launches the game
var modFoldersProvider = getModFoldersProvider(project, run.getLoadedMods(), null);
var modFoldersProvider = getModFoldersProvider(project, run.getLoadedMods(), null, RunUtils.getRequiredType(project, run));
var config = JavaApplicationLaunchConfig.builder(eclipseProjectName)
.vmArgs(
RunUtils.escapeJvmArg(RunUtils.getArgFileParameter(prepareTask.getVmArgsFile().get())),
Expand All @@ -168,12 +168,13 @@ private void addEclipseLaunchConfiguration(Project project,

protected static ModFoldersProvider getModFoldersProvider(Project project,
Provider<Set<ModModel>> modsProvider,
@Nullable Provider<ModModel> testedMod) {
@Nullable Provider<ModModel> testedMod,
Provider<String> runType) {
var folders = RunUtils.buildModFolders(project, modsProvider, testedMod, (sourceSet, output) -> {
output.from(RunUtils.findSourceSetProject(project, sourceSet).getProjectDir().toPath()
.resolve("bin")
.resolve(sourceSet.getName()));
});
}, runType);

var modFoldersProvider = project.getObjects().newInstance(ModFoldersProvider.class);
modFoldersProvider.getModFolders().set(folders);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ public void configureTesting(Provider<Set<ModModel>> loadedMods,
var intellijVmArgsFile = runArgsDir.map(dir -> dir.file("intellijVmArgs.txt"));

var outputDirectory = IntelliJOutputDirectoryValueSource.getIntellijOutputDirectory(project);
var ideSpecificVmArgs = RunUtils.escapeJvmArg(getModFoldersProvider(project, outputDirectory, loadedMods, testedMod).getArgument());
var ideSpecificVmArgs = RunUtils.escapeJvmArg(getModFoldersProvider(project, outputDirectory, loadedMods, testedMod, project.provider(() -> "client")).getArgument());
try {
var vmArgsFilePath = intellijVmArgsFile.get().getAsFile().toPath();
Files.createDirectories(vmArgsFilePath.getParent());
Expand Down Expand Up @@ -185,7 +185,7 @@ private static void addIntelliJRunConfiguration(Project project,
}
appRun.setModuleName(getIntellijModuleName(project, sourceSet));
appRun.setWorkingDirectory(run.getGameDirectory().get().getAsFile().getAbsolutePath());
var modFoldersProvider = getModFoldersProvider(project, outputDirectory, run.getLoadedMods(), null);
var modFoldersProvider = getModFoldersProvider(project, outputDirectory, run.getLoadedMods(), null, RunUtils.getRequiredType(project, run));
appRun.setEnvs(RunUtils.replaceModClassesEnv(run, modFoldersProvider));
appRun.setJvmArgs(
RunUtils.escapeJvmArg(RunUtils.getArgFileParameter(prepareTask.getVmArgsFile().get()))
Expand Down Expand Up @@ -232,15 +232,16 @@ public boolean shouldUseCombinedSourcesAndClassesArtifact() {
private static ModFoldersProvider getModFoldersProvider(Project project,
@Nullable Function<Project, File> outputDirectory,
Provider<Set<ModModel>> modsProvider,
@Nullable Provider<ModModel> testedMod) {
@Nullable Provider<ModModel> testedMod,
Provider<String> runType) {
Provider<Map<String, ModFolder>> folders;
if (outputDirectory != null) {
folders = RunUtils.buildModFolders(project, modsProvider, testedMod, (sourceSet, output) -> {
var sourceSetDir = outputDirectory.apply(RunUtils.findSourceSetProject(project, sourceSet)).toPath().resolve(getIdeaOutName(sourceSet));
output.from(sourceSetDir.resolve("classes"), sourceSetDir.resolve("resources"));
});
}, runType);
} else {
folders = RunUtils.getModFoldersForGradle(project, modsProvider, testedMod);
folders = RunUtils.getModFoldersForGradle(project, modsProvider, testedMod, runType);
}

var modFoldersProvider = project.getObjects().newInstance(ModFoldersProvider.class);
Expand Down
Loading
Loading