Fix forge local installation

This commit is contained in:
huanghongxun
2019-08-19 00:12:28 +08:00
parent c62cc499c5
commit 536576084d
4 changed files with 33 additions and 17 deletions

View File

@@ -17,6 +17,7 @@
*/ */
package org.jackhuang.hmcl.download.forge; package org.jackhuang.hmcl.download.forge;
import org.jackhuang.hmcl.game.Artifact;
import org.jackhuang.hmcl.util.Immutable; import org.jackhuang.hmcl.util.Immutable;
/** /**
@@ -28,7 +29,7 @@ public final class ForgeInstall {
private final String profileName; private final String profileName;
private final String target; private final String target;
private final String path; private final Artifact path;
private final String version; private final String version;
private final String filePath; private final String filePath;
private final String welcome; private final String welcome;
@@ -40,7 +41,7 @@ public final class ForgeInstall {
this(null, null, null, null, null, null, null, null, null); this(null, null, null, null, null, null, null, null, null);
} }
public ForgeInstall(String profileName, String target, String path, String version, String filePath, String welcome, String minecraft, String mirrorList, String logo) { public ForgeInstall(String profileName, String target, Artifact path, String version, String filePath, String welcome, String minecraft, String mirrorList, String logo) {
this.profileName = profileName; this.profileName = profileName;
this.target = target; this.target = target;
this.path = path; this.path = path;
@@ -60,7 +61,7 @@ public final class ForgeInstall {
return target; return target;
} }
public String getPath() { public Artifact getPath() {
return path; return path;
} }

View File

@@ -18,7 +18,6 @@
package org.jackhuang.hmcl.download.forge; package org.jackhuang.hmcl.download.forge;
import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.DefaultDependencyManager;
import org.jackhuang.hmcl.download.LibraryAnalyzer;
import org.jackhuang.hmcl.download.VersionMismatchException; import org.jackhuang.hmcl.download.VersionMismatchException;
import org.jackhuang.hmcl.game.GameVersion; import org.jackhuang.hmcl.game.GameVersion;
import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.game.Version;
@@ -39,6 +38,9 @@ import java.util.Collections;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import static org.jackhuang.hmcl.util.StringUtils.removePrefix;
import static org.jackhuang.hmcl.util.StringUtils.removeSuffix;
/** /**
* *
* @author huangyuhui * @author huangyuhui
@@ -80,10 +82,7 @@ public final class ForgeInstallTask extends Task<Version> {
@Override @Override
public void postExecute() throws Exception { public void postExecute() throws Exception {
Files.deleteIfExists(installer); Files.deleteIfExists(installer);
setResult(dependency.getResult() setResult(dependency.getResult());
.setPriority(30000)
.setId(LibraryAnalyzer.LibraryType.FORGE.getPatchId())
.setVersion(remote.getSelfVersion()));
} }
@Override @Override
@@ -99,9 +98,9 @@ public final class ForgeInstallTask extends Task<Version> {
@Override @Override
public void execute() { public void execute() {
if (VersionNumber.VERSION_COMPARATOR.compare("1.13", remote.getGameVersion()) <= 0) if (VersionNumber.VERSION_COMPARATOR.compare("1.13", remote.getGameVersion()) <= 0)
dependency = new ForgeNewInstallTask(dependencyManager, version, installer); dependency = new ForgeNewInstallTask(dependencyManager, version, remote.getSelfVersion(), installer);
else else
dependency = new ForgeOldInstallTask(dependencyManager, version, installer); dependency = new ForgeOldInstallTask(dependencyManager, version, remote.getSelfVersion(), installer);
} }
/** /**
@@ -125,15 +124,19 @@ public final class ForgeInstallTask extends Task<Version> {
ForgeNewInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeNewInstallProfile.class); ForgeNewInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeNewInstallProfile.class);
if (!gameVersion.get().equals(profile.getMinecraft())) if (!gameVersion.get().equals(profile.getMinecraft()))
throw new VersionMismatchException(profile.getMinecraft(), gameVersion.get()); throw new VersionMismatchException(profile.getMinecraft(), gameVersion.get());
return new ForgeNewInstallTask(dependencyManager, version, installer); return new ForgeNewInstallTask(dependencyManager, version, modifyVersion(gameVersion.get(), profile.getPath().getVersion().replaceAll("(?i)forge", "")), installer);
} else if (installProfile.containsKey("install") && installProfile.containsKey("versionInfo")) { } else if (installProfile.containsKey("install") && installProfile.containsKey("versionInfo")) {
ForgeInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeInstallProfile.class); ForgeInstallProfile profile = JsonUtils.fromNonNullJson(installProfileText, ForgeInstallProfile.class);
if (!gameVersion.get().equals(profile.getInstall().getMinecraft())) if (!gameVersion.get().equals(profile.getInstall().getMinecraft()))
throw new VersionMismatchException(profile.getInstall().getMinecraft(), gameVersion.get()); throw new VersionMismatchException(profile.getInstall().getMinecraft(), gameVersion.get());
return new ForgeOldInstallTask(dependencyManager, version, installer); return new ForgeOldInstallTask(dependencyManager, version, modifyVersion(gameVersion.get(), profile.getInstall().getPath().getVersion().replaceAll("(?i)forge", "")), installer);
} else { } else {
throw new IOException(); throw new IOException();
} }
} }
} }
private static String modifyVersion(String gameVersion, String version) {
return removeSuffix(removePrefix(removeSuffix(removePrefix(version.replace(gameVersion, "").trim(), "-"), "-"), "_"), "_");
}
} }

View File

@@ -18,6 +18,7 @@
package org.jackhuang.hmcl.download.forge; package org.jackhuang.hmcl.download.forge;
import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.DefaultDependencyManager;
import org.jackhuang.hmcl.download.LibraryAnalyzer;
import org.jackhuang.hmcl.download.game.GameLibrariesTask; import org.jackhuang.hmcl.download.game.GameLibrariesTask;
import org.jackhuang.hmcl.download.optifine.OptiFineInstallTask; import org.jackhuang.hmcl.download.optifine.OptiFineInstallTask;
import org.jackhuang.hmcl.game.Artifact; import org.jackhuang.hmcl.game.Artifact;
@@ -70,12 +71,14 @@ public class ForgeNewInstallTask extends Task<Version> {
private ForgeNewInstallProfile profile; private ForgeNewInstallProfile profile;
private Version forgeVersion; private Version forgeVersion;
private final String selfVersion;
ForgeNewInstallTask(DefaultDependencyManager dependencyManager, Version version, Path installer) { ForgeNewInstallTask(DefaultDependencyManager dependencyManager, Version version, String selfVersion, Path installer) {
this.dependencyManager = dependencyManager; this.dependencyManager = dependencyManager;
this.gameRepository = dependencyManager.getGameRepository(); this.gameRepository = dependencyManager.getGameRepository();
this.version = version; this.version = version;
this.installer = installer; this.installer = installer;
this.selfVersion = selfVersion;
setSignificance(TaskSignificance.MINOR); setSignificance(TaskSignificance.MINOR);
} }
@@ -268,7 +271,10 @@ public class ForgeNewInstallTask extends Task<Version> {
} }
} }
setResult(forgeVersion); setResult(forgeVersion
.setPriority(30000)
.setId(LibraryAnalyzer.LibraryType.FORGE.getPatchId())
.setVersion(selfVersion));
dependencies.add(dependencyManager.checkLibraryCompletionAsync(forgeVersion)); dependencies.add(dependencyManager.checkLibraryCompletionAsync(forgeVersion));
FileUtils.deleteDirectory(temp.toFile()); FileUtils.deleteDirectory(temp.toFile());

View File

@@ -18,6 +18,7 @@
package org.jackhuang.hmcl.download.forge; package org.jackhuang.hmcl.download.forge;
import org.jackhuang.hmcl.download.DefaultDependencyManager; import org.jackhuang.hmcl.download.DefaultDependencyManager;
import org.jackhuang.hmcl.download.LibraryAnalyzer;
import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Library;
import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.game.Version;
import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.Task;
@@ -41,12 +42,14 @@ public class ForgeOldInstallTask extends Task<Version> {
private final DefaultDependencyManager dependencyManager; private final DefaultDependencyManager dependencyManager;
private final Version version; private final Version version;
private final Path installer; private final Path installer;
private final String selfVersion;
private final List<Task<?>> dependencies = new LinkedList<>(); private final List<Task<?>> dependencies = new LinkedList<>();
ForgeOldInstallTask(DefaultDependencyManager dependencyManager, Version version, Path installer) { ForgeOldInstallTask(DefaultDependencyManager dependencyManager, Version version, String selfVersion, Path installer) {
this.dependencyManager = dependencyManager; this.dependencyManager = dependencyManager;
this.version = version; this.version = version;
this.installer = installer; this.installer = installer;
this.selfVersion = selfVersion;
setSignificance(TaskSignificance.MINOR); setSignificance(TaskSignificance.MINOR);
} }
@@ -71,7 +74,7 @@ public class ForgeOldInstallTask extends Task<Version> {
ForgeInstallProfile installProfile = JsonUtils.fromNonNullJson(json, ForgeInstallProfile.class); ForgeInstallProfile installProfile = JsonUtils.fromNonNullJson(json, ForgeInstallProfile.class);
// unpack the universal jar in the installer file. // unpack the universal jar in the installer file.
Library forgeLibrary = Library.fromName(installProfile.getInstall().getPath()); Library forgeLibrary = Library.fromName(installProfile.getInstall().getPath().toString());
File forgeFile = dependencyManager.getGameRepository().getLibraryFile(version, forgeLibrary); File forgeFile = dependencyManager.getGameRepository().getLibraryFile(version, forgeLibrary);
if (!FileUtils.makeFile(forgeFile)) if (!FileUtils.makeFile(forgeFile))
throw new IOException("Cannot make directory " + forgeFile.getParent()); throw new IOException("Cannot make directory " + forgeFile.getParent());
@@ -81,7 +84,10 @@ public class ForgeOldInstallTask extends Task<Version> {
IOUtils.copyTo(is, os); IOUtils.copyTo(is, os);
} }
setResult(installProfile.getVersionInfo()); setResult(installProfile.getVersionInfo()
.setPriority(30000)
.setId(LibraryAnalyzer.LibraryType.FORGE.getPatchId())
.setVersion(selfVersion));
dependencies.add(dependencyManager.checkLibraryCompletionAsync(installProfile.getVersionInfo())); dependencies.add(dependencyManager.checkLibraryCompletionAsync(installProfile.getVersionInfo()));
} }
} }