Support 21w39a
parent
f33637aa3c
commit
da66abfaef
|
@ -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 New Issue