-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathModLauncherService.java
More file actions
85 lines (73 loc) · 2.87 KB
/
ModLauncherService.java
File metadata and controls
85 lines (73 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package i18nupdatemod.modlauncher;
import com.google.gson.JsonObject;
import cpw.mods.modlauncher.Launcher;
import cpw.mods.modlauncher.api.IEnvironment;
import cpw.mods.modlauncher.api.ITransformationService;
import cpw.mods.modlauncher.api.ITransformer;
import cpw.mods.modlauncher.api.IncompatibleEnvironmentException;
import i18nupdatemod.I18nUpdateMod;
import i18nupdatemod.util.Log;
import i18nupdatemod.util.Reflection;
import org.jetbrains.annotations.NotNull;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.file.Path;
import java.util.*;
import static i18nupdatemod.I18nUpdateMod.GSON;
//1.13-latest
public class ModLauncherService implements ITransformationService {
@Override
public @NotNull String name() {
return "I18nUpdateMod";
}
@Override
public void initialize(IEnvironment environment) {
Optional<Path> minecraftPath = environment.getProperty(IEnvironment.Keys.GAMEDIR.get());
if (!minecraftPath.isPresent()) {
Log.warning("Minecraft path not found");
return;
}
Log.setMinecraftLogFile(minecraftPath.get());
String minecraftVersion = getMinecraftVersion();
if (minecraftVersion == null) {
Log.warning("Minecraft version not found");
return;
}
I18nUpdateMod.init(minecraftPath.get(), minecraftVersion, "Forge", new HashSet<>());
}
@Override
public void beginScanning(IEnvironment environment) {
}
@Override
public void onLoad(IEnvironment env, Set<String> otherServices) throws IncompatibleEnvironmentException {
}
@Override
public @NotNull List<ITransformer> transformers() {
return Collections.emptyList();
}
private String getMinecraftVersion() {
// MinecraftForge 1.13~1.20.2
// NeoForge 1.20.1~
try {
String[] args = (String[]) Reflection.clazz(Launcher.INSTANCE).get("argumentHandler").get("args").get();
for (int i = 0; i < args.length - 1; ++i) {
if (args[i].equalsIgnoreCase("--fml.mcversion")) {
return args[i + 1];
}
}
} catch (Exception e) {
Log.warning("Error getting minecraft version: %s", e);
}
// MinecraftForge 1.20.3~
// 1.20.3: https://github.com/MinecraftForge/MinecraftForge/blob/1.20.x/fmlloader/src/main/java/net/minecraftforge/fml/loading/VersionInfo.java
try {
Class<?> clazz = Class.forName("net.minecraftforge.fml.loading.FMLLoader");
try (InputStream is = clazz.getResourceAsStream("/forge_version.json")) {
return GSON.fromJson(new InputStreamReader(is), JsonObject.class).get("mc").getAsString();
}
} catch (Exception e) {
Log.warning("Error getting minecraft version: %s", e);
}
return null;
}
}