mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-08-04 11:56:55 -04:00
Complete optifine that is not installed automatically
This commit is contained in:
parent
7c502ecd01
commit
c92f8e3b51
@ -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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user