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,23 +105,38 @@ 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()) {
if (!analyzer.has(type))
continue;
if (type == LibraryAnalyzer.LibraryType.OPTIFINE) {
String optifinePatchVersion = analyzer.getVersion(type)
.map(optifineVersion -> {
Matcher matcher = Pattern.compile("^([0-9.]+)_(?<optifine>HD_.+)$").matcher(optifineVersion);
return matcher.find() ? matcher.group("optifine") : optifineVersion;
})
.orElseGet(() -> resolved.getPatches().stream()
.filter(patch -> "optifine".equals(patch.getId())) .filter(patch -> "optifine".equals(patch.getId()))
.findAny() .findAny()
.filter(optifine -> optifine.getLibraries().stream()
.anyMatch(library -> GameLibrariesTask.shouldDownloadLibrary(repository, version, library, integrityCheck)))
.map(Version::getVersion) .map(Version::getVersion)
.orElse(null); .orElse(null));
if (optifineVersion != null) { boolean needsReInstallation = version.getLibraries().stream()
Library installer = new Library(new Artifact("optifine", "OptiFine", gameVersion + "_" + optifineVersion, "installer")); .anyMatch(library -> !library.hasDownloadURL()
if (GameLibrariesTask.shouldDownloadLibrary(repository, original, installer, integrityCheck)) { && "optifine".equals(library.getGroupId())
tasks.add(installLibraryAsync(gameVersion, original, "optifine", optifineVersion)); && 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 { } else {
tasks.add(OptiFineInstallTask.install(this, original, repository.getLibraryFile(version, installer).toPath())); tasks.add(OptiFineInstallTask.install(this, original, repository.getLibraryFile(version, installer).toPath()));
} }
} }
}
}
return Task.allOf(tasks); return Task.allOf(tasks);
}); });