aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc
diff options
context:
space:
mode:
authorJuuxel <6596629+Juuxel@users.noreply.github.com>2021-09-20 19:10:50 +0300
committerGitHub <noreply@github.com>2021-09-21 00:10:50 +0800
commit979a9d488285ff25573e62a38a1054603f281a7c (patch)
treea844d2dbc7eb1831188ad2974d19e2e6b6c5d246 /src/main/java/net/fabricmc
parent6522a826e1adba9a55070df3d4ae38ecfcfce565 (diff)
downloadarchitectury-loom-979a9d488285ff25573e62a38a1054603f281a7c.tar.gz
architectury-loom-979a9d488285ff25573e62a38a1054603f281a7c.tar.bz2
architectury-loom-979a9d488285ff25573e62a38a1054603f281a7c.zip
Move all Forge-only properties to Forge extension (#46)
Diffstat (limited to 'src/main/java/net/fabricmc')
-rw-r--r--src/main/java/net/fabricmc/loom/LoomGradleExtension.java8
-rw-r--r--src/main/java/net/fabricmc/loom/api/ForgeExtensionAPI.java93
-rw-r--r--src/main/java/net/fabricmc/loom/api/ForgeLocalMod.java88
-rw-r--r--src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java39
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java18
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/mods/forge/ForgeLocalMod.java41
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java10
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java2
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java7
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java5
-rw-r--r--src/main/java/net/fabricmc/loom/extension/ForgeExtensionImpl.java84
-rw-r--r--src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java100
-rw-r--r--src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java15
-rw-r--r--src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java81
-rw-r--r--src/main/java/net/fabricmc/loom/util/PropertyUtil.java45
15 files changed, 355 insertions, 281 deletions
diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
index d94aeffa..c2d41460 100644
--- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
+++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
@@ -128,16 +128,20 @@ public interface LoomGradleExtension extends LoomGradleExtensionAPI {
return getDependencyManager().getProvider(McpConfigProvider.class);
}
- @Override
+ default boolean isDataGenEnabled() {
+ return isForge() && !getForge().getDataGenMods().isEmpty();
+ }
+
default boolean isForgeAndOfficial() {
return isForge() && getMcpConfigProvider().isOfficial();
}
- @Override
default boolean isForgeAndNotOfficial() {
return isForge() && !getMcpConfigProvider().isOfficial();
}
+ boolean supportsInclude();
+
default SrgProvider getSrgProvider() {
return getDependencyManager().getProvider(SrgProvider.class);
}
diff --git a/src/main/java/net/fabricmc/loom/api/ForgeExtensionAPI.java b/src/main/java/net/fabricmc/loom/api/ForgeExtensionAPI.java
index 7cfc639c..a2dbd80b 100644
--- a/src/main/java/net/fabricmc/loom/api/ForgeExtensionAPI.java
+++ b/src/main/java/net/fabricmc/loom/api/ForgeExtensionAPI.java
@@ -24,13 +24,19 @@
package net.fabricmc.loom.api;
+import java.util.List;
+
+import org.gradle.api.Action;
+import org.gradle.api.NamedDomainObjectContainer;
+import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.SetProperty;
+import org.jetbrains.annotations.ApiStatus;
/**
* This is the forge extension api available exposed to build scripts.
*/
-// TODO: Move other forge-related configuration here
+@ApiStatus.NonExtendable
public interface ForgeExtensionAPI {
/**
* If true, {@linkplain LoomGradleExtensionAPI#getAccessWidenerPath() the project access widener file}
@@ -48,4 +54,89 @@ public interface ForgeExtensionAPI {
* @return the property
*/
SetProperty<String> getExtraAccessWideners();
+
+ /**
+ * A collection of all project access transformers.
+ * The collection should only contain AT files, and not directories or other files.
+ *
+ * <p>If this collection is empty, Loom tries to resolve the AT from the default path
+ * ({@code META-INF/accesstransformer.cfg} in the {@code main} source set).
+ *
+ * @return the collection of AT files
+ */
+ ConfigurableFileCollection getAccessTransformers();
+
+ /**
+ * Adds a {@linkplain #getAccessTransformers() project access transformer}.
+ *
+ * @param file the file, evaluated as per {@link org.gradle.api.Project#file(Object)}
+ */
+ void accessTransformer(Object file);
+
+ /**
+ * A set of all mixin configs related to source set resource roots.
+ * All mixin configs must be added to this property so that they apply in a dev environment.
+ *
+ * @return the property
+ */
+ SetProperty<String> getMixinConfigs();
+
+ /**
+ * Adds mixin config files to {@link #getMixinConfigs() mixinConfigs}.
+ *
+ * @param mixinConfigs the mixin config file paths relative to resource roots
+ */
+ void mixinConfigs(String... mixinConfigs);
+
+ /**
+ * If true, upstream Mixin from Sponge will be replaced with Fabric's fork.
+ * This is enabled by default.
+ *
+ * @return the property
+ */
+ Property<Boolean> getUseFabricMixin();
+
+ /**
+ * A list of mod IDs for mods applied for data generation.
+ * The returned list is unmodifiable but not immutable - it will reflect changes done with
+ * {@link #dataGen(Action)}.
+ *
+ * @return the list
+ */
+ List<String> getDataGenMods();
+
+ /**
+ * Applies data generation settings.
+ *
+ * @param action the action to configure data generation
+ */
+ void dataGen(Action<DataGenConsumer> action);
+
+ /**
+ * Data generation config.
+ */
+ @ApiStatus.NonExtendable
+ interface DataGenConsumer {
+ /**
+ * Adds mod IDs applied for data generation.
+ *
+ * @param modIds the mod IDs
+ */
+ void mod(String... modIds);
+ }
+
+ /**
+ * Configures local mods.
+ *
+ * @param action the configuration action
+ */
+ void localMods(Action<NamedDomainObjectContainer<ForgeLocalMod>> action);
+
+ /**
+ * The container of local mods applied to run configs.
+ *
+ * @return the container
+ * @see ForgeLocalMod
+ */
+ NamedDomainObjectContainer<ForgeLocalMod> getLocalMods();
}
diff --git a/src/main/java/net/fabricmc/loom/api/ForgeLocalMod.java b/src/main/java/net/fabricmc/loom/api/ForgeLocalMod.java
new file mode 100644
index 00000000..b722eb9e
--- /dev/null
+++ b/src/main/java/net/fabricmc/loom/api/ForgeLocalMod.java
@@ -0,0 +1,88 @@
+/*
+ * This file is part of fabric-loom, licensed under the MIT License (MIT).
+ *
+ * Copyright (c) 2021 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
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package net.fabricmc.loom.api;
+
+import java.util.List;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+import org.gradle.api.Named;
+import org.gradle.api.Project;
+import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.tasks.SourceSet;
+
+/**
+ * Data for a mod built from project files in a dev environment.
+ * This data is only used for run config generation (FML needs the paths to mod files).
+ */
+public class ForgeLocalMod implements Named {
+ private final Project project;
+ private final String name;
+ private final List<Supplier<SourceSet>> sourceSets;
+
+ /**
+ * Constructs a local mod.
+ *
+ * @param project the project using this mod
+ * @param name the unique name of this local mod (does not have to correspond to a mod ID)
+ * @param sourceSets the list of source set suppliers corresponding to this mod; must be mutable
+ */
+ public ForgeLocalMod(Project project, String name, List<Supplier<SourceSet>> sourceSets) {
+ this.project = project;
+ this.name = name;
+ this.sourceSets = sourceSets;
+ }
+
+ /**
+ * Adds source sets to this local mod.
+ *
+ * <p>The source sets are resolved like this:
+ * <ul>
+ * <li>a {@link SourceSet} is used as is</li>
+ * <li>all other objects will be converted to source set names with {@link String#valueOf(Object)} and
+ * fetched with {@code sourceSets.findByName(name)}</li>
+ * </ul>
+ *
+ * @param sourceSets the source sets
+ */
+ public void add(Object... sourceSets) {
+ for (Object sourceSet : sourceSets) {
+ if (sourceSet instanceof SourceSet) {
+ this.sourceSets.add(() -> (SourceSet) sourceSet);
+ } else {
+ this.sourceSets.add(() -> project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName(String.valueOf(sourceSet)));
+ }
+ }
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ public Stream<SourceSet> getSourceSets() {
+ return sourceSets.stream().map(Supplier::get);
+ }
+}
diff --git a/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java b/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java
index b9f3b02e..01101461 100644
--- a/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java
+++ b/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java
@@ -26,7 +26,6 @@ package net.fabricmc.loom.api;
import java.io.File;
import java.util.List;
-import java.util.Set;
import java.util.function.Consumer;
import org.gradle.api.Action;
@@ -45,7 +44,6 @@ import net.fabricmc.loom.api.mappings.layered.spec.LayeredMappingSpecBuilder;
import net.fabricmc.loom.configuration.ide.RunConfig;
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
import net.fabricmc.loom.configuration.launch.LaunchProviderSettings;
-import net.fabricmc.loom.configuration.mods.forge.ForgeLocalMod;
import net.fabricmc.loom.configuration.processors.JarProcessor;
import net.fabricmc.loom.util.DeprecationHelper;
import net.fabricmc.loom.util.ModPlatform;
@@ -232,12 +230,6 @@ public interface LoomGradleExtensionAPI {
return getPlatform().get() == ModPlatform.FORGE;
}
- boolean isForgeAndOfficial();
-
- boolean isForgeAndNotOfficial();
-
- boolean supportsInclude();
-
void setGenerateSrgTiny(Boolean generateSrgTiny);
boolean shouldGenerateSrgTiny();
@@ -246,49 +238,20 @@ public interface LoomGradleExtensionAPI {
NamedDomainObjectContainer<LaunchProviderSettings> getLaunchConfigs();
- List<String> getDataGenMods();
-
- default boolean isDataGenEnabled() {
- return isForge() && !getDataGenMods().isEmpty();
- }
-
- void localMods(Action<NamedDomainObjectContainer<ForgeLocalMod>> action);
-
- NamedDomainObjectContainer<ForgeLocalMod> getForgeLocalMods();
-
- void dataGen(Action<DataGenConsumer> action);
-
- interface DataGenConsumer {
- void mod(String... modIds);
- }
-
default void addTaskBeforeRun(String task) {
this.getTasksBeforeRun().add(task);
}
List<String> getTasksBeforeRun();
- void mixinConfig(String... config);
-
- List<String> getMixinConfigs();
-
- void accessTransformer(Object file);
-
- Set<File> getAccessTransformers();
-
- boolean isUseFabricMixin();
-
- void setUseFabricMixin(boolean useFabricMixin);
-
List<Consumer<RunConfig>> getSettingsPostEdit();
/**
* Gets the Forge extension used to configure Forge details.
- * Note that (for now) some Forge configuration is instead in this interface -
- * this is due to change in the future.
*
* @return the Forge extension
* @throws UnsupportedOperationException if running on another platform
+ * @see #isForge()
*/
ForgeExtensionAPI getForge();
diff --git a/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java
index 285f71cc..dd235062 100644
--- a/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java
+++ b/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java
@@ -25,6 +25,7 @@
package net.fabricmc.loom.configuration;
import java.io.IOException;
+import java.util.Set;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
@@ -36,7 +37,6 @@ import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.PublishArtifact;
import org.gradle.api.artifacts.dsl.ArtifactHandler;
import org.gradle.api.plugins.JavaPlugin;
-import org.gradle.api.provider.Property;
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
import org.gradle.api.tasks.bundling.Jar;
import org.jetbrains.annotations.ApiStatus;
@@ -48,6 +48,7 @@ import net.fabricmc.loom.task.AbstractLoomTask;
import net.fabricmc.loom.task.RemapAllSourcesTask;
import net.fabricmc.loom.task.RemapJarTask;
import net.fabricmc.loom.task.RemapSourcesJarTask;
+import net.fabricmc.loom.util.PropertyUtil;
import net.fabricmc.loom.util.SourceRemapper;
import net.fabricmc.loom.util.aw2at.Aw2At;
@@ -117,9 +118,13 @@ public class RemapConfiguration {
}
if (extension.isForge()) {
- ((Jar) jarTask).manifest(manifest -> {
- manifest.attributes(ImmutableMap.of("MixinConfigs", String.join(",", extension.getMixinConfigs())));
- });
+ Set<String> mixinConfigs = PropertyUtil.getAndFinalize(extension.getForge().getMixinConfigs());
+
+ if (!mixinConfigs.isEmpty()) {
+ ((Jar) jarTask).manifest(manifest -> {
+ manifest.attributes(ImmutableMap.of("MixinConfigs", String.join(",", mixinConfigs)));
+ });
+ }
}
if (isDefaultRemap) {
@@ -130,10 +135,9 @@ public class RemapConfiguration {
project.getArtifacts().add("archives", remapJarTask);
if (extension.isForge()) {
- Property<Boolean> convertAws = extension.getForge().getConvertAccessWideners();
- convertAws.finalizeValue();
+ boolean convertAws = PropertyUtil.getAndFinalize(extension.getForge().getConvertAccessWideners());
- if (convertAws.get()) {
+ if (convertAws) {
Aw2At.setup(project, remapJarTask);
remapJarTask.getRemapAccessWidener().set(false);
}
diff --git a/src/main/java/net/fabricmc/loom/configuration/mods/forge/ForgeLocalMod.java b/src/main/java/net/fabricmc/loom/configuration/mods/forge/ForgeLocalMod.java
deleted file mode 100644
index ce5ff0e1..00000000
--- a/src/main/java/net/fabricmc/loom/configuration/mods/forge/ForgeLocalMod.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.fabricmc.loom.configuration.mods.forge;
-
-import java.util.List;
-import java.util.function.Supplier;
-import java.util.stream.Stream;
-
-import org.gradle.api.Named;
-import org.gradle.api.Project;
-import org.gradle.api.plugins.JavaPluginConvention;
-import org.gradle.api.tasks.SourceSet;
-
-public class ForgeLocalMod implements Named {
- private final Project project;
- private final String name;
- private final List<Supplier<SourceSet>> sourceSets;
-
- public ForgeLocalMod(Project project, String name, List<Supplier<SourceSet>> sourceSets) {
- this.project = project;
- this.name = name;
- this.sourceSets = sourceSets;
- }
-
- public void add(Object... sourceSets) {
- for (Object sourceSet : sourceSets) {
- if (sourceSet instanceof SourceSet) {
- this.sourceSets.add(() -> (SourceSet) sourceSet);
- } else {
- this.sourceSets.add(() -> project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName(String.valueOf(sourceSet)));
- }
- }
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- public Stream<SourceSet> getSourceSets() {
- return sourceSets.stream().map(Supplier::get);
- }
-} \ No newline at end of file
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java
index 2fb2c5fa..4da78eb1 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java
@@ -34,6 +34,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.StringJoiner;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -47,6 +48,7 @@ import net.fabricmc.loom.configuration.DependencyProvider;
import net.fabricmc.loom.configuration.RemappedConfigurationEntry;
import net.fabricmc.loom.configuration.launch.LaunchProviderSettings;
import net.fabricmc.loom.util.Constants;
+import net.fabricmc.loom.util.PropertyUtil;
public class LaunchProvider extends DependencyProvider {
public LaunchProvider(Project project) {
@@ -78,21 +80,21 @@ public class LaunchProvider extends DependencyProvider {
.argument("data", "--all")
.argument("data", "--mod")
- .argument("data", String.join(",", getExtension().getDataGenMods()))
+ .argument("data", String.join(",", getExtension().getForge().getDataGenMods()))
.argument("data", "--output")
.argument("data", getProject().file("src/generated/resources").getAbsolutePath())
.property("mixin.env.remapRefMap", "true");
- if (getExtension().isUseFabricMixin()) {
+ if (PropertyUtil.getAndFinalize(getExtension().getForge().getUseFabricMixin())) {
launchConfig.property("mixin.forgeloom.inject.mappings.srg-named", getExtension().getMappingsProvider().mixinTinyMappingsWithSrg.toAbsolutePath().toString());
} else {
launchConfig.property("net.minecraftforge.gradle.GradleStart.srg.srg-mcp", getExtension().getMappingsProvider().srgToNamedSrg.toAbsolutePath().toString());
}
- List<String> mixinConfigs = getExtension().getMixinConfigs();
+ Set<String> mixinConfigs = PropertyUtil.getAndFinalize(getExtension().getForge().getMixinConfigs());
- if (mixinConfigs != null) {
+ if (!mixinConfigs.isEmpty()) {
for (String config : mixinConfigs) {
launchConfig.argument("-mixin.config");
launchConfig.argument(config);
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java
index cd626652..9e1e4a7a 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeProvider.java
@@ -63,7 +63,7 @@ public class ForgeProvider extends DependencyProvider {
public File getProjectCache() {
if (projectCache == null) {
- projectCache = new File(getDirectories().getRootProjectPersistentCache(), getMinecraftProvider().minecraftVersion() + "/forge/" + getExtension().getForgeProvider().getVersion().getCombined() + "/project-" + getProject().getPath().replace(':', '@'));
+ projectCache = new File(getDirectories().getRootProjectPersistentCache(), getMinecraftProvider().minecraftVersion() + "/forge/" + getExtension().getForgeProvider().getVersion().getCombined() + "/project-" + getProject().getPath().replace(':', '@'));
projectCache.mkdirs();
}
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java
index 8cadbe2f..ed5e3e89 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/ForgeUserdevProvider.java
@@ -62,10 +62,11 @@ import org.gradle.api.provider.Provider;
import net.fabricmc.loom.configuration.DependencyProvider;
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
import net.fabricmc.loom.configuration.launch.LaunchProviderSettings;
-import net.fabricmc.loom.configuration.mods.forge.ForgeLocalMod;
+import net.fabricmc.loom.api.ForgeLocalMod;
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.DependencyDownloader;
import net.fabricmc.loom.util.FileSystemUtil;
+import net.fabricmc.loom.util.PropertyUtil;
public class ForgeUserdevProvider extends DependencyProvider {
private File userdevJar;
@@ -114,7 +115,7 @@ public class ForgeUserdevProvider extends DependencyProvider {
Dependency dep = null;
if (lib.getAsString().startsWith("org.spongepowered:mixin:")) {
- if (getExtension().isUseFabricMixin()) {
+ if (PropertyUtil.getAndFinalize(getExtension().getForge().getUseFabricMixin())) {
if (lib.getAsString().contains("0.8.2")) {
dep = addDependency("net.fabricmc:sponge-mixin:0.8.2+build.24", Constants.Configurations.FORGE_DEPENDENCIES);
} else {
@@ -258,7 +259,7 @@ public class ForgeUserdevProvider extends DependencyProvider {
} else if (key.equals("source_roots")) {
List<String> modClasses = new ArrayList<>();
- for (ForgeLocalMod localMod : getExtension().getForgeLocalMods()) {
+ for (ForgeLocalMod localMod : getExtension().getForge().getLocalMods()) {
String sourceSetName = localMod.getName();
localMod.getSourceSets().flatMap(sourceSet -> Stream.concat(
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java
index 44b6aadf..4bb1cd8e 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java
@@ -73,6 +73,7 @@ import net.minecraftforge.binarypatcher.ConsoleTool;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.output.NullOutputStream;
import org.gradle.api.Project;
+import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.FileCollection;
import org.gradle.api.logging.LogLevel;
import org.gradle.api.logging.Logger;
@@ -145,7 +146,9 @@ public class MinecraftPatchedProvider extends DependencyProvider {
public void initFiles() throws IOException {
filesDirty = false;
projectAtHash = new File(getDirectories().getProjectPersistentCache(), "at.sha256");
- projectAts = getExtension().getAccessTransformers();
+ ConfigurableFileCollection accessTransformers = getExtension().getForge().getAccessTransformers();
+ accessTransformers.finalizeValue();
+ projectAts = accessTransformers.getFiles();
if (projectAts.isEmpty()) {
SourceSet main = getProject().getConvention().findPlugin(JavaPluginConvention.class).getSourceSets().getByName("main");
diff --git a/src/main/java/net/fabricmc/loom/extension/ForgeExtensionImpl.java b/src/main/java/net/fabricmc/loom/extension/ForgeExtensionImpl.java
index 6794b651..38f31d01 100644
--- a/src/main/java/net/fabricmc/loom/extension/ForgeExtensionImpl.java
+++ b/src/main/java/net/fabricmc/loom/extension/ForgeExtensionImpl.java
@@ -24,22 +24,48 @@
package net.fabricmc.loom.extension;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
import javax.inject.Inject;
+import org.gradle.api.Action;
+import org.gradle.api.NamedDomainObjectContainer;
import org.gradle.api.Project;
+import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.SetProperty;
+import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.api.ForgeExtensionAPI;
+import net.fabricmc.loom.api.ForgeLocalMod;
+import net.fabricmc.loom.configuration.ide.RunConfigSettings;
public class ForgeExtensionImpl implements ForgeExtensionAPI {
+ private final LoomGradleExtension extension;
private final Property<Boolean> convertAccessWideners;
private final SetProperty<String> extraAccessWideners;
+ private final ConfigurableFileCollection accessTransformers;
+ private final SetProperty<String> mixinConfigs;
+ private final Property<Boolean> useFabricMixin;
+ private final List<String> dataGenMods = new ArrayList<>(); // not a property because it has custom adding logic
+ private final NamedDomainObjectContainer<ForgeLocalMod> localMods;
@Inject
- public ForgeExtensionImpl(Project project) {
+ public ForgeExtensionImpl(Project project, LoomGradleExtension extension) {
+ this.extension = extension;
convertAccessWideners = project.getObjects().property(Boolean.class).convention(false);
extraAccessWideners = project.getObjects().setProperty(String.class).empty();
+ accessTransformers = project.getObjects().fileCollection();
+ mixinConfigs = project.getObjects().setProperty(String.class).empty();
+ useFabricMixin = project.getObjects().property(Boolean.class).convention(true);
+ localMods = project.container(ForgeLocalMod.class,
+ baseName -> new ForgeLocalMod(project, baseName, new ArrayList<>()));
+
+ // Create default mod from main source set
+ localMods(mod -> mod.create("main").add("main"));
}
@Override
@@ -51,4 +77,60 @@ public class ForgeExtensionImpl implements ForgeExtensionAPI {
public SetProperty<String> getExtraAccessWideners() {
return extraAccessWideners;
}
+
+ @Override
+ public ConfigurableFileCollection getAccessTransformers() {
+ return accessTransformers;
+ }
+
+ @Override
+ public void accessTransformer(Object file) {
+ accessTransformers.from(file);
+ }
+
+ @Override
+ public SetProperty<String> getMixinConfigs() {
+ return mixinConfigs;
+ }
+
+ @Override
+ public void mixinConfigs(String... mixinConfigs) {
+ this.mixinConfigs.addAll(mixinConfigs);
+ }
+
+ @Override
+ public Property<Boolean> getUseFabricMixin() {
+ return useFabricMixin;
+ }
+
+ @Override
+ public List<String> getDataGenMods() {
+ // unmod list prevents uncontrolled additions (we want to create the run config too)
+ return Collections.unmodifiableList(dataGenMods);
+ }
+
+ @SuppressWarnings("Convert2Lambda")
+ @Override
+ public void dataGen(Action<DataGenConsumer> action) {
+ action.execute(new DataGenConsumer() {
+ @Override
+ public void mod(String... modIds) {
+ dataGenMods.addAll(Arrays.asList(modIds));
+
+ if (modIds.length > 0 && extension.getRunConfigs().findByName("data") == null) {
+ extension.getRunConfigs().create("data", RunConfigSettings::data);
+ }
+ }
+ });
+ }
+
+ @Override
+ public void localMods(Action<NamedDomainObjectContainer<ForgeLocalMod>> action) {
+ action.execute(localMods);
+ }
+
+ @Override
+ public NamedDomainObjectContainer<ForgeLocalMod> getLocalMods() {
+ return localMods;
+ }
}
diff --git a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java
index 46acb08c..2d31712d 100644
--- a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java
+++ b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java
@@ -24,15 +24,11 @@
package net.fabricmc.loom.extension;
-import java.io.File;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
-import java.util.Set;
import java.util.function.Consumer;
import com.google.common.base.Suppliers;
@@ -56,7 +52,6 @@ import net.fabricmc.loom.configuration.ide.RunConfig;
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
import net.fabricmc.loom.configuration.launch.LaunchProviderSettings;
import net.fabricmc.loom.configuration.mods.ModVersionParser;
-import net.fabricmc.loom.configuration.mods.forge.ForgeLocalMod;
import net.fabricmc.loom.configuration.processors.JarProcessor;
import net.fabricmc.loom.configuration.providers.mappings.GradleMappingContext;
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpec;
@@ -64,7 +59,6 @@ import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpecBuil
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsDependency;
import net.fabricmc.loom.util.DeprecationHelper;
import net.fabricmc.loom.util.ModPlatform;
-import net.fabricmc.loom.util.function.LazyBool;
/**
* This class implements the public extension api.
@@ -72,7 +66,6 @@ import net.fabricmc.loom.util.function.LazyBool;
public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionAPI {
private static final String FORGE_PROPERTY = "loom.forge";
private static final String PLATFORM_PROPERTY = "loom.platform";
- private static final String INCLUDE_PROPERTY = "loom.forge.include";
protected final DeprecationHelper deprecationHelper;
protected final ListProperty<LoomDecompiler> decompilers;
@@ -93,17 +86,11 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
// Architectury Loom
// ===================
private Provider<ModPlatform> platform;
- public List<String> mixinConfigs = new ArrayList<>(); // FORGE: Passed to Minecraft
- public Set<File> accessTransformers = new HashSet<>();
- public boolean useFabricMixin = true; // FORGE: Use Fabric Mixin for better refmap resolutions
private boolean silentMojangMappingsLicense = false;
public Boolean generateSrgTiny = null;
- private final LazyBool supportsInclude;
- private List<String> dataGenMods = new ArrayList<>();
private final List<String> tasksBeforeRun = Collections.synchronizedList(new ArrayList<>());
public final List<Consumer<RunConfig>> settingsPostEdit = new ArrayList<>();
private NamedDomainObjectContainer<LaunchProviderSettings> launchConfigs;
- private NamedDomainObjectContainer<ForgeLocalMod> forgeLocalMods;
protected LoomGradleExtensionApiImpl(Project project, LoomFiles directories) {
this.runConfigs = project.container(RunConfigSettings.class,
@@ -144,17 +131,8 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
return ModPlatform.FABRIC;
})::get);
- this.supportsInclude = new LazyBool(() -> Boolean.parseBoolean(Objects.toString(project.findProperty(INCLUDE_PROPERTY))));
this.launchConfigs = project.container(LaunchProviderSettings.class,
baseName -> new LaunchProviderSettings(project, baseName));
- this.forgeLocalMods = project.container(ForgeLocalMod.class,
- baseName -> new ForgeLocalMod(project, baseName, new ArrayList<>()));
-
- if (isForge()) {
- localMods(mod -> {
- mod.create("main").add("main");
- });
- }
}
@Override
@@ -262,11 +240,6 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
}
@Override
- public boolean supportsInclude() {
- return !isForge() || supportsInclude.getAsBoolean();
- }
-
- @Override
public void setGenerateSrgTiny(Boolean generateSrgTiny) {
this.generateSrgTiny = generateSrgTiny;
}
@@ -291,74 +264,11 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
}
@Override
- public List<String> getDataGenMods() {
- return dataGenMods;
- }
-
- @SuppressWarnings("Convert2Lambda")
- @Override
- public void localMods(Action<NamedDomainObjectContainer<ForgeLocalMod>> action) {
- ModPlatform.assertPlatform(this, ModPlatform.FORGE);
- action.execute(forgeLocalMods);
- }
-
- @Override
- public NamedDomainObjectContainer<ForgeLocalMod> getForgeLocalMods() {
- return forgeLocalMods;
- }
-
- @SuppressWarnings("Convert2Lambda")
- @Override
- public void dataGen(Action<DataGenConsumer> action) {
- ModPlatform.assertPlatform(this, ModPlatform.FORGE);
- action.execute(new DataGenConsumer() {
- @Override
- public void mod(String... modIds) {
- dataGenMods.addAll(Arrays.asList(modIds));
-
- if (modIds.length > 0 && getRunConfigs().findByName("data") == null) {
- getRunConfigs().create("data", RunConfigSettings::data);
- }
- }
- });
- }
-
- @Override
public List<String> getTasksBeforeRun() {
return tasksBeforeRun;
}
@Override
- public void mixinConfig(String... config) {
- mixinConfigs.addAll(Arrays.asList(config));
- }
-
- @Override
- public List<String> getMixinConfigs() {
- return mixinConfigs;
- }
-
- @Override
- public void accessTransformer(Object file) {
- this.accessTransformers.add(getProject().file(file));
- }
-
- @Override
- public Set<File> getAccessTransformers() {
- return accessTransformers;
- }
-
- @Override
- public boolean isUseFabricMixin() {
- return useFabricMixin;
- }
-
- @Override
- public void setUseFabricMixin(boolean useFabricMixin) {
- this.useFabricMixin = useFabricMixin;
- }
-
- @Override
public List<Consumer<RunConfig>> getSettingsPostEdit() {
return settingsPostEdit;
}
@@ -396,16 +306,6 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
}
@Override
- public boolean isForgeAndOfficial() {
- throw new RuntimeException("Yeah... something is really wrong");
- }
-
- @Override
- public boolean isForgeAndNotOfficial() {
- throw new RuntimeException("Yeah... something is really wrong");
- }
-
- @Override
protected String getMinecraftVersion() {
throw new RuntimeException("Yeah... something is really wrong");
}
diff --git a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java
index 7728bde6..9b93c066 100644
--- a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java
+++ b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java
@@ -50,6 +50,7 @@ import net.fabricmc.loom.configuration.LoomDependencyManager;
import net.fabricmc.loom.configuration.accesswidener.AccessWidenerFile;
import net.fabricmc.loom.configuration.processors.JarProcessorManager;
import net.fabricmc.loom.util.ModPlatform;
+import net.fabricmc.loom.util.function.LazyBool;
public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implements LoomGradleExtension {
private final Project project;
@@ -68,6 +69,12 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
private JarProcessorManager jarProcessorManager;
private InstallerData installerData;
+ // +-------------------+
+ // | Architectury Loom |
+ // +-------------------+
+ private static final String INCLUDE_PROPERTY = "loom.forge.include";
+ private final LazyBool supportsInclude;
+
public LoomGradleExtensionImpl(Project project, LoomFiles files) {
super(project, files);
this.project = project;
@@ -75,7 +82,8 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
this.mixinApExtension = project.getObjects().newInstance(MixinExtensionImpl.class, project);
this.loomFiles = files;
this.unmappedMods = project.files();
- this.forgeExtension = Suppliers.memoize(() -> isForge() ? project.getObjects().newInstance(ForgeExtensionImpl.class, project) : null);
+ this.forgeExtension = Suppliers.memoize(() -> isForge() ? project.getObjects().newInstance(ForgeExtensionImpl.class, project, this) : null);
+ this.supportsInclude = new LazyBool(() -> Boolean.parseBoolean(Objects.toString(project.findProperty(INCLUDE_PROPERTY))));
}
@Override
@@ -200,4 +208,9 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
ModPlatform.assertPlatform(this, ModPlatform.FORGE);
return forgeExtension.get();
}
+
+ @Override
+ public boolean supportsInclude() {
+ return !isForge() || supportsInclude.getAsBoolean();
+ }
}
diff --git a/src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java b/src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java
index e822a5a1..36497f4f 100644
--- a/src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java
+++ b/src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java
@@ -24,9 +24,7 @@
package net.fabricmc.loom.extension;
-import java.io.File;
import java.util.List;
-import java.util.Set;
import java.util.function.Consumer;
import org.gradle.api.Action;
@@ -47,7 +45,6 @@ import net.fabricmc.loom.api.mappings.layered.spec.LayeredMappingSpecBuilder;
import net.fabricmc.loom.configuration.ide.RunConfig;
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
import net.fabricmc.loom.configuration.launch.LaunchProviderSettings;
-import net.fabricmc.loom.configuration.mods.forge.ForgeLocalMod;
import net.fabricmc.loom.configuration.processors.JarProcessor;
import net.fabricmc.loom.util.DeprecationHelper;
import net.fabricmc.loom.util.ModPlatform;
@@ -187,24 +184,6 @@ public class MinecraftGradleExtension implements LoomGradleExtensionAPI {
}
@Override
- public boolean isForgeAndOfficial() {
- reportDeprecation();
- return parent.isForgeAndOfficial();
- }
-
- @Override
- public boolean isForgeAndNotOfficial() {
- reportDeprecation();
- return parent.isForgeAndNotOfficial();
- }
-
- @Override
- public boolean supportsInclude() {
- reportDeprecation();
- return parent.supportsInclude();
- }
-
- @Override
public void setGenerateSrgTiny(Boolean generateSrgTiny) {
reportDeprecation();
parent.setGenerateSrgTiny(generateSrgTiny);
@@ -229,72 +208,12 @@ public class MinecraftGradleExtension implements LoomGradleExtensionAPI {
}
@Override
- public List<String> getDataGenMods() {
- reportDeprecation();
- return parent.getDataGenMods();
- }
-
- @Override
- public void localMods(Action<NamedDomainObjectContainer<ForgeLocalMod>> action) {
- reportDeprecation();
- parent.localMods(action);
- }
-
- @Override
- public NamedDomainObjectContainer<ForgeLocalMod> getForgeLocalMods() {
- reportDeprecation();
- return parent.getForgeLocalMods();
- }
-
- @Override
- public void dataGen(Action<DataGenConsumer> action) {
- reportDeprecation();
- parent.dataGen(action);
- }
-
- @Override
public List<String> getTasksBeforeRun() {
reportDeprecation();
return parent.getTasksBeforeRun();
}
@Override
- public void mixinConfig(String... config) {
- reportDeprecation();
- parent.mixinConfig(config);
- }
-
- @Override
- public List<String> getMixinConfigs() {
- reportDeprecation();
- return parent.getMixinConfigs();
- }
-
- @Override
- public void accessTransformer(Object file) {
- reportDeprecation();
- parent.accessTransformer(file);
- }
-
- @Override
- public Set<File> getAccessTransformers() {
- reportDeprecation();
- return parent.getAccessTransformers();
- }
-
- @Override
- public boolean isUseFabricMixin() {
- reportDeprecation();
- return parent.isUseFabricMixin();
- }
-
- @Override
- public void setUseFabricMixin(boolean useFabricMixin) {
- reportDeprecation();
- parent.setUseFabricMixin(useFabricMixin);
- }
-
- @Override
public List<Consumer<RunConfig>> getSettingsPostEdit() {
reportDeprecation();
return parent.getSettingsPostEdit();
diff --git a/src/main/java/net/fabricmc/loom/util/PropertyUtil.java b/src/main/java/net/fabricmc/loom/util/PropertyUtil.java
new file mode 100644
index 00000000..98e85b68
--- /dev/null
+++ b/src/main/java/net/fabricmc/loom/util/PropertyUtil.java
@@ -0,0 +1,45 @@
+/*
+ * This file is part of fabric-loom, licensed under the MIT License (MIT).
+ *
+ * Copyright (c) 2021 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
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package net.fabricmc.loom.util;
+
+import org.gradle.api.provider.HasConfigurableValue;
+import org.gradle.api.provider.Provider;
+
+/**
+ * Working with properties.
+ */
+public final class PropertyUtil {
+ /**
+ * Gets a property and finalizes its value.
+ *
+ * @param property the property
+ * @param <T> the value type
+ * @return the current property value
+ */
+ public static <T, P extends Provider<T> & HasConfigurableValue> T getAndFinalize(P property) {
+ property.finalizeValue();
+ return property.get();
+ }
+}