mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-17 07:47:57 -04:00
MultiMC fabric and local libraries
This commit is contained in:
parent
7aee7e33d0
commit
30c27bbb67
@ -94,7 +94,10 @@ public class DefaultGameRepository implements GameRepository {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public File getLibraryFile(Version version, Library lib) {
|
public File getLibraryFile(Version version, Library lib) {
|
||||||
return new File(getBaseDirectory(), "libraries/" + lib.getPath());
|
if ("local".equals(lib.getHint()))
|
||||||
|
return new File(getVersionRoot(version.getId()), "libraries/" + lib.getFileName());
|
||||||
|
else
|
||||||
|
return new File(getBaseDirectory(), "libraries/" + lib.getPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Path getArtifactFile(Version version, Artifact artifact) {
|
public Path getArtifactFile(Version version, Artifact artifact) {
|
||||||
|
@ -21,16 +21,14 @@ import com.google.gson.JsonParseException;
|
|||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import org.jackhuang.hmcl.download.DefaultDependencyManager;
|
import org.jackhuang.hmcl.download.DefaultDependencyManager;
|
||||||
import org.jackhuang.hmcl.download.GameBuilder;
|
import org.jackhuang.hmcl.download.GameBuilder;
|
||||||
import org.jackhuang.hmcl.download.MaintainTask;
|
import org.jackhuang.hmcl.game.Arguments;
|
||||||
import org.jackhuang.hmcl.game.DefaultGameRepository;
|
import org.jackhuang.hmcl.game.DefaultGameRepository;
|
||||||
import org.jackhuang.hmcl.game.Version;
|
import org.jackhuang.hmcl.game.Version;
|
||||||
import org.jackhuang.hmcl.game.VersionLibraryBuilder;
|
|
||||||
import org.jackhuang.hmcl.mod.MinecraftInstanceTask;
|
import org.jackhuang.hmcl.mod.MinecraftInstanceTask;
|
||||||
import org.jackhuang.hmcl.mod.Modpack;
|
import org.jackhuang.hmcl.mod.Modpack;
|
||||||
import org.jackhuang.hmcl.mod.ModpackConfiguration;
|
import org.jackhuang.hmcl.mod.ModpackConfiguration;
|
||||||
import org.jackhuang.hmcl.mod.ModpackInstallTask;
|
import org.jackhuang.hmcl.mod.ModpackInstallTask;
|
||||||
import org.jackhuang.hmcl.task.Task;
|
import org.jackhuang.hmcl.task.Task;
|
||||||
import org.jackhuang.hmcl.util.Lang;
|
|
||||||
import org.jackhuang.hmcl.util.gson.JsonUtils;
|
import org.jackhuang.hmcl.util.gson.JsonUtils;
|
||||||
import org.jackhuang.hmcl.util.io.CompressingUtils;
|
import org.jackhuang.hmcl.util.io.CompressingUtils;
|
||||||
import org.jackhuang.hmcl.util.io.FileUtils;
|
import org.jackhuang.hmcl.util.io.FileUtils;
|
||||||
@ -41,6 +39,7 @@ import java.io.IOException;
|
|||||||
import java.nio.file.FileSystem;
|
import java.nio.file.FileSystem;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -84,6 +83,12 @@ public final class MultiMCModpackInstallTask extends Task<Void> {
|
|||||||
if (c.getVersion() != null)
|
if (c.getVersion() != null)
|
||||||
builder.version("liteloader", c.getVersion());
|
builder.version("liteloader", c.getVersion());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Optional<MultiMCManifest.MultiMCManifestComponent> fabric = manifest.getMmcPack().getComponents().stream().filter(e -> e.getUid().equals("net.fabricmc.fabric-loader")).findAny();
|
||||||
|
fabric.ifPresent(c -> {
|
||||||
|
if (c.getVersion() != null)
|
||||||
|
builder.version("fabric", c.getVersion());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
dependents.add(builder.buildAsync());
|
dependents.add(builder.buildAsync());
|
||||||
@ -145,20 +150,29 @@ public final class MultiMCModpackInstallTask extends Task<Void> {
|
|||||||
for (Path patchJson : Files.newDirectoryStream(patches)) {
|
for (Path patchJson : Files.newDirectoryStream(patches)) {
|
||||||
if (patchJson.toString().endsWith(".json")) {
|
if (patchJson.toString().endsWith(".json")) {
|
||||||
// If json is malformed, we should stop installing this modpack instead of skipping it.
|
// If json is malformed, we should stop installing this modpack instead of skipping it.
|
||||||
MultiMCInstancePatch patch = JsonUtils.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(patchJson)), MultiMCInstancePatch.class);
|
MultiMCInstancePatch multiMCPatch = JsonUtils.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(patchJson)), MultiMCInstancePatch.class);
|
||||||
|
|
||||||
VersionLibraryBuilder builder = new VersionLibraryBuilder(version);
|
List<String> arguments = new ArrayList<>();
|
||||||
for (String arg : patch.getTweakers())
|
for (String arg : multiMCPatch.getTweakers()) {
|
||||||
builder.addArgument("--tweakClass", arg);
|
arguments.add("--tweakClass");
|
||||||
|
arguments.add(arg);
|
||||||
|
}
|
||||||
|
|
||||||
version = builder.build()
|
Version patch = new Version(multiMCPatch.getName(), multiMCPatch.getVersion(), 1, new Arguments().addGameArguments(arguments), multiMCPatch.getMainClass(), multiMCPatch.getLibraries());
|
||||||
.setLibraries(Lang.merge(version.getLibraries(), patch.getLibraries()))
|
version = version.addPatch(patch);
|
||||||
.setMainClass(patch.getMainClass());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Path libraries = root.resolve("libraries");
|
||||||
|
if (Files.exists(libraries))
|
||||||
|
FileUtils.copyDirectory(libraries, repository.getVersionRoot(name).toPath().resolve("libraries"));
|
||||||
|
|
||||||
|
Path jarmods = root.resolve("jarmods");
|
||||||
|
if (Files.exists(jarmods))
|
||||||
|
FileUtils.copyDirectory(jarmods, repository.getVersionRoot(name).toPath().resolve("jarmods"));
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies.add(new MaintainTask(version).thenComposeAsync(repository::save));
|
dependencies.add(repository.save(version));
|
||||||
dependencies.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), "/" + manifest.getName() + "/minecraft", manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)));
|
dependencies.add(new MinecraftInstanceTask<>(zipFile, modpack.getEncoding(), "/" + manifest.getName() + "/minecraft", manifest, MODPACK_TYPE, repository.getModpackConfiguration(name)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user