Skip to content

Commit a0300fd

Browse files
committed
Implement the required handling of the new artifact mode directly into NG7
1 parent d9deab1 commit a0300fd

16 files changed

Lines changed: 180 additions & 29 deletions

File tree

dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/util/Constants.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Constants {
1414
public static final String BINPARCHER_TOOL_ARTIFACT = "net.neoforged.installertools:binarypatcher:2.1.7:fatjar"
1515
public static final String ACCESSTRANSFORMER_TOOL_ARTIFACT = "net.neoforged.accesstransformers:at-cli:11.0.2:fatjar"
1616
public static final String FART_TOOL_ARTIFACT = "net.neoforged:AutoRenamingTool:2.0.4:all"
17-
public static final String INSTALLERTOOLS_TOOL_ARTIFACT = "net.neoforged.installertools:installertools:4.0.1:fatjar"
17+
public static final String INSTALLERTOOLS_TOOL_ARTIFACT = "net.neoforged.installertools:installertools:4.0.6:fatjar"
1818
public static final String JARSPLITTER_TOOL_ARTIFACT = "net.neoforged.installertools:jarsplitter:2.1.7"
1919
public static final String DECOMPILER_TOOL_ARTIFACT = "org.vineflower:vineflower:1.10.1"
2020

dsl/userdev/src/main/groovy/net/neoforged/gradle/dsl/userdev/configurations/UserdevProfile.groovy

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,11 @@ abstract class UserdevProfile implements ConfigurableDSLElement<UserdevProfile>
261261
@Optional
262262
abstract Property<Boolean> getIsNoLegacyClasspath();
263263

264+
@Input
265+
@DSLProperty
266+
@Optional
267+
abstract Property<Boolean> getUsesCombinedBinaryPatches();
268+
264269

265270
@CompileStatic
266271
static class Serializer implements JsonSerializer<Features>, JsonDeserializer<Features> {
@@ -280,6 +285,7 @@ abstract class UserdevProfile implements ConfigurableDSLElement<UserdevProfile>
280285
final Features instance = objectFactory.newInstance(Features.class)
281286

282287
deserializeBool(instance.isNoLegacyClasspath, object, "noLegacyClasspath")
288+
deserializeBool(instance.usesCombinedBinaryPatches, object, "combinedBinaryPatches")
283289

284290
return instance
285291
}
@@ -289,6 +295,7 @@ abstract class UserdevProfile implements ConfigurableDSLElement<UserdevProfile>
289295
final JsonObject object = new JsonObject();
290296

291297
serializeBool(features.isNoLegacyClasspath, object, "noLegacyClasspath")
298+
deserializeBool(features.usesCombinedBinaryPatches, object, "combinedBinaryPatches")
292299

293300
return object
294301
}

userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/AdvancedFmlTests.groovy

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,41 @@ class AdvancedFmlTests extends BuilderBasedTestSpecification {
179179
}
180180

181181
then:
182-
true
183182
run.output.contains("class net.minecraft.client.Minecraft")
184183
run.task(":neoFormDecompile") == null
185184
}
185+
186+
def "a mod using an enabled decompiler should use the setup to decompile the game"() {
187+
given:
188+
def project = create("enabled_decompiler_uses_setup", {
189+
it.build("""
190+
java {
191+
toolchain {
192+
languageVersion = JavaLanguageVersion.of(21)
193+
}
194+
}
195+
196+
repositories {
197+
mavenCentral()
198+
}
199+
200+
dependencies {
201+
implementation 'net.neoforged:neoforge:[21.10.60-beta,)'
202+
}
203+
""")
204+
it.withToolchains()
205+
it.withGlobalCacheDirectory(tempDir)
206+
it.property("neogradle.subsystems.decompiler.enabled", "false")
207+
})
208+
209+
when:
210+
def run = project.run {
211+
it.tasks(':neoFormDecompile')
212+
it.stacktrace()
213+
it.debug()
214+
}
215+
216+
then:
217+
run.task(":neoFormSetup") != null
218+
}
186219
}

userdev/src/main/java/net/neoforged/gradle/userdev/runtime/extension/UserDevRuntimeExtension.java

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@
22

33
import net.neoforged.gradle.common.dependency.ExtraJarDependencyManager;
44
import net.neoforged.gradle.common.runtime.extensions.CommonRuntimeExtension;
5-
import net.neoforged.gradle.common.runtime.tasks.DefaultExecute;
65
import net.neoforged.gradle.common.util.*;
76
import net.neoforged.gradle.common.util.run.TypesUtil;
87
import net.neoforged.gradle.dsl.common.extensions.subsystems.Conventions;
98
import net.neoforged.gradle.dsl.common.extensions.subsystems.Decompiler;
109
import net.neoforged.gradle.dsl.common.extensions.subsystems.Subsystems;
1110
import net.neoforged.gradle.dsl.common.runs.run.RunManager;
1211
import net.neoforged.gradle.dsl.common.runs.type.RunTypeManager;
13-
import net.neoforged.gradle.dsl.common.runtime.tasks.Runtime;
1412
import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskTreeAdapter;
1513
import net.neoforged.gradle.dsl.common.tasks.WithOutput;
1614
import net.neoforged.gradle.dsl.common.util.CommonRuntimeUtils;
@@ -27,16 +25,13 @@
2725
import org.gradle.api.artifacts.Configuration;
2826
import org.gradle.api.artifacts.Dependency;
2927
import org.gradle.api.file.FileTree;
30-
import org.gradle.api.file.RegularFile;
3128
import org.gradle.api.provider.Provider;
32-
import org.gradle.api.tasks.TaskProvider;
3329
import org.jetbrains.annotations.NotNull;
3430
import org.jetbrains.annotations.Nullable;
3531

3632
import java.io.File;
3733
import java.util.List;
3834
import java.util.Map;
39-
import java.util.Optional;
4035
import java.util.function.BiConsumer;
4136

4237
public abstract class UserDevRuntimeExtension extends CommonRuntimeExtension<UserDevRuntimeSpecification, UserDevRuntimeSpecification.Builder, UserDevRuntimeDefinition>
@@ -61,19 +56,7 @@ public UserDevRuntimeExtension(Project project)
6156
"AdditionalDependenciesFor" + spec.getIdentifier()
6257
);
6358

64-
if (!useCombinedJarWithNeoForgeOnRecompile(spec))
65-
{
66-
//Create the client-extra jar dependency.
67-
final Dependency clientExtraJar = spec.getProject().getDependencies().create(
68-
ExtraJarDependencyManager.generateClientCoordinateFor(spec.getMinecraftVersion())
69-
);
70-
71-
//Add it as a user dev dependency, this will trigger replacement, which will need to be addressed down-below.
72-
userDevAdditionalDependenciesConfiguration.getDependencies().add(
73-
clientExtraJar
74-
);
75-
}
76-
else
59+
if (useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
7760
{
7861
userDevAdditionalDependenciesConfiguration.getDependencies().addLater(
7962
userDevProfile.getUniversalJarArtifactCoordinate().map(spec.getProject().getDependencies()::create)
@@ -103,7 +86,7 @@ public UserDevRuntimeExtension(Project project)
10386

10487
builder.withPostTaskAdapter("patch", createPatchAdapter(userDevJar, userDevProfile.getSourcePatchesDirectory().get()));
10588

106-
if (!useCombinedJarWithNeoForgeOnRecompile(spec))
89+
if (!useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
10790
{
10891
builder.withTaskCustomizer("inject", InjectZipContent.class, task -> {
10992
FileTree injectionDirectoryTree;
@@ -128,6 +111,19 @@ public UserDevRuntimeExtension(Project project)
128111

129112
spec.setMinecraftVersion(neoFormRuntimeDefinition.getSpecification().getMinecraftVersion());
130113

114+
if (!useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
115+
{
116+
//Create the client-extra jar dependency.
117+
final Dependency clientExtraJar = spec.getProject().getDependencies().create(
118+
ExtraJarDependencyManager.generateClientCoordinateFor(spec.getMinecraftVersion())
119+
);
120+
121+
//Add it as a user dev dependency, this will trigger replacement, which will need to be addressed down-below.
122+
userDevAdditionalDependenciesConfiguration.getDependencies().add(
123+
clientExtraJar
124+
);
125+
}
126+
131127
return new UserDevRuntimeDefinition(
132128
spec,
133129
neoFormRuntimeDefinition,
@@ -143,7 +139,7 @@ public UserDevRuntimeExtension(Project project)
143139
final FileTree userDevJar)
144140
{
145141
return (steps, functions) -> {
146-
if (!useCombinedJarWithNeoForgeOnRecompile(spec))
142+
if (!useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
147143
{
148144
return;
149145
}
@@ -172,7 +168,7 @@ public UserDevRuntimeExtension(Project project)
172168
)
173169
);
174170

175-
final Subsystems parchment = spec.getProject().getExtensions().getByType(Subsystems.class);
171+
final Subsystems subsystems = spec.getProject().getExtensions().getByType(Subsystems.class);
176172
final SetupConfiguration configuration = buildSetupConfiguration(
177173
spec,
178174
userDevProfile,
@@ -183,7 +179,7 @@ public UserDevRuntimeExtension(Project project)
183179
functions.put(
184180
"setup",
185181
new NeoFormConfigConfigurationSpecV1.Function(
186-
parchment.getTools().getInstallerTools().get(),
182+
subsystems.getTools().getInstallerTools().get(),
187183
configuration.arguments()
188184
)
189185
);
@@ -206,7 +202,7 @@ private record SetupConfiguration(
206202
private SetupConfiguration buildSetupConfiguration(UserDevRuntimeSpecification spec, final UserdevProfile userDevProfile, final FileTree userDevJar)
207203
{
208204
final Decompiler decompilerSubsystemConfiguration = getProject().getExtensions().getByType(Subsystems.class).getDecompiler();
209-
if (decompilerSubsystemConfiguration.getIsDisabled().get() && useCombinedJarWithNeoForgeOnRecompile(spec))
205+
if (decompilerSubsystemConfiguration.getIsDisabled().get() && useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
210206
{
211207
return new SetupConfiguration(
212208
List.of(
@@ -249,10 +245,11 @@ private SetupConfiguration buildSetupConfiguration(UserDevRuntimeSpecification s
249245
);
250246
}
251247

252-
private boolean useCombinedJarWithNeoForgeOnRecompile(final UserDevRuntimeSpecification specification)
248+
private boolean useCombinedJarWithNeoForgeOnRecompile(final UserDevRuntimeSpecification specification, final UserdevProfile userDevProfile)
253249
{
254-
//TODO: Read feature flag.
255-
return true;
250+
return userDevProfile.getFeatures()
251+
.flatMap(UserdevProfile.Features::getUsesCombinedBinaryPatches)
252+
.getOrElse(false);
256253
}
257254

258255
@Override
@@ -296,7 +293,7 @@ protected void afterRegistration(UserDevRuntimeDefinition runtime)
296293
private void bakeDefinition(UserDevRuntimeDefinition definition)
297294
{
298295
final Decompiler decompilerSubsystemConfiguration = this.getProject().getExtensions().getByType(Subsystems.class).getDecompiler();
299-
if (decompilerSubsystemConfiguration.getIsDisabled().get() && useCombinedJarWithNeoForgeOnRecompile(definition.getSpecification()))
296+
if (decompilerSubsystemConfiguration.getIsDisabled().get() && useCombinedJarWithNeoForgeOnRecompile(definition.getSpecification(), definition.getUserdevConfiguration()))
300297
{
301298
definition.getNeoFormRuntimeDefinition().getRawJarTask().configure(task -> {
302299
task.getInput().set(definition.getNeoFormRuntimeDefinition().getTask("setup").flatMap(WithOutput::getOutput));
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
plugins {
2+
id 'net.neoforged.gradle.userdev'
3+
}
4+
5+
6+
java {
7+
toolchain {
8+
languageVersion = JavaLanguageVersion.of(21)
9+
}
10+
}
11+
12+
repositories {
13+
mavenCentral()
14+
}
15+
16+
dependencies {
17+
implementation 'net.neoforged:neoforge:+'
18+
}
19+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
neogradle.subsystems.decompiler.enabled=false
2+
net.neoforged.gradle.caching.cacheDirectory=/tmp/spock_a_mod_using_an_enab_0_tempDir11161106062294914332/.ng-cache
3+
org.gradle.console=rich
4+
org.gradle.jvmargs=-Xmx8000m
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
plugins {
2+
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
3+
}
4+
5+
rootProject.name = 'disabled_decompiler_runs_game'
6+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
package net.neoforged.gradle.userdev;
3+
4+
import net.minecraft.client.Minecraft;
5+
import net.neoforged.fml.common.Mod;
6+
7+
@Mod("neogradle_test")
8+
public class FunctionalTests {
9+
public FunctionalTests() {
10+
System.out.println(Minecraft.class.toString());
11+
}
12+
}
13+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
license="MIT"
3+
[[mods]]
4+
modId="neogradle_test"
5+
version="1.0"
6+
displayName="NeoGradle Test"
7+
description='''Test Mod for NeoGradle'''
8+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
plugins {
2+
id 'net.neoforged.gradle.userdev'
3+
}
4+
5+
6+
java {
7+
toolchain {
8+
languageVersion = JavaLanguageVersion.of(21)
9+
}
10+
}
11+
12+
repositories {
13+
mavenCentral()
14+
}
15+
16+
dependencies {
17+
implementation 'net.neoforged:neoforge:[21.10.60-beta,)'
18+
}
19+

0 commit comments

Comments
 (0)