Fixes for Mojang mappings handling (#264)
* Only resolve SelfResolvingDependencies once * mojmap: Improve styling, move to a better group + artifact id
This commit is contained in:
		
							parent
							
								
									9029a699d9
								
							
						
					
					
						commit
						37af4c8152
					
				
					 3 changed files with 26 additions and 13 deletions
				
			
		|  | @ -118,7 +118,7 @@ public class MigrateMappingsTask extends AbstractLoomTask { | |||
| 		Set<File> files; | ||||
| 
 | ||||
| 		try { | ||||
| 			if (mappings.startsWith("net.mojang.minecraft:mappings:")) { | ||||
| 			if (mappings.startsWith(MojangMappingsDependency.GROUP + ':' + MojangMappingsDependency.MODULE + ':')) { | ||||
| 				if (!mappings.endsWith(":" + project.getExtensions().getByType(LoomGradleExtension.class).getMinecraftProvider().getMinecraftVersion())) { | ||||
| 					throw new UnsupportedOperationException("Migrating Mojang mappings is currently only supported for the specified minecraft version"); | ||||
| 				} | ||||
|  |  | |||
|  | @ -175,12 +175,14 @@ public abstract class DependencyProvider { | |||
| 
 | ||||
| 	public static class FileDependencyInfo extends DependencyInfo { | ||||
| 		protected final Map<String, File> classifierToFile = new HashMap<>(); | ||||
| 		protected final Set<File> resolvedFiles; | ||||
| 		protected final String group, name, version; | ||||
| 
 | ||||
| 		FileDependencyInfo(Project project, SelfResolvingDependency dependency, Configuration configuration) { | ||||
| 			super(project, dependency, configuration); | ||||
| 
 | ||||
| 			Set<File> files = dependency.resolve(); | ||||
| 			this.resolvedFiles = files; | ||||
| 			switch (files.size()) { | ||||
| 			case 0: //Don't think Gradle would ever let you do this | ||||
| 				throw new IllegalStateException("Empty dependency?"); | ||||
|  | @ -263,5 +265,10 @@ public abstract class DependencyProvider { | |||
| 		public String getResolvedDepString() { | ||||
| 			return getDepString(); | ||||
| 		} | ||||
| 
 | ||||
| 		@Override | ||||
| 		public Set<File> resolve() { | ||||
| 			return this.resolvedFiles; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -60,6 +60,12 @@ import net.fabricmc.lorenztiny.TinyMappingsReader; | |||
| import net.fabricmc.mapping.tree.TinyMappingFactory; | ||||
| 
 | ||||
| public class MojangMappingsDependency implements SelfResolvingDependency { | ||||
| 	public static final String GROUP = "net.minecraft"; | ||||
| 	public static final String MODULE = "mappings"; | ||||
| 	// Keys in dependency manifest | ||||
| 	private static final String MANIFEST_CLIENT_MAPPINGS = "client_mappings"; | ||||
| 	private static final String MANIFEST_SERVER_MAPPINGS = "server_mappings"; | ||||
| 
 | ||||
| 	private final Project project; | ||||
| 	private final LoomGradleExtension extension; | ||||
| 
 | ||||
|  | @ -71,9 +77,9 @@ public class MojangMappingsDependency implements SelfResolvingDependency { | |||
| 	@Override | ||||
| 	public Set<File> resolve() { | ||||
| 		Path mappingsDir = extension.getMappingsProvider().getMappingsDir(); | ||||
| 		Path mappingsFile = mappingsDir.resolve(String.format("net.mojang.minecraft-mappings-%s.tiny", getVersion())); | ||||
| 		Path clientMappings = mappingsDir.resolve(String.format("net.mojang.minecraft.mappings-%s-client.map", getVersion())); | ||||
| 		Path serverMappings = mappingsDir.resolve(String.format("net.mojang.minecraft.mappings-%s-server.map", getVersion())); | ||||
| 		Path mappingsFile = mappingsDir.resolve(String.format("%s.%s-%s.tiny", GROUP, MODULE, getVersion())); | ||||
| 		Path clientMappings = mappingsDir.resolve(String.format("%s.%s-%s-client.map", GROUP, MODULE, getVersion())); | ||||
| 		Path serverMappings = mappingsDir.resolve(String.format("%s.%s-%s-server.map", GROUP, MODULE, getVersion())); | ||||
| 
 | ||||
| 		if (!Files.exists(mappingsFile) || project.getGradle().getStartParameter().isRefreshDependencies()) { | ||||
| 			MappingSet mappingSet; | ||||
|  | @ -95,17 +101,17 @@ public class MojangMappingsDependency implements SelfResolvingDependency { | |||
| 		} | ||||
| 
 | ||||
| 		try (BufferedReader clientBufferedReader = Files.newBufferedReader(clientMappings, StandardCharsets.UTF_8)) { | ||||
| 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | ||||
| 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | ||||
| 			project.getLogger().warn("Using of the official minecraft mappings is at your own risk!"); | ||||
| 			project.getLogger().warn("Please make sure to read and understand the following license:"); | ||||
| 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | ||||
| 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | ||||
| 			String line; | ||||
| 
 | ||||
| 			while ((line = clientBufferedReader.readLine()).startsWith("#")) { | ||||
| 				project.getLogger().warn(line); | ||||
| 			} | ||||
| 
 | ||||
| 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | ||||
| 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | ||||
| 		} catch (IOException e) { | ||||
| 			throw new RuntimeException("Failed to read client mappings", e); | ||||
| 		} | ||||
|  | @ -116,12 +122,12 @@ public class MojangMappingsDependency implements SelfResolvingDependency { | |||
| 	private MappingSet getMappingsSet(Path clientMappings, Path serverMappings) throws IOException { | ||||
| 		MinecraftVersionInfo versionInfo = extension.getMinecraftProvider().getVersionInfo(); | ||||
| 
 | ||||
| 		if (versionInfo.downloads.get("client_mappings") == null) { | ||||
| 		if (versionInfo.downloads.get(MANIFEST_CLIENT_MAPPINGS) == null) { | ||||
| 			throw new RuntimeException("Failed to find official mojang mappings for " + getVersion()); | ||||
| 		} | ||||
| 
 | ||||
| 		String clientMappingsUrl = versionInfo.downloads.get("client_mappings").url; | ||||
| 		String serverMappingsUrl = versionInfo.downloads.get("server_mappings").url; | ||||
| 		String clientMappingsUrl = versionInfo.downloads.get(MANIFEST_CLIENT_MAPPINGS).url; | ||||
| 		String serverMappingsUrl = versionInfo.downloads.get(MANIFEST_SERVER_MAPPINGS).url; | ||||
| 
 | ||||
| 		DownloadUtil.downloadIfChanged(new URL(clientMappingsUrl), clientMappings.toFile(), project.getLogger()); | ||||
| 		DownloadUtil.downloadIfChanged(new URL(serverMappingsUrl), serverMappings.toFile(), project.getLogger()); | ||||
|  | @ -150,7 +156,7 @@ public class MojangMappingsDependency implements SelfResolvingDependency { | |||
| 		iterateClasses(intermediaryToOfficial, inputMappings -> { | ||||
| 			officialToNamed.getClassMapping(inputMappings.getFullDeobfuscatedName()) | ||||
| 					.ifPresent(namedClass -> { | ||||
| 						ClassMapping<?, ?> mojangClassMapping = intermediaryToMojang.getOrCreateClassMapping(inputMappings .getFullObfuscatedName()) | ||||
| 						ClassMapping<?, ?> mojangClassMapping = intermediaryToMojang.getOrCreateClassMapping(inputMappings.getFullObfuscatedName()) | ||||
| 								.setDeobfuscatedName(namedClass.getFullDeobfuscatedName()); | ||||
| 
 | ||||
| 						for (FieldMapping fieldMapping : inputMappings .getFieldMappings()) { | ||||
|  | @ -186,12 +192,12 @@ public class MojangMappingsDependency implements SelfResolvingDependency { | |||
| 
 | ||||
| 	@Override | ||||
| 	public String getGroup() { | ||||
| 		return "net.mojang.minecraft"; | ||||
| 		return GROUP; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public String getName() { | ||||
| 		return "mappings"; | ||||
| 		return MODULE; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue