diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java index 346c4a0df..ac59e94fe 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java @@ -33,12 +33,13 @@ import static javafx.beans.binding.Bindings.createBooleanBinding; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; public class InstallersPage extends AbstractInstallersPage { + private final HMCLGameRepository repository; private boolean isNameModifiedByUser = false; public InstallersPage(WizardController controller, HMCLGameRepository repository, String gameVersion, DownloadProvider downloadProvider) { super(controller, gameVersion, downloadProvider); - + this.repository = repository; txtName.getValidators().addAll( new RequiredValidator(), new Validator(i18n("install.new_game.already_exists"), str -> !repository.versionIdConflicts(str)), @@ -100,6 +101,7 @@ public class InstallersPage extends AbstractInstallersPage { .yesOrNo(() -> { controller.getSettings().put("name", name); controller.onFinish(); + createRequiredFolders(name); }, () -> { // The user selects Cancel and does nothing. }) @@ -107,6 +109,30 @@ public class InstallersPage extends AbstractInstallersPage { } else { controller.getSettings().put("name", name); controller.onFinish(); + createRequiredFolders(name); + } + } + + private void createRequiredFolders(String versionName) { + for (InstallerItem library : group.getLibraries()) { + String libraryId = library.getLibraryId(); + if (!controller.getSettings().containsKey(libraryId)) { + continue; + } + + LibraryAnalyzer.LibraryType libraryType = LibraryAnalyzer.LibraryType.fromPatchId(libraryId); + if (libraryType != null) { + java.io.File versionRoot = repository.getVersionRoot(versionName); + switch (libraryType) { + case FORGE: + case NEO_FORGE: + case FABRIC: + case QUILT: + case LITELOADER: + new java.io.File(versionRoot, "mods").mkdirs(); + break; + } + } } }