Skip to content

Commit e3d5b35

Browse files
committed
Small unpushed fixes (more to come later)
1 parent 79d76dd commit e3d5b35

12 files changed

+61
-23
lines changed

src/main/groovy/net/minecraftforge/gradle/DeobfExtensionImpl.groovy

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ import org.gradle.api.attributes.AttributeContainer
1919
import org.gradle.api.model.ObjectFactory
2020
import org.gradle.api.provider.Property
2121
import org.gradle.api.provider.Provider
22+
import org.gradle.api.reflect.HasPublicType
23+
import org.gradle.api.reflect.TypeOf
2224

2325
@CompileStatic
2426
@PackageScope([PackageScopeTarget.CLASS, PackageScopeTarget.CONSTRUCTORS])
25-
final class DeobfExtensionImpl implements DeobfExtension {
27+
final class DeobfExtensionImpl implements DeobfExtension, HasPublicType {
2628
private final Project project
2729
private final ForgeGradleProblems problems
2830

@@ -40,6 +42,11 @@ final class DeobfExtensionImpl implements DeobfExtension {
4042
this.mappingsProp = objects.property(MinecraftExtension.Mappings).convention(mappings)
4143
}
4244

45+
@Override
46+
TypeOf<?> getPublicType() {
47+
TypeOf.typeOf(DeobfExtension)
48+
}
49+
4350
private MinecraftExtension.Mappings getMappings() {
4451
this.mappingsProp.get()
4552
}

src/main/groovy/net/minecraftforge/gradle/ForgeGradleExtensionImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77
import org.gradle.api.plugins.ExtensionAware;
88
import org.gradle.api.plugins.PluginAware;
9+
import org.gradle.api.reflect.HasPublicType;
10+
import org.gradle.api.reflect.TypeOf;
911

10-
record ForgeGradleExtensionImpl() implements ForgeGradleExtension {
12+
record ForgeGradleExtensionImpl() implements ForgeGradleExtension, HasPublicType {
1113
private static final ForgeGradleExtensionImpl INSTANCE = new ForgeGradleExtensionImpl();
1214

1315
static void register(ExtensionAware target) {
@@ -17,4 +19,9 @@ static void register(ExtensionAware target) {
1719
INSTANCE
1820
);
1921
}
22+
23+
@Override
24+
public TypeOf<?> getPublicType() {
25+
return TypeOf.typeOf(ForgeGradleExtension.class);
26+
}
2027
}

src/main/groovy/net/minecraftforge/gradle/ForgeGradlePlugin.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import org.gradle.api.logging.Logger
2020
import org.gradle.api.logging.Logging
2121
import org.gradle.api.model.ObjectFactory
2222
import org.gradle.api.plugins.ExtensionAware
23-
import org.gradle.api.plugins.PluginAware
2423
import org.gradle.api.problems.Problems
2524
import org.gradle.api.provider.Provider
2625
import org.gradle.api.provider.ProviderFactory
@@ -64,7 +63,7 @@ class ForgeGradlePlugin implements Plugin<ExtensionAware> {
6463
@Override
6564
void apply(ExtensionAware target) {
6665
this.globalCaches = this.objects.directoryProperty().convention(
67-
this.objects.directoryProperty().fileValue(this.getGradleUserHomeDir(target)).dir(Constants.CACHES_LOCATION).map(this.enhancedProblems.ensureDirectory())
66+
this.objects.directoryProperty().fileValue(this.getGradleUserHomeDir(target)).dir(Constants.CACHES_LOCATION).map(this.enhancedProblems.ensureFileLocation())
6867
)
6968

7069
ForgeGradleExtensionImpl.register(

src/main/groovy/net/minecraftforge/gradle/ForgeGradleProblems.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.gradle.api.artifacts.Dependency;
1010
import org.gradle.api.artifacts.ExternalModuleDependency;
1111
import org.gradle.api.file.Directory;
12+
import org.gradle.api.file.FileSystemLocation;
1213
import org.gradle.api.problems.Problem;
1314
import org.gradle.api.problems.ProblemGroup;
1415
import org.gradle.api.problems.ProblemId;
@@ -287,22 +288,24 @@ RuntimeException accessTransformerFailed(RuntimeException e, File inJar, File at
287288
//endregion
288289

289290
//region Utilities
290-
Transformer<Directory, Directory> ensureDirectory() {
291-
return dir -> {
291+
<T extends FileSystemLocation> Transformer<T, T> ensureFileLocation() {
292+
return file -> {
293+
var dir = file instanceof Directory ? file.getAsFile() : file.getAsFile().getParentFile();
292294
try {
293-
Files.createDirectories(dir.getAsFile().toPath());
294-
return dir;
295+
Files.createDirectories(dir.toPath());
295296
} catch (IOException e) {
296297
throw this.getReporter().throwing(e, id("cannot-ensure-directory", "Failed to create directory"), spec -> spec
297298
.details("""
298299
Failed to create a directory required for ForgeGradle to function.
299300
Directory: %s"""
300-
.formatted(dir.getAsFile().getAbsolutePath()))
301+
.formatted(dir.getAbsolutePath()))
301302
.severity(Severity.ERROR)
302303
.stackLocation()
303304
.solution("Ensure that the you have write access to the directory that needs to be created.")
304305
.solution(HELP_MESSAGE));
305306
}
307+
308+
return file;
306309
};
307310
}
308311
//endregion

src/main/groovy/net/minecraftforge/gradle/MinecraftDependencyImpl.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import org.gradle.api.attributes.Attribute
1818
import org.gradle.api.file.RegularFile
1919
import org.gradle.api.model.ObjectFactory
2020
import org.gradle.api.plugins.ExtraPropertiesExtension.UnknownPropertyException
21-
import org.gradle.api.problems.Problems
2221
import org.gradle.api.provider.Property
2322
import org.gradle.api.provider.Provider
2423
import org.gradle.api.provider.ProviderFactory

src/main/groovy/net/minecraftforge/gradle/MinecraftDependencyInternal.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,22 @@
1919
import org.gradle.api.artifacts.capability.CapabilitySelector;
2020
import org.gradle.api.attributes.AttributeContainer;
2121
import org.gradle.api.capabilities.Capability;
22+
import org.gradle.api.reflect.HasPublicType;
23+
import org.gradle.api.reflect.TypeOf;
2224
import org.jetbrains.annotations.Nullable;
2325

2426
import java.util.List;
2527
import java.util.Map;
2628
import java.util.Set;
2729

28-
sealed interface MinecraftDependencyInternal extends MinecraftDependency permits MinecraftDependencyImpl {
30+
sealed interface MinecraftDependencyInternal extends MinecraftDependency, HasPublicType permits MinecraftDependencyImpl {
2931
ExternalModuleDependency getDelegate();
3032

33+
@Override
34+
default TypeOf<?> getPublicType() {
35+
return TypeOf.typeOf(MinecraftDependency.class);
36+
}
37+
3138
@Override
3239
default boolean isForce() {
3340
return this.getDelegate().isForce();

src/main/groovy/net/minecraftforge/gradle/MinecraftExtension.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.gradle.api.file.RegularFile;
2222
import org.gradle.api.provider.Provider;
2323
import org.gradle.api.provider.ProviderConvertible;
24+
import org.gradle.api.reflect.HasPublicType;
25+
import org.gradle.api.reflect.TypeOf;
2426
import org.gradle.nativeplatform.OperatingSystemFamily;
2527
import org.jetbrains.annotations.Contract;
2628
import org.jetbrains.annotations.UnknownNullability;
@@ -190,7 +192,7 @@ void accessTransformer(
190192
void runs(
191193
@DelegatesTo(NamedDomainObjectContainer.class)
192194
@ClosureParams(value = SimpleType.class, options = "org.gradle.api.NamedDomainObjectContainer<net.minecraftforge.gradle.SlimeLauncherOptions>")
193-
Closure<Void> closure
195+
Closure closure
194196
);
195197

196198
/// Configures the Slime Launcher options for this project, which will be used to create the launcher tasks.

src/main/groovy/net/minecraftforge/gradle/MinecraftExtensionImpl.groovy

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ import org.gradle.api.provider.MapProperty
3434
import org.gradle.api.provider.Property
3535
import org.gradle.api.provider.Provider
3636
import org.gradle.api.provider.ProviderFactory
37+
import org.gradle.api.reflect.HasPublicType
38+
import org.gradle.api.reflect.TypeOf
3739

3840
import java.util.concurrent.Callable
3941

4042
@CompileStatic
41-
@PackageScope final class MinecraftExtensionImpl implements MinecraftExtension {
43+
@PackageScope final class MinecraftExtensionImpl implements MinecraftExtension, HasPublicType {
4244
private static final String EXT_MAVEN_REPOS = 'fg_mc_maven_repos'
4345
private static final String EXT_MAPPINGS = 'fg_mc_mappings'
4446

@@ -77,11 +79,16 @@ import java.util.concurrent.Callable
7779
this.plugin = plugin
7880
this.objects = objects
7981

80-
this.output = objects.directoryProperty().convention(plugin.globalCaches.dir('mavenizer/output').map(problems.ensureDirectory()))
82+
this.output = objects.directoryProperty().convention(plugin.globalCaches.dir('mavenizer/output').map(problems.ensureFileLocation()))
8183

8284
this.mappingsProp = objects.property(Mappings)
8385
}
8486

87+
@Override
88+
TypeOf<?> getPublicType() {
89+
TypeOf.typeOf(MinecraftExtension)
90+
}
91+
8592
@PackageScope ForgeGradleProblems getProblems() {
8693
this.plugin.enhancedProblems
8794
}
@@ -170,7 +177,7 @@ import java.util.concurrent.Callable
170177
this.providers = providers
171178

172179
this.localCaches = MinecraftExtensionImpl.this.objects.directoryProperty().convention(
173-
this.layout.buildDirectory.dir(Constants.CACHES_LOCATION).map(MinecraftExtensionImpl.this.problems.ensureDirectory())
180+
this.layout.buildDirectory.dir(Constants.CACHES_LOCATION).map(MinecraftExtensionImpl.this.problems.ensureFileLocation())
174181
)
175182

176183
this.runs = SlimeLauncherOptions.container(MinecraftExtensionImpl.this.objects, layout)
@@ -223,8 +230,8 @@ import java.util.concurrent.Callable
223230
} else if (allDependencies.size() > 1) {
224231
throw new IllegalArgumentException('Cannot create run configurations for more than one Minecraft dependency')
225232
} else {
226-
var cacheDir = MinecraftExtensionImpl.this.plugin.globalCaches.dir("slime-launcher/cache/${this.minecraftDependencies[0].group.replace('.', '/')}/${this.minecraftDependencies[0].name}/${this.minecraftDependencies[0].version}").map(MinecraftExtensionImpl.this.problems.ensureDirectory())
227-
var metadataDir = MinecraftExtensionImpl.this.objects.directoryProperty().value(cacheDir).dir('metadata').map(MinecraftExtensionImpl.this.problems.ensureDirectory())
233+
var cacheDir = MinecraftExtensionImpl.this.plugin.globalCaches.dir("slime-launcher/cache/${this.minecraftDependencies[0].group.replace('.', '/')}/${this.minecraftDependencies[0].name}/${this.minecraftDependencies[0].version}").map(MinecraftExtensionImpl.this.problems.ensureFileLocation())
234+
var metadataDir = MinecraftExtensionImpl.this.objects.directoryProperty().value(cacheDir).dir('metadata').map(MinecraftExtensionImpl.this.problems.ensureFileLocation())
228235
var metadataZip = MinecraftExtensionImpl.this.output.file(Util.artifactPath(this.minecraftDependencies[0].group, this.minecraftDependencies[0].name, this.minecraftDependencies[0].version, 'metadata', 'zip'))
229236

230237
try {

src/main/groovy/net/minecraftforge/gradle/SlimeLauncherExec.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import java.nio.file.Files
4848
)
4949

5050
var caches = task.objectFactory.directoryProperty().value(task.globalCaches.dir("slime-launcher/cache/${dependency.group.replace('.', '/')}/${dependency.name}/${dependency.version}"))
51-
task.cacheDir.set caches.map(task.problems.ensureDirectory())
51+
task.cacheDir.set caches.map(task.problems.ensureFileLocation())
5252
task.metadataZip.set metadataZip
5353

5454
task.inherit(configs, options.name)

src/main/groovy/net/minecraftforge/gradle/SlimeLauncherOptions.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import org.gradle.api.provider.MapProperty;
1616
import org.gradle.api.provider.Property;
1717
import org.gradle.api.provider.Provider;
18+
import org.gradle.api.reflect.HasPublicType;
19+
import org.gradle.api.reflect.TypeOf;
1820
import org.gradle.api.tasks.Classpath;
1921
import org.gradle.api.tasks.Input;
2022
import org.gradle.api.tasks.InputDirectory;
@@ -563,12 +565,17 @@ private SlimeLauncherOptions(String name) {
563565

564566
abstract ProjectLayout getLayout();
565567

566-
abstract non-sealed static class Impl extends SlimeLauncherOptions {
568+
abstract non-sealed static class Impl extends SlimeLauncherOptions implements HasPublicType {
567569
@Inject
568570
public Impl(String name) {
569571
super(name);
570572
}
571573

574+
@Override
575+
public TypeOf<?> getPublicType() {
576+
return TypeOf.typeOf(SlimeLauncherOptions.class);
577+
}
578+
572579
@Override
573580
protected abstract @Inject ObjectFactory getObjects();
574581

0 commit comments

Comments
 (0)