mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-04-02 05:27:43 -05:00
@@ -40,6 +40,13 @@ import net.fabricmc.loom.configuration.InstallerData;
|
||||
import net.fabricmc.loom.configuration.LoomDependencyManager;
|
||||
import net.fabricmc.loom.configuration.processors.JarProcessorManager;
|
||||
import net.fabricmc.loom.configuration.providers.MinecraftProviderImpl;
|
||||
import net.fabricmc.loom.configuration.providers.forge.FieldMigratedMappingsProvider;
|
||||
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.MappingsProviderImpl;
|
||||
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMappedProvider;
|
||||
import net.fabricmc.loom.extension.LoomFiles;
|
||||
@@ -80,7 +87,7 @@ public interface LoomGradleExtension extends LoomGradleExtensionAPI {
|
||||
}
|
||||
|
||||
default MappingsProviderImpl getMappingsProvider() {
|
||||
return getDependencyManager().getProvider(MappingsProviderImpl.class);
|
||||
return getDependencyManager().getProvider(isForge() ? FieldMigratedMappingsProvider.class : MappingsProviderImpl.class);
|
||||
}
|
||||
|
||||
default MinecraftMappedProvider getMinecraftMappedProvider() {
|
||||
@@ -105,4 +112,31 @@ public interface LoomGradleExtension extends LoomGradleExtensionAPI {
|
||||
}
|
||||
|
||||
MixinApExtension getMixinApExtension();
|
||||
|
||||
// ===================
|
||||
// Architectury Loom
|
||||
// ===================
|
||||
default PatchProvider getPatchProvider() {
|
||||
return getDependencyManager().getProvider(PatchProvider.class);
|
||||
}
|
||||
|
||||
default McpConfigProvider getMcpConfigProvider() {
|
||||
return getDependencyManager().getProvider(McpConfigProvider.class);
|
||||
}
|
||||
|
||||
default SrgProvider getSrgProvider() {
|
||||
return getDependencyManager().getProvider(SrgProvider.class);
|
||||
}
|
||||
|
||||
default ForgeUniversalProvider getForgeUniversalProvider() {
|
||||
return getDependencyManager().getProvider(ForgeUniversalProvider.class);
|
||||
}
|
||||
|
||||
default ForgeUserdevProvider getForgeUserdevProvider() {
|
||||
return getDependencyManager().getProvider(ForgeUserdevProvider.class);
|
||||
}
|
||||
|
||||
default ForgeProvider getForgeProvider() {
|
||||
return getDependencyManager().getProvider(ForgeProvider.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,17 +26,25 @@ package net.fabricmc.loom.api;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.NamedDomainObjectContainer;
|
||||
import org.gradle.api.artifacts.Dependency;
|
||||
import org.gradle.api.file.ConfigurableFileCollection;
|
||||
import org.gradle.api.provider.Property;
|
||||
import org.gradle.api.tasks.SourceSet;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
||||
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.processors.JarProcessor;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpecBuilder;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
|
||||
/**
|
||||
* This is the public api available exposed to build scripts.
|
||||
@@ -88,4 +96,67 @@ public interface LoomGradleExtensionAPI {
|
||||
void setCustomManifest(String customManifest);
|
||||
|
||||
String getCustomManifest();
|
||||
|
||||
// ===================
|
||||
// Architectury Loom
|
||||
// ===================
|
||||
void silentMojangMappingsLicense();
|
||||
|
||||
boolean isSilentMojangMappingsLicenseEnabled();
|
||||
|
||||
Property<ModPlatform> getPlatform();
|
||||
|
||||
default boolean isForge() {
|
||||
return getPlatform().get() == ModPlatform.FORGE;
|
||||
}
|
||||
|
||||
boolean supportsInclude();
|
||||
|
||||
void setGenerateSrgTiny(Boolean generateSrgTiny);
|
||||
|
||||
boolean shouldGenerateSrgTiny();
|
||||
|
||||
void launches(Action<NamedDomainObjectContainer<LaunchProviderSettings>> action);
|
||||
|
||||
NamedDomainObjectContainer<LaunchProviderSettings> getLaunchConfigs();
|
||||
|
||||
List<String> getDataGenMods();
|
||||
|
||||
default boolean isDataGenEnabled() {
|
||||
return isForge() && !getDataGenMods().isEmpty();
|
||||
}
|
||||
|
||||
void localMods(Action<SourceSetConsumer> action);
|
||||
|
||||
interface SourceSetConsumer {
|
||||
void add(Object... sourceSets);
|
||||
}
|
||||
|
||||
List<Supplier<SourceSet>> 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();
|
||||
}
|
||||
|
||||
@@ -61,11 +61,11 @@ public final class CompileConfiguration {
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
|
||||
project.afterEvaluate(project1 -> {
|
||||
if (project.getExtensions().getByType(LoomGradleExtension.class).shouldGenerateSrgTiny()) {
|
||||
if (extension.shouldGenerateSrgTiny()) {
|
||||
extension.createLazyConfiguration(Constants.Configurations.SRG).configure(configuration -> configuration.setTransitive(false));
|
||||
}
|
||||
|
||||
if (project.getExtensions().getByType(LoomGradleExtension.class).isDataGenEnabled()) {
|
||||
if (extension.isDataGenEnabled()) {
|
||||
project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().getByName("main").resources(files -> {
|
||||
files.srcDir(project.file("src/generated/resources"));
|
||||
});
|
||||
@@ -79,7 +79,7 @@ public final class CompileConfiguration {
|
||||
extension.createLazyConfiguration(Constants.Configurations.LOADER_DEPENDENCIES).configure(configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT).configure(configuration -> configuration.setTransitive(false));
|
||||
|
||||
if (project.getExtensions().getByType(LoomGradleExtension.class).isForge()) {
|
||||
if (extension.isForge()) {
|
||||
extension.createLazyConfiguration(Constants.Configurations.FORGE).configure(configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.FORGE_USERDEV).configure(configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.FORGE_INSTALLER).configure(configuration -> configuration.setTransitive(false));
|
||||
@@ -96,7 +96,7 @@ public final class CompileConfiguration {
|
||||
extendsFrom(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.FORGE_NAMED, project);
|
||||
}
|
||||
|
||||
if (project.getExtensions().getByType(LoomGradleExtension.class).supportsInclude()) {
|
||||
if (extension.supportsInclude()) {
|
||||
extension.createLazyConfiguration(Constants.Configurations.INCLUDE).configure(configuration -> configuration.setTransitive(false)); // Dont get transitive deps
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ public class RemapConfiguration {
|
||||
|
||||
if (extension.isForge()) {
|
||||
((Jar) jarTask).manifest(manifest -> {
|
||||
manifest.attributes(ImmutableMap.of("MixinConfigs", String.join(",", extension.mixinConfigs)));
|
||||
manifest.attributes(ImmutableMap.of("MixinConfigs", String.join(",", extension.getMixinConfigs())));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.Objects;
|
||||
@@ -133,7 +135,7 @@ public class RunConfig {
|
||||
if (extension.isForge()) {
|
||||
List<String> modClasses = new ArrayList<>();
|
||||
|
||||
for (Supplier<SourceSet> sourceSetSupplier : extension.forgeLocalMods) {
|
||||
for (Supplier<SourceSet> sourceSetSupplier : extension.getForgeLocalMods()) {
|
||||
SourceSet sourceSet = sourceSetSupplier.get();
|
||||
String sourceSetName = sourceSet.getName() + "_" + UUID.randomUUID().toString().replace("-", "").substring(0, 7);
|
||||
|
||||
@@ -214,7 +216,7 @@ public class RunConfig {
|
||||
runConfig.programArgs = runConfig.programArgs.trim();
|
||||
runConfig.vmArgs = runConfig.vmArgs.trim();
|
||||
|
||||
for (Consumer<RunConfig> consumer : extension.settingsPostEdit) {
|
||||
for (Consumer<RunConfig> consumer : extension.getSettingsPostEdit()) {
|
||||
consumer.accept(runConfig);
|
||||
}
|
||||
|
||||
|
||||
@@ -93,13 +93,13 @@ public class LaunchProvider extends DependencyProvider {
|
||||
|
||||
.property("mixin.env.remapRefMap", "true");
|
||||
|
||||
if (getExtension().useFabricMixin) {
|
||||
if (getExtension().isUseFabricMixin()) {
|
||||
launchConfig.property("mixin.forgeloom.inject.mappings.srg-named", getExtension().getMappingsProvider().mixinTinyMappingsWithSrg.getAbsolutePath());
|
||||
} else {
|
||||
launchConfig.property("net.minecraftforge.gradle.GradleStart.srg.srg-mcp", getExtension().getMappingsProvider().srgToNamedSrg.getAbsolutePath());
|
||||
}
|
||||
|
||||
List<String> mixinConfigs = getExtension().mixinConfigs;
|
||||
List<String> mixinConfigs = getExtension().getMixinConfigs();
|
||||
|
||||
if (mixinConfigs != null) {
|
||||
for (String config : mixinConfigs) {
|
||||
|
||||
@@ -42,7 +42,7 @@ public class ForgeUniversalProvider extends DependencyProvider {
|
||||
|
||||
@Override
|
||||
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
|
||||
forge = new File(getExtension().getProjectPersistentCache(), "forge-" + dependency.getDependency().getVersion() + "-universal.jar");
|
||||
forge = new File(getDirectories().getProjectPersistentCache(), "forge-" + dependency.getDependency().getVersion() + "-universal.jar");
|
||||
|
||||
if (!forge.exists() || isRefreshDeps()) {
|
||||
File dep = dependency.resolveFile().orElseThrow(() -> new RuntimeException("Could not resolve Forge"));
|
||||
|
||||
@@ -52,9 +52,9 @@ public class ForgeUserdevProvider extends DependencyProvider {
|
||||
|
||||
@Override
|
||||
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
|
||||
userdevJar = new File(getExtension().getProjectPersistentCache(), "forge-" + dependency.getDependency().getVersion() + "-userdev.jar");
|
||||
userdevJar = new File(getDirectories().getProjectPersistentCache(), "forge-" + dependency.getDependency().getVersion() + "-userdev.jar");
|
||||
|
||||
Path configJson = getExtension()
|
||||
Path configJson = getDirectories()
|
||||
.getProjectPersistentCache()
|
||||
.toPath()
|
||||
.resolve("forge-config-" + dependency.getDependency().getVersion() + ".json");
|
||||
@@ -80,7 +80,7 @@ public class ForgeUserdevProvider extends DependencyProvider {
|
||||
|
||||
for (JsonElement lib : json.get("libraries").getAsJsonArray()) {
|
||||
if (lib.getAsString().startsWith("org.spongepowered:mixin:")) {
|
||||
if (getExtension().useFabricMixin) {
|
||||
if (getExtension().isUseFabricMixin()) {
|
||||
addDependency("net.fabricmc:sponge-mixin:0.8.2+build.24", Constants.Configurations.FORGE_DEPENDENCIES);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ public class McpConfigProvider extends DependencyProvider {
|
||||
}
|
||||
|
||||
private void init(String version) {
|
||||
mcp = new File(getExtension().getUserCache(), "mcp-" + version + ".zip");
|
||||
mcp = new File(getDirectories().getUserCache(), "mcp-" + version + ".zip");
|
||||
}
|
||||
|
||||
public File getMcp() {
|
||||
|
||||
@@ -127,8 +127,8 @@ public class MinecraftPatchedProvider extends DependencyProvider {
|
||||
|
||||
public void initFiles() throws IOException {
|
||||
filesDirty = false;
|
||||
projectAtHash = new File(getExtension().getProjectPersistentCache(), "at.sha256");
|
||||
projectAts = getExtension().accessTransformers;
|
||||
projectAtHash = new File(getDirectories().getProjectPersistentCache(), "at.sha256");
|
||||
projectAts = getExtension().getAccessTransformers();
|
||||
|
||||
if (projectAts.isEmpty()) {
|
||||
SourceSet main = getProject().getConvention().findPlugin(JavaPluginConvention.class).getSourceSets().getByName("main");
|
||||
@@ -163,14 +163,14 @@ public class MinecraftPatchedProvider extends DependencyProvider {
|
||||
String minecraftVersion = minecraftProvider.minecraftVersion();
|
||||
String patchId = "forge-" + patchProvider.forgeVersion;
|
||||
|
||||
if (getExtension().useFabricMixin) {
|
||||
if (getExtension().isUseFabricMixin()) {
|
||||
patchId += "-fabric-mixin";
|
||||
}
|
||||
|
||||
minecraftProvider.setJarSuffix(patchId);
|
||||
|
||||
File globalCache = getExtension().getUserCache();
|
||||
File cache = usesProjectCache() ? getExtension().getProjectPersistentCache() : globalCache;
|
||||
File globalCache = getDirectories().getUserCache();
|
||||
File cache = usesProjectCache() ? getDirectories().getProjectPersistentCache() : globalCache;
|
||||
File globalDir = new File(globalCache, patchId);
|
||||
File projectDir = new File(cache, patchId);
|
||||
globalDir.mkdirs();
|
||||
|
||||
@@ -68,7 +68,7 @@ public class PatchProvider extends DependencyProvider {
|
||||
|
||||
private void init(String forgeVersion) {
|
||||
this.forgeVersion = forgeVersion;
|
||||
projectCacheFolder = getExtension().getProjectPersistentCache().toPath().resolve(forgeVersion);
|
||||
projectCacheFolder = getDirectories().getProjectPersistentCache().toPath().resolve(forgeVersion);
|
||||
clientPatches = projectCacheFolder.resolve("patches-client.lzma");
|
||||
serverPatches = projectCacheFolder.resolve("patches-server.lzma");
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ public class SrgProvider extends DependencyProvider {
|
||||
}
|
||||
|
||||
private void init(String version) {
|
||||
srg = new File(getExtension().getUserCache(), "srg-" + version + ".tsrg");
|
||||
srg = new File(getDirectories().getUserCache(), "srg-" + version + ".tsrg");
|
||||
}
|
||||
|
||||
public File getSrg() {
|
||||
|
||||
@@ -31,7 +31,7 @@ import java.util.List;
|
||||
import org.gradle.api.Action;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.crane.CraneMappingsSpec;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.intermediary.IntermediaryMappingsSpec;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.mojmap.MojangMappingsSpec;
|
||||
@@ -40,9 +40,9 @@ import net.fabricmc.loom.configuration.providers.mappings.parchment.ParchmentMap
|
||||
public class LayeredMappingSpecBuilder {
|
||||
private final List<MappingsSpec<?>> layers = new LinkedList<>();
|
||||
@Nullable
|
||||
private final LoomGradleExtension extension;
|
||||
private final LoomGradleExtensionAPI extension;
|
||||
|
||||
public LayeredMappingSpecBuilder(LoomGradleExtension extension) {
|
||||
public LayeredMappingSpecBuilder(@Nullable LoomGradleExtensionAPI extension) {
|
||||
this.extension = extension;
|
||||
}
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@ public class MinecraftMappedProvider extends DependencyProvider {
|
||||
addDependencies(dependency, postPopulationScheduler);
|
||||
|
||||
if (getExtension().isForge()) {
|
||||
getProject().getRepositories().flatDir(repository -> repository.dir(new File(getJarDirectory(getExtension().getUserCache(), "mapped"), "forge")));
|
||||
getProject().getRepositories().flatDir(repository -> repository.dir(new File(getJarDirectory(getDirectories().getUserCache(), "mapped"), "forge")));
|
||||
|
||||
getProject().getDependencies().add(Constants.Configurations.FORGE_NAMED,
|
||||
getProject().getDependencies().module("net.minecraftforge-loom:forge:" + getJarVersionString("mapped")));
|
||||
@@ -353,15 +353,15 @@ public class MinecraftMappedProvider extends DependencyProvider {
|
||||
public void initFiles(MinecraftProviderImpl minecraftProvider, MappingsProviderImpl mappingsProvider) {
|
||||
this.minecraftProvider = minecraftProvider;
|
||||
minecraftIntermediaryJar = new File(getDirectories().getUserCache(), "minecraft-" + getJarVersionString("intermediary") + ".jar");
|
||||
minecraftSrgJar = !getExtension().isForge() ? null : new File(getExtension().getUserCache(), "minecraft-" + getJarVersionString("srg") + ".jar");
|
||||
minecraftSrgJar = !getExtension().isForge() ? null : new File(getDirectories().getUserCache(), "minecraft-" + getJarVersionString("srg") + ".jar");
|
||||
minecraftMappedJar = new File(getJarDirectory(getDirectories().getUserCache(), "mapped"), "minecraft-" + getJarVersionString("mapped") + ".jar");
|
||||
inputJar = getExtension().isForge() ? mappingsProvider.patchedProvider.getMergedJar() : minecraftProvider.getMergedJar();
|
||||
|
||||
if (getExtension().isForge()) {
|
||||
inputForgeJar = mappingsProvider.patchedProvider.getForgeMergedJar();
|
||||
forgeIntermediaryJar = new File(getExtension().getUserCache(), "forge-" + getJarVersionString("intermediary") + ".jar");
|
||||
forgeSrgJar = new File(getExtension().getUserCache(), "forge-" + getJarVersionString("srg") + ".jar");
|
||||
forgeMappedJar = new File(getJarDirectory(getExtension().getUserCache(), "mapped"), "forge/forge-" + getJarVersionString("mapped") + ".jar");
|
||||
forgeIntermediaryJar = new File(getDirectories().getUserCache(), "forge-" + getJarVersionString("intermediary") + ".jar");
|
||||
forgeSrgJar = new File(getDirectories().getUserCache(), "forge-" + getJarVersionString("srg") + ".jar");
|
||||
forgeMappedJar = new File(getJarDirectory(getDirectories().getUserCache(), "mapped"), "forge/forge-" + getJarVersionString("mapped") + ".jar");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ public class ForgeSourcesRemapper {
|
||||
}
|
||||
|
||||
private static void remapForgeSourcesInner(Project project, Path tmpInput, Path tmpOutput) throws IOException {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
Mercury mercury = SourceRemapper.createMercuryWithClassPath(project, false);
|
||||
|
||||
MappingSet mappings = new TinyMappingsReader(extension.getMappingsProvider().getMappingsWithSrg(), "srg", "named").read();
|
||||
|
||||
@@ -26,30 +26,49 @@ 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 java.util.function.Supplier;
|
||||
|
||||
import com.google.common.base.Suppliers;
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.NamedDomainObjectContainer;
|
||||
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.provider.Property;
|
||||
import org.gradle.api.tasks.SourceSet;
|
||||
|
||||
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
||||
import net.fabricmc.loom.api.MixinApExtensionAPI;
|
||||
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
||||
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
||||
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.processors.JarProcessor;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.GradleMappingContext;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpec;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpecBuilder;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsDependency;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
import net.fabricmc.loom.util.function.LazyBool;
|
||||
|
||||
/**
|
||||
* This class implements the public extension api.
|
||||
*/
|
||||
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 List<LoomDecompiler> decompilers = new ArrayList<>();
|
||||
protected final List<JarProcessor> jarProcessors = new ArrayList<>();
|
||||
protected final ConfigurableFileCollection log4jConfigs;
|
||||
@@ -62,10 +81,46 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||
|
||||
private NamedDomainObjectContainer<RunConfigSettings> runConfigs;
|
||||
|
||||
// ===================
|
||||
// Architectury Loom
|
||||
// ===================
|
||||
private Property<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<Supplier<SourceSet>> forgeLocalMods = Collections.synchronizedList(new ArrayList<>(Collections.singletonList(() ->
|
||||
getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().getByName("main"))));
|
||||
public final List<Consumer<RunConfig>> settingsPostEdit = new ArrayList<>();
|
||||
private NamedDomainObjectContainer<LaunchProviderSettings> launchConfigs;
|
||||
|
||||
protected LoomGradleExtensionApiImpl(Project project, LoomFiles directories) {
|
||||
this.runConfigs = project.container(RunConfigSettings.class,
|
||||
baseName -> new RunConfigSettings(project, baseName));
|
||||
this.log4jConfigs = project.files(directories.getDefaultLog4jConfigFile());
|
||||
this.platform = project.getObjects().property(ModPlatform.class).convention(project.provider(Suppliers.memoize(() -> {
|
||||
Object platformProperty = project.findProperty(PLATFORM_PROPERTY);
|
||||
|
||||
if (platformProperty != null) {
|
||||
return ModPlatform.valueOf(Objects.toString(platformProperty).toUpperCase(Locale.ROOT));
|
||||
}
|
||||
|
||||
Object forgeProperty = project.findProperty(FORGE_PROPERTY);
|
||||
|
||||
if (forgeProperty != null) {
|
||||
project.getLogger().warn("Project " + project.getPath() + " is using property " + FORGE_PROPERTY + " to enable forge mode. Please use '" + PLATFORM_PROPERTY + " = forge' instead!");
|
||||
return Boolean.parseBoolean(Objects.toString(forgeProperty)) ? ModPlatform.FORGE : ModPlatform.FABRIC;
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -113,16 +168,27 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||
|
||||
@Override
|
||||
public Dependency layered(Action<LayeredMappingSpecBuilder> action) {
|
||||
LayeredMappingSpecBuilder builder = new LayeredMappingSpecBuilder();
|
||||
LayeredMappingSpecBuilder builder = new LayeredMappingSpecBuilder(this);
|
||||
action.execute(builder);
|
||||
LayeredMappingSpec builtSpec = builder.build();
|
||||
return new LayeredMappingsDependency(new GradleMappingContext(getProject(), "layers_" + builtSpec.getVersion().replace("+", "_").replace(".", "_")), builtSpec, builtSpec.getVersion());
|
||||
return new LayeredMappingsDependency(new GradleMappingContext(getProject(), () -> {
|
||||
return "layers/" + getMinecraftVersion() + "_" + builtSpec.getVersion().replace("+", "_").replace(".", "_");
|
||||
}), builtSpec, builtSpec.getVersion());
|
||||
}
|
||||
|
||||
protected abstract String getMinecraftVersion();
|
||||
|
||||
@Override
|
||||
public String getRefmapName() {
|
||||
if (refmapName == null || refmapName.isEmpty()) {
|
||||
String defaultRefmapName = getProject().getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
|
||||
String defaultRefmapName;
|
||||
|
||||
if (getProject().getRootProject() == getProject()) {
|
||||
defaultRefmapName = getProject().getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
|
||||
} else {
|
||||
defaultRefmapName = getProject().getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-" + getProject().getPath().replaceFirst(":", "").replace(':', '_') + "-refmap.json";
|
||||
}
|
||||
|
||||
getProject().getLogger().info("Could not find refmap definition, will be using default name: " + defaultRefmapName);
|
||||
refmapName = defaultRefmapName;
|
||||
}
|
||||
@@ -182,6 +248,140 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||
|
||||
protected abstract MixinApExtension getMixinApExtension();
|
||||
|
||||
@Override
|
||||
public void silentMojangMappingsLicense() {
|
||||
this.silentMojangMappingsLicense = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSilentMojangMappingsLicenseEnabled() {
|
||||
return silentMojangMappingsLicense;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Property<ModPlatform> getPlatform() {
|
||||
return platform;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsInclude() {
|
||||
return !isForge() || supportsInclude.getAsBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGenerateSrgTiny(Boolean generateSrgTiny) {
|
||||
this.generateSrgTiny = generateSrgTiny;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateSrgTiny() {
|
||||
if (generateSrgTiny != null) {
|
||||
return generateSrgTiny;
|
||||
}
|
||||
|
||||
return isForge();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void launches(Action<NamedDomainObjectContainer<LaunchProviderSettings>> action) {
|
||||
action.execute(launchConfigs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NamedDomainObjectContainer<LaunchProviderSettings> getLaunchConfigs() {
|
||||
return launchConfigs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getDataGenMods() {
|
||||
return dataGenMods;
|
||||
}
|
||||
|
||||
@SuppressWarnings("Convert2Lambda")
|
||||
@Override
|
||||
public void localMods(Action<SourceSetConsumer> action) {
|
||||
if (!isForge()) {
|
||||
throw new UnsupportedOperationException("Not running with Forge support.");
|
||||
}
|
||||
|
||||
action.execute(new SourceSetConsumer() {
|
||||
@Override
|
||||
public void add(Object... sourceSets) {
|
||||
for (Object sourceSet : sourceSets) {
|
||||
if (sourceSet instanceof SourceSet) {
|
||||
forgeLocalMods.add(() -> (SourceSet) sourceSet);
|
||||
} else {
|
||||
forgeLocalMods.add(() -> getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().findByName(String.valueOf(forgeLocalMods)));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Supplier<SourceSet>> getForgeLocalMods() {
|
||||
return forgeLocalMods;
|
||||
}
|
||||
|
||||
@SuppressWarnings("Convert2Lambda")
|
||||
@Override
|
||||
public void dataGen(Action<DataGenConsumer> action) {
|
||||
if (!isForge()) {
|
||||
throw new UnsupportedOperationException("Not running with Forge support.");
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// This is here to ensure that LoomGradleExtensionApiImpl compiles without any unimplemented methods
|
||||
private final class EnsureCompile extends LoomGradleExtensionApiImpl {
|
||||
private EnsureCompile() {
|
||||
@@ -203,5 +403,10 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||
protected MixinApExtension getMixinApExtension() {
|
||||
throw new RuntimeException("Yeah... something is really wrong");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMinecraftVersion() {
|
||||
throw new RuntimeException("Yeah... something is really wrong");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,11 +112,13 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
|
||||
|
||||
@Override
|
||||
public MappingSet getOrCreateSrcMappingCache(int id, Supplier<MappingSet> factory) {
|
||||
if (id < 0 || id >= srcMappingCache.length) return factory.get();
|
||||
return srcMappingCache[id] != null ? srcMappingCache[id] : (srcMappingCache[id] = factory.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mercury getOrCreateSrcMercuryCache(int id, Supplier<Mercury> factory) {
|
||||
if (id < 0 || id >= srcMercuryCache.length) return factory.get();
|
||||
return srcMercuryCache[id] != null ? srcMercuryCache[id] : (srcMercuryCache[id] = factory.get());
|
||||
}
|
||||
|
||||
@@ -167,4 +169,9 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
|
||||
public MixinApExtension getMixinApExtension() {
|
||||
return this.mixinApExtension;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMinecraftVersion() {
|
||||
return getMinecraftProvider().minecraftVersion();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public class GenVsCodeProjectTask extends AbstractLoomTask {
|
||||
}
|
||||
|
||||
public static void generate(Project project) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
File projectDir = project.getRootProject().file(".vscode");
|
||||
|
||||
if (!projectDir.exists()) {
|
||||
|
||||
@@ -110,7 +110,7 @@ public class GenerateSourcesTask extends AbstractLoomTask {
|
||||
}
|
||||
|
||||
public static File getMappedJarFileWithSuffix(Project project, String suffix, boolean forgeJar) {
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(getProject());
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
MappingsProviderImpl mappingsProvider = extension.getMappingsProvider();
|
||||
File mappedJar = forgeJar ? mappingsProvider.mappedProvider.getForgeMappedJar() : mappingsProvider.mappedProvider.getMappedJar();
|
||||
String path = mappedJar.getAbsolutePath();
|
||||
|
||||
@@ -111,7 +111,7 @@ public final class LoomTasks {
|
||||
}
|
||||
|
||||
private static void registerLaunchSettings(Project project) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
Preconditions.checkArgument(extension.getLaunchConfigs().size() == 0, "Launch configurations must not be registered before loom");
|
||||
extension.getLaunchConfigs().create("client");
|
||||
extension.getLaunchConfigs().create("server");
|
||||
|
||||
@@ -356,7 +356,7 @@ public class RemapJarTask extends Jar {
|
||||
}
|
||||
|
||||
private NestedJarProvider getNestedJarProvider() {
|
||||
if (!getProject().getExtensions().getByType(LoomGradleExtension.class).supportsInclude()) {
|
||||
if (!LoomGradleExtension.get(getProject()).supportsInclude()) {
|
||||
return EmptyNestedJarProvider.INSTANCE;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ import net.fabricmc.loom.configuration.ide.RunConfig;
|
||||
public class RunDataTask extends AbstractRunTask {
|
||||
public RunDataTask() {
|
||||
super(project -> {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
return RunConfig.runConfig(project, extension.getRunConfigs().getByName("data"));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ public class SourceRemapper {
|
||||
}
|
||||
|
||||
public static String intermediary(Project project) {
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project);;
|
||||
return extension.isForge() ? "srg" : "intermediary";
|
||||
}
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@ public class SpecialSourceExecutor {
|
||||
.filter(s -> !s.startsWith("\t"))
|
||||
.map(s -> s.split(" ")[0] + ".class")
|
||||
.collect(Collectors.toSet());
|
||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||
Path stripped = extension.getProjectBuildCache().toPath().resolve(officialJar.getFileName().toString().substring(0, officialJar.getFileName().toString().length() - 4) + "-filtered.jar");
|
||||
LoomGradleExtension extension = LoomGradleExtension.get(project.getProject());
|
||||
Path stripped = extension.getFiles().getProjectBuildCache().toPath().resolve(officialJar.getFileName().toString().substring(0, officialJar.getFileName().toString().length() - 4) + "-filtered.jar");
|
||||
Files.deleteIfExists(stripped);
|
||||
|
||||
try (JarOutputStream output = new JarOutputStream(Files.newOutputStream(stripped))) {
|
||||
@@ -64,7 +64,7 @@ public class SpecialSourceExecutor {
|
||||
});
|
||||
}
|
||||
|
||||
Path output = extension.getProjectBuildCache().toPath().resolve(officialJar.getFileName().toString().substring(0, officialJar.getFileName().toString().length() - 4) + "-srg-output.jar");
|
||||
Path output = extension.getFiles().getProjectBuildCache().toPath().resolve(officialJar.getFileName().toString().substring(0, officialJar.getFileName().toString().length() - 4) + "-srg-output.jar");
|
||||
Files.deleteIfExists(output);
|
||||
|
||||
String[] args = new String[] {
|
||||
|
||||
Reference in New Issue
Block a user