Skip to content

Commit 772a4bd

Browse files
committed
feat(core): 从Mod Loader中获取模组信息
1 parent db9cbc8 commit 772a4bd

File tree

4 files changed

+50
-11
lines changed

4 files changed

+50
-11
lines changed

src/main/java/i18nupdatemod/I18nUpdateMod.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,14 @@
99
import i18nupdatemod.entity.GameAssetDetail;
1010
import i18nupdatemod.util.FileUtil;
1111
import i18nupdatemod.util.Log;
12+
import org.jetbrains.annotations.Nullable;
1213

1314
import java.io.InputStream;
1415
import java.io.InputStreamReader;
1516
import java.nio.file.Files;
1617
import java.nio.file.Path;
1718
import java.nio.file.Paths;
18-
import java.util.ArrayList;
19-
import java.util.List;
20-
import java.util.Objects;
19+
import java.util.*;
2120
import java.util.concurrent.ExecutionException;
2221
import java.util.concurrent.ExecutorService;
2322
import java.util.concurrent.Executors;
@@ -31,12 +30,17 @@ public class I18nUpdateMod {
3130

3231
public static final Gson GSON = new Gson();
3332

34-
public static void init(Path minecraftPath, String minecraftVersion, String loader) {
33+
public static void init(Path minecraftPath, String minecraftVersion, String loader,@Nullable List<String> modList) {
3534
try (InputStream is = I18nUpdateMod.class.getResourceAsStream("/i18nMetaData.json")) {
3635
MOD_VERSION = GSON.fromJson(new InputStreamReader(is), JsonObject.class).get("version").getAsString();
3736
} catch (Exception e) {
3837
Log.warning("Error getting version: " + e);
3938
}
39+
if(modList!=null){
40+
Log.debug("modList: " + modList);
41+
}else{
42+
Log.debug("modList is null");
43+
}
4044
Log.info(String.format("I18nUpdate Mod %s is loaded in %s with %s", MOD_VERSION, minecraftVersion, loader));
4145
Log.debug(String.format("Minecraft path: %s", minecraftPath));
4246
String localStorage = getLocalStoragePos(minecraftPath);

src/main/java/i18nupdatemod/fabricloader/FabricLoaderMod.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@
55
import i18nupdatemod.util.Reflection;
66
import net.fabricmc.api.ClientModInitializer;
77
import net.fabricmc.loader.api.FabricLoader;
8+
import net.fabricmc.loader.impl.ModContainerImpl;
89

910
import java.nio.file.Path;
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import java.util.Map;
1014

1115
//1.14-latest
1216
public class FabricLoaderMod implements ClientModInitializer {
@@ -20,7 +24,7 @@ public void onInitializeClient() {
2024
Log.warning("Minecraft version not found");
2125
return;
2226
}
23-
I18nUpdateMod.init(gameDir, mcVersion, "Fabric");
27+
I18nUpdateMod.init(gameDir, mcVersion, "Fabric", getMods());
2428
}
2529

2630
private String getMcVersion() {
@@ -44,4 +48,30 @@ private String getMcVersion() {
4448
}
4549
return null;
4650
}
51+
52+
53+
private List<String> getMods(){
54+
List<String> modList = null;
55+
try {
56+
// Fabric
57+
@SuppressWarnings("unchecked")
58+
final Map<String, Object> instance = (Map<String, Object>)Reflection.clazz("net.fabricmc.loader.impl.FabricLoaderImpl")
59+
.get("INSTANCE")
60+
.get("modMap").get();
61+
modList = new ArrayList<>(instance.keySet());
62+
} catch (Exception ignored) {
63+
64+
}
65+
try {
66+
// Quilt
67+
@SuppressWarnings("unchecked")
68+
final Map<String, Object> instance = (Map<String, Object>)Reflection.clazz("org.quiltmc.loader.impl.QuiltLoaderImpl")
69+
.get("INSTANCE")
70+
.get("modMap").get();
71+
modList = new ArrayList<>(instance.keySet());
72+
} catch (Exception ignored) {
73+
74+
}
75+
return modList;
76+
}
4777
}

src/main/java/i18nupdatemod/launchwrapper/LaunchWrapperTweaker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void acceptOptions(List<String> args, File gameDir, File assetsDir, Strin
2020
Log.warning("Failed to get minecraft version.");
2121
return;
2222
}
23-
I18nUpdateMod.init(gameDir.toPath(), mcVersion, "Forge");
23+
I18nUpdateMod.init(gameDir.toPath(), mcVersion, "Forge", null);
2424
}
2525

2626
@Override

src/main/java/i18nupdatemod/modlauncher/ModLauncherService.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@
1414
import java.io.InputStream;
1515
import java.io.InputStreamReader;
1616
import java.nio.file.Path;
17-
import java.util.Collections;
18-
import java.util.List;
19-
import java.util.Optional;
20-
import java.util.Set;
17+
import java.util.*;
2118

2219
import static i18nupdatemod.I18nUpdateMod.GSON;
2320

@@ -31,6 +28,14 @@ public class ModLauncherService implements ITransformationService {
3128
@Override
3229
public void initialize(IEnvironment environment) {
3330
Optional<Path> minecraftPath = environment.getProperty(IEnvironment.Keys.GAMEDIR.get());
31+
// 没法拿到i18n后面加载的模组
32+
List<Map<String,String>> tmp = environment.getProperty(IEnvironment.Keys.MODLIST.get()).orElse(null);
33+
List<String> modList = new ArrayList<>();
34+
if (tmp != null) {
35+
for (Map<String, String> map : tmp) {
36+
modList.add(map.get("name"));
37+
}
38+
}
3439
if (!minecraftPath.isPresent()) {
3540
Log.warning("Minecraft path not found");
3641
return;
@@ -41,7 +46,7 @@ public void initialize(IEnvironment environment) {
4146
Log.warning("Minecraft version not found");
4247
return;
4348
}
44-
I18nUpdateMod.init(minecraftPath.get(), minecraftVersion, "Forge");
49+
I18nUpdateMod.init(minecraftPath.get(), minecraftVersion, "Forge", modList);
4550
}
4651

4752
@Override

0 commit comments

Comments
 (0)