Fix issues resolving libraries and natives for old mc versions down to 1.3.2. (#584)
* Fix issues resolving libraries and natives for old mc versions. Add a simple integration tests. Fixes #583 and #582 * Test 1.6.4 and 1.3.2
This commit is contained in:
		
							parent
							
								
									316f9d9508
								
							
						
					
					
						commit
						d4be1e7bdc
					
				
					 5 changed files with 69 additions and 11 deletions
				
			
		|  | @ -28,6 +28,7 @@ import org.gradle.api.Plugin; | |||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.artifacts.dsl.RepositoryHandler; | ||||
| import org.gradle.api.artifacts.repositories.IvyArtifactRepository; | ||||
| import org.gradle.api.artifacts.repositories.MavenArtifactRepository; | ||||
| import org.gradle.api.initialization.Settings; | ||||
| import org.gradle.api.invocation.Gradle; | ||||
| import org.gradle.api.plugins.ExtensionAware; | ||||
|  | @ -92,4 +93,15 @@ public class LoomRepositoryPlugin implements Plugin<PluginAware> { | |||
| 			repo.metadataSources(IvyArtifactRepository.MetadataSources::artifact); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void setupForLegacyVersions(Project project) { | ||||
| 		// 1.4.7 contains an LWJGL version with an invalid maven pom, set the metadata sources to not use the pom for this version. | ||||
| 		project.getRepositories().named("Mojang", MavenArtifactRepository.class, repo -> { | ||||
| 			repo.metadataSources(sources -> { | ||||
| 				// Only use the maven artifact and not the pom or gradle metadata. | ||||
| 				sources.artifact(); | ||||
| 				sources.ignoreGradleMetadataRedirection(); | ||||
| 			}); | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| /* | ||||
|  * This file is part of fabric-loom, licensed under the MIT License (MIT). | ||||
|  * | ||||
|  * Copyright (c) 2018-2021 FabricMC | ||||
|  * Copyright (c) 2018-2022 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 | ||||
|  | @ -31,12 +31,13 @@ import org.gradle.api.Project; | |||
| import org.gradle.api.artifacts.ExternalModuleDependency; | ||||
| 
 | ||||
| import net.fabricmc.loom.LoomGradleExtension; | ||||
| import net.fabricmc.loom.LoomRepositoryPlugin; | ||||
| import net.fabricmc.loom.configuration.providers.BundleMetadata; | ||||
| import net.fabricmc.loom.util.Constants; | ||||
| import net.fabricmc.loom.util.OperatingSystem; | ||||
| 
 | ||||
| public class MinecraftLibraryProvider { | ||||
| 	private static final Pattern NATIVES_PATTERN = Pattern.compile("^(?<group>.*)/(.*?)/(?<version>.*)/((?<name>.*?)-([0-9].*?)-)(?<classifier>.*).jar$"); | ||||
| 	private static final Pattern NATIVES_PATTERN = Pattern.compile("^(?<group>.*)/(.*?)/(?<version>.*)/((?<name>.*?)-(\\k<version>)-)(?<classifier>.*).jar$"); | ||||
| 
 | ||||
| 	public void provide(MinecraftProvider minecraftProvider, Project project) { | ||||
| 		final LoomGradleExtension extension = LoomGradleExtension.get(project); | ||||
|  | @ -58,6 +59,11 @@ public class MinecraftLibraryProvider { | |||
| 			} | ||||
| 
 | ||||
| 			if (library.isValidForOS() && !library.hasNatives() && library.artifact() != null) { | ||||
| 				// 1.4.7 contains an LWJGL version with an invalid maven pom, set the metadata sources to not use the pom for this version. | ||||
| 				if ("org.lwjgl.lwjgl:lwjgl:2.9.1-nightly-20130708-debug3".equals(library.name())) { | ||||
| 					LoomRepositoryPlugin.setupForLegacyVersions(project); | ||||
| 				} | ||||
| 
 | ||||
| 				if (runtimeOnlyLog4j && library.name().startsWith("org.apache.logging.log4j")) { | ||||
| 					// Make log4j a runtime only dep to force slf4j. | ||||
| 					project.getDependencies().add(Constants.Configurations.MINECRAFT_RUNTIME_DEPENDENCIES, library.name()); | ||||
|  | @ -74,10 +80,15 @@ public class MinecraftLibraryProvider { | |||
| 			if (library.hasNativesForOS()) { | ||||
| 				MinecraftVersionMeta.Download nativeDownload = library.classifierForOS(); | ||||
| 
 | ||||
| 				Matcher matcher = NATIVES_PATTERN.matcher(nativeDownload.path()); | ||||
| 				if (nativeDownload == null) { | ||||
| 					continue; | ||||
| 				} | ||||
| 
 | ||||
| 				final String path = nativeDownload.path(); | ||||
| 				final Matcher matcher = NATIVES_PATTERN.matcher(path); | ||||
| 
 | ||||
| 				if (!matcher.find()) { | ||||
| 					project.getLogger().warn("Failed to match regex for natives path : " + nativeDownload.path()); | ||||
| 					project.getLogger().warn("Failed to match regex for natives path : " + path); | ||||
| 					continue; | ||||
| 				} | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| /* | ||||
|  * This file is part of fabric-loom, licensed under the MIT License (MIT). | ||||
|  * | ||||
|  * Copyright (c) 2021 FabricMC | ||||
|  * Copyright (c) 2021-2022 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 | ||||
|  | @ -28,7 +28,7 @@ import org.gradle.util.GradleVersion | |||
| 
 | ||||
| class LoomTestConstants { | ||||
|     public final static String DEFAULT_GRADLE = GradleVersion.current().getVersion() | ||||
|     public final static String PRE_RELEASE_GRADLE = "7.5-20220122232041+0000" | ||||
|     public final static String PRE_RELEASE_GRADLE = "7.5-20220124231322+0000" | ||||
| 
 | ||||
|     public final static String[] STANDARD_TEST_VERSIONS = [DEFAULT_GRADLE, PRE_RELEASE_GRADLE] | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| /* | ||||
|  * This file is part of fabric-loom, licensed under the MIT License (MIT). | ||||
|  * | ||||
|  * Copyright (c) 2016-2021 FabricMC | ||||
|  * Copyright (c) 2016-2022 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 | ||||
|  | @ -45,9 +45,7 @@ class DecompileTest extends Specification implements GradleProjectTestTrait { | |||
| 
 | ||||
| 		where: | ||||
| 			decompiler 		| task								| version | ||||
| 			'fernflower'	| "genSourcesWithFernFlower"		| DEFAULT_GRADLE | ||||
| 			'fernflower'	| "genSourcesWithFernFlower"		| PRE_RELEASE_GRADLE | ||||
| 			'cfr' 			| "genSourcesWithCfr"				| DEFAULT_GRADLE | ||||
| 			'cfr' 			| "genSourcesWithCfr"				| PRE_RELEASE_GRADLE | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| /* | ||||
|  * This file is part of fabric-loom, licensed under the MIT License (MIT). | ||||
|  * | ||||
|  * Copyright (c) 2018-2021 FabricMC | ||||
|  * Copyright (c) 2018-2022 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 | ||||
|  | @ -28,7 +28,8 @@ import net.fabricmc.loom.test.util.GradleProjectTestTrait | |||
| import spock.lang.Specification | ||||
| import spock.lang.Unroll | ||||
| 
 | ||||
| import static net.fabricmc.loom.test.LoomTestConstants.* | ||||
| import static net.fabricmc.loom.test.LoomTestConstants.PRE_RELEASE_GRADLE | ||||
| import static net.fabricmc.loom.test.LoomTestConstants.STANDARD_TEST_VERSIONS | ||||
| import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||
| 
 | ||||
| // This test uses gradle 4.9 and 1.14.4 v1 mappings | ||||
|  | @ -47,4 +48,40 @@ class LegacyProjectTest extends Specification implements GradleProjectTestTrait | |||
| 		where: | ||||
| 			version << STANDARD_TEST_VERSIONS | ||||
| 	} | ||||
| 
 | ||||
| 	@Unroll | ||||
| 	def "Unsupported minecraft (minecraft #version)"() { | ||||
| 		setup: | ||||
| 			def gradle = gradleProject(project: "minimalBase", version: PRE_RELEASE_GRADLE) | ||||
| 			gradle.buildGradle << """ | ||||
| 				loom { | ||||
|                     intermediaryUrl = 'https://s.modm.us/intermediary-empty-v2.jar' | ||||
|                 } | ||||
| 
 | ||||
|                 dependencies { | ||||
|                     minecraft "com.mojang:minecraft:${version}" | ||||
|                     mappings loom.layered() { | ||||
| 						// No names | ||||
| 					} | ||||
| 
 | ||||
|                     modImplementation "net.fabricmc:fabric-loader:0.12.12" | ||||
|                 } | ||||
| 			""" | ||||
| 
 | ||||
| 		when: | ||||
| 			def result = gradle.run(task: "configureClientLaunch") | ||||
| 
 | ||||
| 		then: | ||||
| 			result.task(":configureClientLaunch").outcome == SUCCESS | ||||
| 
 | ||||
| 		where: | ||||
| 			version 		| _ | ||||
| 			'1.13.2'		| _ | ||||
| 			'1.12.2'		| _ | ||||
| 			'1.8.9'			| _ | ||||
| 			'1.7.10'		| _ | ||||
| 			'1.6.4'			| _ | ||||
| 			'1.4.7'			| _ | ||||
| 			'1.3.2'			| _ | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue