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.java144
1 files changed, 143 insertions, 1 deletions
diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
index 1e03120e..4022d285 100644
--- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
+++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
@@ -27,10 +27,13 @@ package net.fabricmc.loom;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Objects;
import java.util.Set;
+import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
@@ -44,19 +47,31 @@ import org.gradle.api.Project;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.plugins.BasePluginConvention;
+import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.tasks.SourceSet;
import org.jetbrains.annotations.ApiStatus;
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
import net.fabricmc.loom.configuration.LoomDependencyManager;
+import net.fabricmc.loom.configuration.ide.RunConfig;
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;
@@ -64,20 +79,37 @@ 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");
+ }
+ })));
+ @ApiStatus.Experimental
+ public final List<Consumer<RunConfig>> settingsPostEdit = new ArrayList<>();
private NamedDomainObjectContainer<RunConfigSettings> runConfigs;
@@ -108,6 +140,72 @@ 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));
+
+ if (modIds.length > 0 && getRunConfigs().findByName("data") == null) {
+ getRunConfigs().create("data", RunConfigSettings::data);
+ }
+ }
+ }
+
+ 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);
}
@@ -115,6 +213,7 @@ public class LoomGradleExtension {
public LoomGradleExtension(Project project) {
this.project = project;
this.unmappedMods = project.files();
+ this.forge = new LazyBool(() -> Boolean.parseBoolean(Objects.toString(project.findProperty(FORGE_PROPERTY))));
this.runConfigs = project.container(RunConfigSettings.class,
baseName -> new RunConfigSettings(project, baseName));
}
@@ -264,6 +363,10 @@ public class LoomGradleExtension {
return dependencyManager;
}
+ public PatchProvider getPatchProvider() {
+ return getDependencyManager().getProvider(PatchProvider.class);
+ }
+
public MinecraftProvider getMinecraftProvider() {
return getDependencyManager().getProvider(MinecraftProvider.class);
}
@@ -276,6 +379,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;
}
@@ -294,7 +417,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;
}
@@ -332,6 +462,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() {