Support 21w39a
This commit is contained in:
		
							parent
							
								
									f33637aa3c
								
							
						
					
					
						commit
						da66abfaef
					
				
					 2 changed files with 60 additions and 3 deletions
				
			
		|  | @ -27,10 +27,15 @@ package net.fabricmc.loom.configuration.providers; | ||||||
| import java.io.File; | import java.io.File; | ||||||
| import java.io.FileReader; | import java.io.FileReader; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  | import java.io.InputStream; | ||||||
| import java.net.URL; | import java.net.URL; | ||||||
| import java.nio.charset.StandardCharsets; | import java.nio.charset.StandardCharsets; | ||||||
|  | import java.nio.file.StandardCopyOption; | ||||||
|  | import java.util.Objects; | ||||||
| import java.util.Optional; | import java.util.Optional; | ||||||
| import java.util.function.Consumer; | import java.util.function.Consumer; | ||||||
|  | import java.util.zip.ZipEntry; | ||||||
|  | import java.util.zip.ZipFile; | ||||||
| 
 | 
 | ||||||
| import com.google.common.io.Files; | import com.google.common.io.Files; | ||||||
| import org.gradle.api.GradleException; | import org.gradle.api.GradleException; | ||||||
|  | @ -57,7 +62,10 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra | ||||||
| 	private File workingDir; | 	private File workingDir; | ||||||
| 	private File minecraftJson; | 	private File minecraftJson; | ||||||
| 	private File minecraftClientJar; | 	private File minecraftClientJar; | ||||||
|  | 	// Note this will be the boostrap jar starting with 21w39a | ||||||
| 	private File minecraftServerJar; | 	private File minecraftServerJar; | ||||||
|  | 	// The extracted server jar from the boostrap, only exists in >=21w39a | ||||||
|  | 	private File minecraftExtractedServerJar; | ||||||
| 	private File minecraftMergedJar; | 	private File minecraftMergedJar; | ||||||
| 	private File versionManifestJson; | 	private File versionManifestJson; | ||||||
| 	private File experimentalVersionsJson; | 	private File experimentalVersionsJson; | ||||||
|  | @ -116,6 +124,7 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra | ||||||
| 		minecraftJson = file("minecraft-info.json"); | 		minecraftJson = file("minecraft-info.json"); | ||||||
| 		minecraftClientJar = file("minecraft-client.jar"); | 		minecraftClientJar = file("minecraft-client.jar"); | ||||||
| 		minecraftServerJar = file("minecraft-server.jar"); | 		minecraftServerJar = file("minecraft-server.jar"); | ||||||
|  | 		minecraftExtractedServerJar = file("minecraft-extracted_server.jar"); | ||||||
| 		minecraftMergedJar = file("minecraft-merged.jar"); | 		minecraftMergedJar = file("minecraft-merged.jar"); | ||||||
| 		versionManifestJson = new File(getDirectories().getUserCache(), "version_manifest.json"); | 		versionManifestJson = new File(getDirectories().getUserCache(), "version_manifest.json"); | ||||||
| 		experimentalVersionsJson = new File(getDirectories().getUserCache(), "experimental_version_manifest.json"); | 		experimentalVersionsJson = new File(getDirectories().getUserCache(), "experimental_version_manifest.json"); | ||||||
|  | @ -248,12 +257,60 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra | ||||||
| 	private void mergeJars(Logger logger) throws IOException { | 	private void mergeJars(Logger logger) throws IOException { | ||||||
| 		logger.info(":merging jars"); | 		logger.info(":merging jars"); | ||||||
| 
 | 
 | ||||||
| 		try (JarMerger jarMerger = new JarMerger(minecraftClientJar, minecraftServerJar, minecraftMergedJar)) { | 		try (JarMerger jarMerger = new JarMerger(minecraftClientJar, getServerJarToMerge(logger), minecraftMergedJar)) { | ||||||
| 			jarMerger.enableSyntheticParamsOffset(); | 			jarMerger.enableSyntheticParamsOffset(); | ||||||
| 			jarMerger.merge(); | 			jarMerger.merge(); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	private File getServerJarToMerge(Logger logger) throws IOException { | ||||||
|  | 		try (ZipFile zipFile = new ZipFile(minecraftServerJar)) { | ||||||
|  | 			ZipEntry versionsListEntry = zipFile.getEntry("META-INF/versions.list"); | ||||||
|  | 
 | ||||||
|  | 			if (versionsListEntry == null) { | ||||||
|  | 				// Legacy pre 21w38a jar | ||||||
|  | 				return minecraftServerJar; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			logger.info(":Extracting server jar from bootstrap"); | ||||||
|  | 
 | ||||||
|  | 			String versionsList; | ||||||
|  | 
 | ||||||
|  | 			try (InputStream is = zipFile.getInputStream(versionsListEntry)) { | ||||||
|  | 				versionsList = new String(is.readAllBytes(), StandardCharsets.UTF_8); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			String jarPath = null; | ||||||
|  | 
 | ||||||
|  | 			for (String version : versionsList.split("\n")) { | ||||||
|  | 				if (version.isBlank()) continue; | ||||||
|  | 
 | ||||||
|  | 				String[] split = version.split("\t"); | ||||||
|  | 
 | ||||||
|  | 				if (split.length != 3) continue; | ||||||
|  | 
 | ||||||
|  | 				final String hash = split[0]; | ||||||
|  | 				final String id = split[1]; | ||||||
|  | 				final String path = split[2]; | ||||||
|  | 
 | ||||||
|  | 				if (minecraftVersion().equals(id)) { | ||||||
|  | 					jarPath = path; | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			Objects.requireNonNull(jarPath, "Could not find minecraft server jar for " + minecraftVersion()); | ||||||
|  | 			ZipEntry serverJarEntry = zipFile.getEntry("META-INF/versions/" + jarPath); | ||||||
|  | 			Objects.requireNonNull(serverJarEntry, "Could not find server jar in boostrap@ " + jarPath); | ||||||
|  | 
 | ||||||
|  | 			try (InputStream is = zipFile.getInputStream(serverJarEntry)) { | ||||||
|  | 				java.nio.file.Files.copy(is, minecraftExtractedServerJar.toPath(), StandardCopyOption.REPLACE_EXISTING); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			return minecraftExtractedServerJar; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	public File getMergedJar() { | 	public File getMergedJar() { | ||||||
| 		return minecraftMergedJar; | 		return minecraftMergedJar; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| org.gradle.jvmargs=-Xmx1G | org.gradle.jvmargs=-Xmx1G | ||||||
| 
 | 
 | ||||||
| minecraft_version=21w38a | minecraft_version=21w39a | ||||||
| yarn_mappings=21w38a+build.9 | yarn_mappings=21w39a+build.1 | ||||||
| loader_version=0.11.7 | loader_version=0.11.7 | ||||||
| fabric_version=0.40.4+1.18 | fabric_version=0.40.4+1.18 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue