Complete optifine that is not installed automatically

This commit is contained in:
Glavo 2022-01-26 13:08:48 +08:00 committed by Yuhui Huang
parent 7c502ecd01
commit c92f8e3b51

View File

@ -34,6 +34,8 @@ import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* Note: This class has no state. * Note: This class has no state.
@ -103,21 +105,36 @@ public class DefaultDependencyManager extends AbstractDependencyManager {
Version original = repository.getVersion(version.getId()); Version original = repository.getVersion(version.getId());
Version resolved = original.resolvePreservingPatches(repository); Version resolved = original.resolvePreservingPatches(repository);
// OptiFine LibraryAnalyzer analyzer = LibraryAnalyzer.analyze(resolved);
String optifineVersion = resolved.getPatches().stream() for (LibraryAnalyzer.LibraryType type : LibraryAnalyzer.LibraryType.values()) {
.filter(patch -> "optifine".equals(patch.getId())) if (!analyzer.has(type))
.findAny() continue;
.filter(optifine -> optifine.getLibraries().stream()
.anyMatch(library -> GameLibrariesTask.shouldDownloadLibrary(repository, version, library, integrityCheck)))
.map(Version::getVersion)
.orElse(null);
if (optifineVersion != null) { if (type == LibraryAnalyzer.LibraryType.OPTIFINE) {
Library installer = new Library(new Artifact("optifine", "OptiFine", gameVersion + "_" + optifineVersion, "installer")); String optifinePatchVersion = analyzer.getVersion(type)
if (GameLibrariesTask.shouldDownloadLibrary(repository, original, installer, integrityCheck)) { .map(optifineVersion -> {
tasks.add(installLibraryAsync(gameVersion, original, "optifine", optifineVersion)); Matcher matcher = Pattern.compile("^([0-9.]+)_(?<optifine>HD_.+)$").matcher(optifineVersion);
} else { return matcher.find() ? matcher.group("optifine") : optifineVersion;
tasks.add(OptiFineInstallTask.install(this, original, repository.getLibraryFile(version, installer).toPath())); })
.orElseGet(() -> resolved.getPatches().stream()
.filter(patch -> "optifine".equals(patch.getId()))
.findAny()
.map(Version::getVersion)
.orElse(null));
boolean needsReInstallation = version.getLibraries().stream()
.anyMatch(library -> !library.hasDownloadURL()
&& "optifine".equals(library.getGroupId())
&& GameLibrariesTask.shouldDownloadLibrary(repository, version, library, integrityCheck));
if (needsReInstallation) {
Library installer = new Library(new Artifact("optifine", "OptiFine", gameVersion + "_" + optifinePatchVersion, "installer"));
if (GameLibrariesTask.shouldDownloadLibrary(repository, version, installer, integrityCheck)) {
tasks.add(installLibraryAsync(gameVersion, original, "optifine", optifinePatchVersion));
} else {
tasks.add(OptiFineInstallTask.install(this, original, repository.getLibraryFile(version, installer).toPath()));
}
}
} }
} }