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; | 		Set<File> files; | ||||||
| 
 | 
 | ||||||
| 		try { | 		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())) { | 				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"); | 					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 { | 	public static class FileDependencyInfo extends DependencyInfo { | ||||||
| 		protected final Map<String, File> classifierToFile = new HashMap<>(); | 		protected final Map<String, File> classifierToFile = new HashMap<>(); | ||||||
|  | 		protected final Set<File> resolvedFiles; | ||||||
| 		protected final String group, name, version; | 		protected final String group, name, version; | ||||||
| 
 | 
 | ||||||
| 		FileDependencyInfo(Project project, SelfResolvingDependency dependency, Configuration configuration) { | 		FileDependencyInfo(Project project, SelfResolvingDependency dependency, Configuration configuration) { | ||||||
| 			super(project, dependency, configuration); | 			super(project, dependency, configuration); | ||||||
| 
 | 
 | ||||||
| 			Set<File> files = dependency.resolve(); | 			Set<File> files = dependency.resolve(); | ||||||
|  | 			this.resolvedFiles = files; | ||||||
| 			switch (files.size()) { | 			switch (files.size()) { | ||||||
| 			case 0: //Don't think Gradle would ever let you do this | 			case 0: //Don't think Gradle would ever let you do this | ||||||
| 				throw new IllegalStateException("Empty dependency?"); | 				throw new IllegalStateException("Empty dependency?"); | ||||||
|  | @ -263,5 +265,10 @@ public abstract class DependencyProvider { | ||||||
| 		public String getResolvedDepString() { | 		public String getResolvedDepString() { | ||||||
| 			return getDepString(); | 			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; | import net.fabricmc.mapping.tree.TinyMappingFactory; | ||||||
| 
 | 
 | ||||||
| public class MojangMappingsDependency implements SelfResolvingDependency { | 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 Project project; | ||||||
| 	private final LoomGradleExtension extension; | 	private final LoomGradleExtension extension; | ||||||
| 
 | 
 | ||||||
|  | @ -71,9 +77,9 @@ public class MojangMappingsDependency implements SelfResolvingDependency { | ||||||
| 	@Override | 	@Override | ||||||
| 	public Set<File> resolve() { | 	public Set<File> resolve() { | ||||||
| 		Path mappingsDir = extension.getMappingsProvider().getMappingsDir(); | 		Path mappingsDir = extension.getMappingsProvider().getMappingsDir(); | ||||||
| 		Path mappingsFile = mappingsDir.resolve(String.format("net.mojang.minecraft-mappings-%s.tiny", getVersion())); | 		Path mappingsFile = mappingsDir.resolve(String.format("%s.%s-%s.tiny", GROUP, MODULE, getVersion())); | ||||||
| 		Path clientMappings = mappingsDir.resolve(String.format("net.mojang.minecraft.mappings-%s-client.map", getVersion())); | 		Path clientMappings = mappingsDir.resolve(String.format("%s.%s-%s-client.map", GROUP, MODULE, getVersion())); | ||||||
| 		Path serverMappings = mappingsDir.resolve(String.format("net.mojang.minecraft.mappings-%s-server.map", getVersion())); | 		Path serverMappings = mappingsDir.resolve(String.format("%s.%s-%s-server.map", GROUP, MODULE, getVersion())); | ||||||
| 
 | 
 | ||||||
| 		if (!Files.exists(mappingsFile) || project.getGradle().getStartParameter().isRefreshDependencies()) { | 		if (!Files.exists(mappingsFile) || project.getGradle().getStartParameter().isRefreshDependencies()) { | ||||||
| 			MappingSet mappingSet; | 			MappingSet mappingSet; | ||||||
|  | @ -95,17 +101,17 @@ public class MojangMappingsDependency implements SelfResolvingDependency { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		try (BufferedReader clientBufferedReader = Files.newBufferedReader(clientMappings, StandardCharsets.UTF_8)) { | 		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("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("Please make sure to read and understand the following license:"); | ||||||
| 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | ||||||
| 			String line; | 			String line; | ||||||
| 
 | 
 | ||||||
| 			while ((line = clientBufferedReader.readLine()).startsWith("#")) { | 			while ((line = clientBufferedReader.readLine()).startsWith("#")) { | ||||||
| 				project.getLogger().warn(line); | 				project.getLogger().warn(line); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | 			project.getLogger().warn("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); | ||||||
| 		} catch (IOException e) { | 		} catch (IOException e) { | ||||||
| 			throw new RuntimeException("Failed to read client mappings", 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 { | 	private MappingSet getMappingsSet(Path clientMappings, Path serverMappings) throws IOException { | ||||||
| 		MinecraftVersionInfo versionInfo = extension.getMinecraftProvider().getVersionInfo(); | 		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()); | 			throw new RuntimeException("Failed to find official mojang mappings for " + getVersion()); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		String clientMappingsUrl = versionInfo.downloads.get("client_mappings").url; | 		String clientMappingsUrl = versionInfo.downloads.get(MANIFEST_CLIENT_MAPPINGS).url; | ||||||
| 		String serverMappingsUrl = versionInfo.downloads.get("server_mappings").url; | 		String serverMappingsUrl = versionInfo.downloads.get(MANIFEST_SERVER_MAPPINGS).url; | ||||||
| 
 | 
 | ||||||
| 		DownloadUtil.downloadIfChanged(new URL(clientMappingsUrl), clientMappings.toFile(), project.getLogger()); | 		DownloadUtil.downloadIfChanged(new URL(clientMappingsUrl), clientMappings.toFile(), project.getLogger()); | ||||||
| 		DownloadUtil.downloadIfChanged(new URL(serverMappingsUrl), serverMappings.toFile(), project.getLogger()); | 		DownloadUtil.downloadIfChanged(new URL(serverMappingsUrl), serverMappings.toFile(), project.getLogger()); | ||||||
|  | @ -186,12 +192,12 @@ public class MojangMappingsDependency implements SelfResolvingDependency { | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	public String getGroup() { | 	public String getGroup() { | ||||||
| 		return "net.mojang.minecraft"; | 		return GROUP; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	public String getName() { | 	public String getName() { | ||||||
| 		return "mappings"; | 		return MODULE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue