diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
index ae3538458..f23ac4b84 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
@@ -32,8 +32,8 @@ import org.jackhuang.hmcl.launch.NotDecompressingNativesException;
import org.jackhuang.hmcl.launch.PermissionException;
import org.jackhuang.hmcl.launch.ProcessCreationException;
import org.jackhuang.hmcl.launch.ProcessListener;
-import org.jackhuang.hmcl.mod.CurseCompletionException;
-import org.jackhuang.hmcl.mod.CurseCompletionTask;
+import org.jackhuang.hmcl.mod.curse.CurseCompletionException;
+import org.jackhuang.hmcl.mod.curse.CurseCompletionTask;
import org.jackhuang.hmcl.mod.ModpackConfiguration;
import org.jackhuang.hmcl.setting.LauncherVisibility;
import org.jackhuang.hmcl.setting.Profile;
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java
index deb54debe..88f458b75 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java
@@ -20,6 +20,11 @@ package org.jackhuang.hmcl.game;
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;
import org.jackhuang.hmcl.mod.*;
+import org.jackhuang.hmcl.mod.curse.CurseCompletionException;
+import org.jackhuang.hmcl.mod.curse.CurseInstallTask;
+import org.jackhuang.hmcl.mod.curse.CurseManifest;
+import org.jackhuang.hmcl.mod.multimc.MultiMCInstanceConfiguration;
+import org.jackhuang.hmcl.mod.multimc.MultiMCModpackInstallTask;
import org.jackhuang.hmcl.setting.EnumGameDirectory;
import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.setting.VersionSetting;
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/MultiMCInstallVersionSettingTask.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/MultiMCInstallVersionSettingTask.java
index dfa7a5da9..0f0b6c31f 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/game/MultiMCInstallVersionSettingTask.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/MultiMCInstallVersionSettingTask.java
@@ -17,7 +17,7 @@
*/
package org.jackhuang.hmcl.game;
-import org.jackhuang.hmcl.mod.MultiMCInstanceConfiguration;
+import org.jackhuang.hmcl.mod.multimc.MultiMCInstanceConfiguration;
import org.jackhuang.hmcl.setting.Profile;
import org.jackhuang.hmcl.setting.VersionSetting;
import org.jackhuang.hmcl.task.Schedulers;
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskListPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskListPane.java
index 9c7996250..23abe5b1c 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskListPane.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/TaskListPane.java
@@ -31,6 +31,9 @@ import org.jackhuang.hmcl.download.optifine.OptiFineInstallTask;
import org.jackhuang.hmcl.game.HMCLModpackExportTask;
import org.jackhuang.hmcl.game.HMCLModpackInstallTask;
import org.jackhuang.hmcl.mod.*;
+import org.jackhuang.hmcl.mod.curse.CurseCompletionTask;
+import org.jackhuang.hmcl.mod.curse.CurseInstallTask;
+import org.jackhuang.hmcl.mod.multimc.MultiMCModpackInstallTask;
import org.jackhuang.hmcl.task.Task;
import org.jackhuang.hmcl.task.TaskExecutor;
import org.jackhuang.hmcl.task.TaskListener;
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackInstallWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackInstallWizardProvider.java
index 93a98356b..1673eb809 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackInstallWizardProvider.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackInstallWizardProvider.java
@@ -19,7 +19,7 @@ package org.jackhuang.hmcl.ui.download;
import javafx.scene.Node;
import org.jackhuang.hmcl.game.ModpackHelper;
-import org.jackhuang.hmcl.mod.CurseCompletionException;
+import org.jackhuang.hmcl.mod.curse.CurseCompletionException;
import org.jackhuang.hmcl.mod.MismatchedModpackTypeException;
import org.jackhuang.hmcl.mod.Modpack;
import org.jackhuang.hmcl.mod.UnsupportedModpackException;
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java
index fb24fa508..e46c81f4a 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/export/ExportWizardProvider.java
@@ -22,8 +22,8 @@ import org.jackhuang.hmcl.Launcher;
import org.jackhuang.hmcl.game.HMCLModpackExportTask;
import org.jackhuang.hmcl.mod.ModAdviser;
import org.jackhuang.hmcl.mod.Modpack;
-import org.jackhuang.hmcl.mod.MultiMCInstanceConfiguration;
-import org.jackhuang.hmcl.mod.MultiMCModpackExportTask;
+import org.jackhuang.hmcl.mod.multimc.MultiMCInstanceConfiguration;
+import org.jackhuang.hmcl.mod.multimc.MultiMCModpackExportTask;
import org.jackhuang.hmcl.setting.Config;
import org.jackhuang.hmcl.setting.ConfigHolder;
import org.jackhuang.hmcl.setting.Profile;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionException.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionException.java
similarity index 96%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionException.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionException.java
index 8cc5117fe..4556a17af 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionException.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionException.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.curse;
public class CurseCompletionException extends Exception {
public CurseCompletionException() {
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionTask.java
similarity index 98%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionTask.java
index 0f4adaf26..69dacda6c 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionTask.java
@@ -15,11 +15,12 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.curse;
import com.google.gson.JsonParseException;
import org.jackhuang.hmcl.download.DefaultDependencyManager;
import org.jackhuang.hmcl.game.DefaultGameRepository;
+import org.jackhuang.hmcl.mod.ModManager;
import org.jackhuang.hmcl.task.FileDownloadTask;
import org.jackhuang.hmcl.task.Task;
import org.jackhuang.hmcl.util.*;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseInstallTask.java
similarity index 95%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseInstallTask.java
index 77449cd5e..3fbdf53f9 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseInstallTask.java
@@ -15,13 +15,17 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.curse;
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;
import org.jackhuang.hmcl.download.DefaultDependencyManager;
import org.jackhuang.hmcl.download.GameBuilder;
import org.jackhuang.hmcl.game.DefaultGameRepository;
+import org.jackhuang.hmcl.mod.MinecraftInstanceTask;
+import org.jackhuang.hmcl.mod.Modpack;
+import org.jackhuang.hmcl.mod.ModpackConfiguration;
+import org.jackhuang.hmcl.mod.ModpackInstallTask;
import org.jackhuang.hmcl.task.Task;
import org.jackhuang.hmcl.util.StringUtils;
import org.jackhuang.hmcl.util.gson.JsonUtils;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifest.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifest.java
similarity index 98%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifest.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifest.java
index 7c8a78893..2d08e0fa7 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifest.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifest.java
@@ -15,10 +15,11 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.curse;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.SerializedName;
+import org.jackhuang.hmcl.mod.Modpack;
import org.jackhuang.hmcl.util.Immutable;
import org.jackhuang.hmcl.util.gson.JsonUtils;
import org.jackhuang.hmcl.util.io.CompressingUtils;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestFile.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestFile.java
similarity index 98%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestFile.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestFile.java
index 237de041c..abcbe9852 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestFile.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestFile.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.curse;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.SerializedName;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestMinecraft.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestMinecraft.java
similarity index 98%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestMinecraft.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestMinecraft.java
index 711bf493b..d8117884d 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestMinecraft.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestMinecraft.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.curse;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.SerializedName;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestModLoader.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestModLoader.java
similarity index 97%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestModLoader.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestModLoader.java
index 690ba2c42..71bb152d2 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseManifestModLoader.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseManifestModLoader.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.curse;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.SerializedName;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseMetaMod.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java
similarity index 97%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseMetaMod.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java
index 2a79c9611..9bc2be56f 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseMetaMod.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.curse;
import com.google.gson.annotations.SerializedName;
import org.jackhuang.hmcl.util.Immutable;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstanceConfiguration.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCInstanceConfiguration.java
similarity index 99%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstanceConfiguration.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCInstanceConfiguration.java
index 137ce6131..db7ac7cba 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstanceConfiguration.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCInstanceConfiguration.java
@@ -15,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.multimc;
+import org.jackhuang.hmcl.mod.Modpack;
import org.jackhuang.hmcl.util.Lang;
import org.jackhuang.hmcl.util.io.CompressingUtils;
import org.jackhuang.hmcl.util.io.FileUtils;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstancePatch.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCInstancePatch.java
similarity index 98%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstancePatch.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCInstancePatch.java
index c39451363..04bb80727 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCInstancePatch.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCInstancePatch.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.multimc;
import com.google.gson.annotations.SerializedName;
import org.jackhuang.hmcl.game.Library;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCManifest.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCManifest.java
similarity index 99%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCManifest.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCManifest.java
index c1daf3704..b811b9e00 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCManifest.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCManifest.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.multimc;
import com.google.gson.annotations.SerializedName;
import org.jackhuang.hmcl.util.Immutable;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackExportTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackExportTask.java
similarity index 98%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackExportTask.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackExportTask.java
index 98fa00d41..cafe03519 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackExportTask.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackExportTask.java
@@ -15,11 +15,12 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.multimc;
import org.jackhuang.hmcl.download.LibraryAnalyzer;
import org.jackhuang.hmcl.game.DefaultGameRepository;
import org.jackhuang.hmcl.game.GameVersion;
+import org.jackhuang.hmcl.mod.ModAdviser;
import org.jackhuang.hmcl.task.Task;
import org.jackhuang.hmcl.util.Logging;
import org.jackhuang.hmcl.util.gson.JsonUtils;
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackInstallTask.java
similarity index 96%
rename from HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java
rename to HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackInstallTask.java
index 7e50fc1ff..8f8c2d7c0 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/multimc/MultiMCModpackInstallTask.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package org.jackhuang.hmcl.mod;
+package org.jackhuang.hmcl.mod.multimc;
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;
@@ -25,6 +25,10 @@ import org.jackhuang.hmcl.download.MaintainTask;
import org.jackhuang.hmcl.game.DefaultGameRepository;
import org.jackhuang.hmcl.game.Version;
import org.jackhuang.hmcl.game.VersionLibraryBuilder;
+import org.jackhuang.hmcl.mod.MinecraftInstanceTask;
+import org.jackhuang.hmcl.mod.Modpack;
+import org.jackhuang.hmcl.mod.ModpackConfiguration;
+import org.jackhuang.hmcl.mod.ModpackInstallTask;
import org.jackhuang.hmcl.task.Task;
import org.jackhuang.hmcl.util.Lang;
import org.jackhuang.hmcl.util.gson.JsonUtils;