Fix forge local installation
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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(), "-"), "-"), "_"), "_");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user