diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index b21de99a..22c59b11 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -41,6 +41,7 @@ import net.fabricmc.loom.configuration.LoomDependencyManager; import net.fabricmc.loom.configuration.accesswidener.AccessWidenerFile; import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsFactory; import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; +import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMetadataProvider; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.library.LibraryProcessorManager; import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider; @@ -68,6 +69,10 @@ public interface LoomGradleExtension extends LoomGradleExtensionAPI { LoomDependencyManager getDependencyManager(); + MinecraftMetadataProvider getMetadataProvider(); + + void setMetadataProvider(MinecraftMetadataProvider metadataProvider); + MinecraftProvider getMinecraftProvider(); void setMinecraftProvider(MinecraftProvider minecraftProvider); diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index 743091ac..5cf753ec 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -60,7 +60,6 @@ import net.fabricmc.loom.configuration.processors.MinecraftJarProcessorManager; import net.fabricmc.loom.configuration.processors.ModJavadocProcessor; import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsFactory; import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; -import net.fabricmc.loom.configuration.providers.minecraft.MinecraftJarConfiguration; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMetadataProvider; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftSourceSets; @@ -69,7 +68,6 @@ import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMi import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider; import net.fabricmc.loom.extension.MixinExtension; import net.fabricmc.loom.util.Checksum; -import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.ExceptionUtil; import net.fabricmc.loom.util.ProcessUtil; import net.fabricmc.loom.util.gradle.GradleUtils; @@ -154,13 +152,10 @@ public abstract class CompileConfiguration implements Runnable { final LoomGradleExtension extension = configContext.extension(); final MinecraftMetadataProvider metadataProvider = MinecraftMetadataProvider.create(configContext); + extension.setMetadataProvider(metadataProvider); var jarConfiguration = extension.getMinecraftJarConfiguration().get(); - if (jarConfiguration == MinecraftJarConfiguration.MERGED && !metadataProvider.getVersionMeta().isVersionOrNewer(Constants.RELEASE_TIME_1_3)) { - jarConfiguration = MinecraftJarConfiguration.LEGACY_MERGED; - } - // Provide the vanilla mc jars final MinecraftProvider minecraftProvider = jarConfiguration.createMinecraftProvider(metadataProvider, configContext); extension.setMinecraftProvider(minecraftProvider); diff --git a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java index 170188e6..64d7524e 100644 --- a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java +++ b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java @@ -68,8 +68,10 @@ import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingSpecBuil import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsFactory; import net.fabricmc.loom.configuration.providers.minecraft.ManifestLocations; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftJarConfiguration; +import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMetadataProvider; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftSourceSets; import net.fabricmc.loom.task.GenerateSourcesTask; +import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.DeprecationHelper; import net.fabricmc.loom.util.MirrorUtil; import net.fabricmc.loom.util.fmj.FabricModJson; @@ -151,7 +153,23 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA this.minecraftJarProcessors.finalizeValueOnRead(); //noinspection unchecked - this.minecraftJarConfiguration = project.getObjects().property((Class>) (Class) MinecraftJarConfiguration.class).convention(MinecraftJarConfiguration.MERGED); + this.minecraftJarConfiguration = project.getObjects().property((Class>) (Class) MinecraftJarConfiguration.class) + .convention(project.provider(() -> { + final LoomGradleExtension extension = LoomGradleExtension.get(project); + final MinecraftMetadataProvider metadataProvider = extension.getMetadataProvider(); + + // if no configuration is selected by the user, attempt to select one + // based on the mc version and which sides are present for it + if (!metadataProvider.getVersionMeta().downloads().containsKey("server")) { + return MinecraftJarConfiguration.CLIENT_ONLY; + } else if (!metadataProvider.getVersionMeta().downloads().containsKey("client")) { + return MinecraftJarConfiguration.SERVER_ONLY; + } else if (metadataProvider.getVersionMeta().isVersionOrNewer(Constants.RELEASE_TIME_1_3)) { + return MinecraftJarConfiguration.MERGED; + } else { + return MinecraftJarConfiguration.LEGACY_MERGED; + } + })); this.minecraftJarConfiguration.finalizeValueOnRead(); this.accessWidener.finalizeValueOnRead(); diff --git a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionImpl.java index 18920a00..94dabe73 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.providers.mappings.IntermediaryMappingsPr import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsFactory; import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; import net.fabricmc.loom.configuration.providers.mappings.NoOpIntermediateMappingsProvider; +import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMetadataProvider; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.library.LibraryProcessorManager; import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider; @@ -66,6 +67,7 @@ public abstract class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl private final List transitiveAccessWideners = new ArrayList<>(); private LoomDependencyManager dependencyManager; + private MinecraftMetadataProvider metadataProvider; private MinecraftProvider minecraftProvider; private MappingConfiguration mappingConfiguration; private NamedMinecraftProvider namedMinecraftProvider; @@ -130,6 +132,16 @@ public abstract class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl return Objects.requireNonNull(dependencyManager, "Cannot get LoomDependencyManager before it has been setup"); } + @Override + public MinecraftMetadataProvider getMetadataProvider() { + return Objects.requireNonNull(metadataProvider, "Cannot get MinecraftMetadataProvider before it has been setup"); + } + + @Override + public void setMetadataProvider(MinecraftMetadataProvider metadataProvider) { + this.metadataProvider = metadataProvider; + } + @Override public MinecraftProvider getMinecraftProvider() { return Objects.requireNonNull(minecraftProvider, "Cannot get MinecraftProvider before it has been setup");