aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/fabricmc/loom/LoomGradleExtension.java')
-rw-r--r--src/main/java/net/fabricmc/loom/LoomGradleExtension.java140
1 files changed, 137 insertions, 3 deletions
diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
index 4c6557ab..8d7b1a6c 100644
--- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
+++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
@@ -27,9 +27,11 @@ package net.fabricmc.loom;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
@@ -49,6 +51,8 @@ import org.gradle.api.artifacts.Dependency;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.plugins.BasePluginConvention;
import org.jetbrains.annotations.ApiStatus;
+import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.tasks.SourceSet;
import org.jetbrains.annotations.Nullable;
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
@@ -57,11 +61,20 @@ import net.fabricmc.loom.configuration.ide.RunConfigSettings;
import net.fabricmc.loom.configuration.processors.JarProcessor;
import net.fabricmc.loom.configuration.processors.JarProcessorManager;
import net.fabricmc.loom.configuration.providers.MinecraftProvider;
+import net.fabricmc.loom.configuration.providers.forge.ForgeProvider;
+import net.fabricmc.loom.configuration.providers.forge.ForgeUniversalProvider;
+import net.fabricmc.loom.configuration.providers.forge.ForgeUserdevProvider;
+import net.fabricmc.loom.configuration.providers.forge.McpConfigProvider;
+import net.fabricmc.loom.configuration.providers.forge.PatchProvider;
+import net.fabricmc.loom.configuration.providers.forge.SrgProvider;
import net.fabricmc.loom.configuration.providers.mappings.MappingsProvider;
import net.fabricmc.loom.configuration.providers.mappings.MojangMappingsDependency;
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMappedProvider;
+import net.fabricmc.loom.util.function.LazyBool;
public class LoomGradleExtension {
+ private static final String FORGE_PROPERTY = "loom.forge";
+
public String refmapName;
public String loaderLaunchMethod;
public boolean remapMod = true;
@@ -70,20 +83,35 @@ public class LoomGradleExtension {
public File accessWidener = null;
public Function<String, Object> intermediaryUrl = mcVer -> "https://maven.fabricmc.net/net/fabricmc/intermediary/" + mcVer + "/intermediary-" + mcVer + "-v2.jar";
public boolean shareCaches = false;
+ @Deprecated
+ public String mixinConfig = null; // FORGE: Passed to Minecraft
+ public List<String> mixinConfigs = new ArrayList<>(); // FORGE: Passed to Minecraft
+ public boolean useFabricMixin = true; // FORGE: Use Fabric Mixin for better refmap resolutions
private final ConfigurableFileCollection unmappedMods;
final List<LoomDecompiler> decompilers = new ArrayList<>();
private final List<JarProcessor> jarProcessors = new ArrayList<>();
+ private boolean silentMojangMappingsLicense = false;
+ public Boolean generateSrgTiny = null;
// Not to be set in the build.gradle
private final Project project;
+ private List<String> dataGenMods = new ArrayList<>();
private LoomDependencyManager dependencyManager;
private JarProcessorManager jarProcessorManager;
private JsonObject installerJson;
private MappingSet[] srcMappingCache = new MappingSet[2];
private Mercury[] srcMercuryCache = new Mercury[2];
+ private final LazyBool forge;
private Set<File> mixinMappings = Collections.synchronizedSet(new HashSet<>());
+ private final List<String> tasksBeforeRun = Collections.synchronizedList(new ArrayList<>());
+ public final List<Supplier<SourceSet>> forgeLocalMods = Collections.synchronizedList(new ArrayList<>(Arrays.asList(new Supplier<SourceSet>() {
+ @Override
+ public SourceSet get() {
+ return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().getByName("main");
+ }
+ })));
private NamedDomainObjectContainer<RunConfigSettings> runs;
@@ -114,6 +142,68 @@ public class LoomGradleExtension {
return srcMercuryCache[id] != null ? srcMercuryCache[id] : (srcMercuryCache[id] = factory.get());
}
+ public void localMods(Action<SourceSetConsumer> action) {
+ if (!isForge()) {
+ throw new UnsupportedOperationException("Not running with Forge support.");
+ }
+
+ action.execute(new SourceSetConsumer());
+ }
+
+ public boolean isDataGenEnabled() {
+ return isForge() && !dataGenMods.isEmpty();
+ }
+
+ public List<String> getDataGenMods() {
+ return dataGenMods;
+ }
+
+ public class SourceSetConsumer {
+ public void add(Object... sourceSets) {
+ for (Object sourceSet : sourceSets) {
+ if (sourceSet instanceof SourceSet) {
+ forgeLocalMods.add(() -> (SourceSet) sourceSet);
+ } else {
+ forgeLocalMods.add(() -> project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName(String.valueOf(forgeLocalMods)));
+ }
+ }
+ }
+ }
+
+ public void dataGen(Action<DataGenConsumer> action) {
+ if (!isForge()) {
+ throw new UnsupportedOperationException("Not running with Forge support.");
+ }
+
+ action.execute(new DataGenConsumer());
+ }
+
+ public class DataGenConsumer {
+ public void mod(String... modIds) {
+ dataGenMods.addAll(Arrays.asList(modIds));
+ }
+ }
+
+ public void addTaskBeforeRun(String task) {
+ this.tasksBeforeRun.add(task);
+ }
+
+ public List<String> getTasksBeforeRun() {
+ return tasksBeforeRun;
+ }
+
+ public void mixinConfig(String config) {
+ mixinConfigs.add(config);
+ }
+
+ public void silentMojangMappingsLicense() {
+ this.silentMojangMappingsLicense = true;
+ }
+
+ public boolean isSilentMojangMappingsLicenseEnabled() {
+ return silentMojangMappingsLicense;
+ }
+
public Dependency officialMojangMappings() {
return new MojangMappingsDependency(project, this);
}
@@ -122,6 +212,7 @@ public class LoomGradleExtension {
this.project = project;
this.autoGenIDERuns = isRootProject();
this.unmappedMods = project.files();
+ this.forge = new LazyBool(() -> Boolean.parseBoolean(Objects.toString(project.findProperty(FORGE_PROPERTY))));
this.runs = project.container(RunConfigSettings.class,
baseName -> new RunConfigSettings(project, baseName));
}
@@ -266,7 +357,7 @@ public class LoomGradleExtension {
@Nullable
private static Dependency findDependency(Project p, Collection<Configuration> configs, BiPredicate<String, String> groupNameFilter) {
for (Configuration config : configs) {
- for (Dependency dependency : config.getDependencies()) {
+ for (Dependency dependency : config.getAllDependencies()) {
String group = dependency.getGroup();
String name = dependency.getName();
@@ -300,7 +391,7 @@ public class LoomGradleExtension {
@Nullable
private Dependency getMixinDependency() {
return recurseProjects(p -> {
- List<Configuration> configs = new ArrayList<>();
+ Set<Configuration> configs = new LinkedHashSet<>();
// check compile classpath first
Configuration possibleCompileClasspath = p.getConfigurations().findByName("compileClasspath");
@@ -346,6 +437,10 @@ public class LoomGradleExtension {
return dependencyManager;
}
+ public PatchProvider getPatchProvider() {
+ return getDependencyManager().getProvider(PatchProvider.class);
+ }
+
public MinecraftProvider getMinecraftProvider() {
return getDependencyManager().getProvider(MinecraftProvider.class);
}
@@ -358,6 +453,26 @@ public class LoomGradleExtension {
return getDependencyManager().getProvider(MappingsProvider.class);
}
+ public McpConfigProvider getMcpConfigProvider() {
+ return getDependencyManager().getProvider(McpConfigProvider.class);
+ }
+
+ public SrgProvider getSrgProvider() {
+ return getDependencyManager().getProvider(SrgProvider.class);
+ }
+
+ public ForgeUniversalProvider getForgeUniversalProvider() {
+ return getDependencyManager().getProvider(ForgeUniversalProvider.class);
+ }
+
+ public ForgeUserdevProvider getForgeUserdevProvider() {
+ return getDependencyManager().getProvider(ForgeUserdevProvider.class);
+ }
+
+ public ForgeProvider getForgeProvider() {
+ return getDependencyManager().getProvider(ForgeProvider.class);
+ }
+
public void setDependencyManager(LoomDependencyManager dependencyManager) {
this.dependencyManager = dependencyManager;
}
@@ -376,7 +491,14 @@ public class LoomGradleExtension {
public String getRefmapName() {
if (refmapName == null || refmapName.isEmpty()) {
- String defaultRefmapName = project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
+ String defaultRefmapName;
+
+ if (isRootProject()) {
+ defaultRefmapName = project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
+ } else {
+ defaultRefmapName = project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-" + project.getPath().replaceFirst(":", "").replace(':', '_') + "-refmap.json";
+ }
+
project.getLogger().info("Could not find refmap definition, will be using default name: " + defaultRefmapName);
refmapName = defaultRefmapName;
}
@@ -414,6 +536,18 @@ public class LoomGradleExtension {
return shareCaches;
}
+ public boolean isForge() {
+ return forge.getAsBoolean();
+ }
+
+ public boolean shouldGenerateSrgTiny() {
+ if (generateSrgTiny != null) {
+ return generateSrgTiny;
+ }
+
+ return isForge();
+ }
+
// Creates a new file each time its called, this is then held onto later when remapping the output jar
// Required as now when using parallel builds the old single file could be written by another sourceset compile task
public synchronized File getNextMixinMappings() {