Skip to content

Commit 5d62e59

Browse files
committed
feat: 安装模组后在启动时检测是否已经安装模组加载器
1 parent 969d82d commit 5d62e59

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

FCL/src/main/java/com/tungsten/fcl/game/LauncherHelper.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,10 @@ else if (configuration.getType().equals(ServerModpackProvider.INSTANCE.getName()
202202
Renderer renderer = RendererManager.getRenderer(repository.getVersionSetting(selectedVersion).getRenderer());
203203
fclBridge.setRenderer(renderer.getName());
204204
return checkRenderer(fclBridge, renderer, repository.getGameVersion(selectedVersion).orElse(""));
205+
}).thenComposeAsync(fclBridge -> {
206+
boolean skip = repository.getVersionSetting(selectedVersion).isNotCheckMod();
207+
if (skip) return Task.supplyAsync(() -> fclBridge);
208+
return checkModLoader(fclBridge, repository);
205209
}).thenComposeAsync(fclBridge -> {
206210
boolean skip = repository.getVersionSetting(selectedVersion).isNotCheckMod();
207211
return checkMod(fclBridge, repository.getGameVersion(selectedVersion).orElse(""), skip);
@@ -377,6 +381,28 @@ private Task<FCLBridge> checkRenderer(FCLBridge bridge, Renderer renderer, Strin
377381
});
378382
}
379383

384+
private Task<FCLBridge> checkModLoader(FCLBridge bridge, FCLGameRepository repository) {
385+
return Task.composeAsync(() -> {
386+
try {
387+
CompletableFuture<Task<FCLBridge>> future = new CompletableFuture<>();
388+
boolean modded = LibraryAnalyzer.isModded(repository, repository.getVersion(selectedVersion));
389+
List<LocalModFile> mods = repository.getModManager(selectedVersion).getMods();
390+
if (!mods.isEmpty() && !modded) {
391+
Schedulers.androidUIThread().execute(() -> new FCLAlertDialog.Builder(context)
392+
.setCancelable(false)
393+
.setMessage(context.getString(R.string.message_check_has_modloader))
394+
.setPositiveButton(context.getString(R.string.button_cancel), () -> future.completeExceptionally(new CancellationException()))
395+
.setNegativeButton(context.getString(R.string.mod_check_continue), () -> future.complete(Task.completed(bridge))).create().show());
396+
return Task.fromCompletableFuture(future).thenComposeAsync(task -> task);
397+
} else {
398+
return Task.completed(bridge);
399+
}
400+
} catch (Throwable e) {
401+
return Task.completed(bridge);
402+
}
403+
});
404+
}
405+
380406
private Task<FCLBridge> checkMod(FCLBridge bridge, String version, boolean skip) {
381407
return Task.composeAsync(() -> {
382408
try {

FCL/src/main/res/values-zh/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,5 +1136,6 @@
11361136
<string name="disabled">已禁用</string>
11371137
<string name="message_warn_restart_after_change">改动的内容将在重启后生效。</string>
11381138
<string name="message_check_path_valid">当前选择的游戏文件路径(%s)可能包含非法字符,启动后可能会闪退,建议检查游戏目录或是重命名版本,是否继续启动?</string>
1139+
<string name="message_check_has_modloader">检测到当前启动的游戏版本已安装模组但是似乎未安装相应的模组加载器,启动后模组可能无法运行,是否继续启动?</string>
11391140
<string name="message_data_is_loading">数据还未加载完成,无法修改。</string>
11401141
</resources>

FCL/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,5 +1201,6 @@
12011201
<string name="disabled">Disabled</string>
12021202
<string name="message_warn_restart_after_change">The changes will take effect after restarting.</string>
12031203
<string name="message_check_path_valid">The currently selected game file path (%s) may contain illegal characters, which could cause the game to crash upon launching. It is recommended to check the game directory or rename the version. Do you want to continue launching?</string>
1204+
<string name="message_check_has_modloader">It has been detected that the currently launched game version has mods installed, but the corresponding mod loader does not seem to be installed. The mods may not function properly after launching. Do you want to continue launching?</string>
12041205
<string name="message_data_is_loading">The data is still loading and cannot be modified.</string>
12051206
</resources>

FCLCore/src/main/java/com/tungsten/fclcore/download/LibraryAnalyzer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ public static boolean isModded(VersionProvider provider, Version version) {
172172
String mainClass = resolvedVersion.getMainClass();
173173
return mainClass != null && (LAUNCH_WRAPPER_MAIN.equals(mainClass)
174174
|| mainClass.startsWith("net.minecraftforge")
175+
|| mainClass.startsWith("net.neoforged")
175176
|| mainClass.startsWith("top.outlands") //Cleanroom
176177
|| mainClass.startsWith("net.fabricmc")
177178
|| mainClass.startsWith("org.quiltmc")

0 commit comments

Comments
 (0)