diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java index 53118da0..7b803dcf 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/LaunchServer.java @@ -45,6 +45,7 @@ import java.io.File; import java.io.IOException; import java.lang.ProcessBuilder.Redirect; +import java.lang.reflect.InvocationTargetException; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.file.*; @@ -354,6 +355,8 @@ public static void main(String... args) throws Throwable { public final JARLauncherBinary launcherBinary; + public Class launcherEXEBinaryClass; + public final LauncherBinary launcherEXEBinary; // HWID ban + anti-brutforce @@ -459,6 +462,9 @@ public LaunchServer(Path dir, String[] args) throws IOException, InvalidKeySpecE crc.update(publicKey.getModulus().toByteArray()); // IDEA говорит, что это Java 9 API. WTF? LogHelper.subInfo("Modulus CRC32: 0x%08x", crc.getValue()); + // Load class bindings. + launcherEXEBinaryClass = null; + // pre init modules modulesManager = new ModulesManager(this); modulesManager.autoload(dir.resolve("modules")); @@ -589,6 +595,14 @@ public static void initGson() { } private LauncherBinary binary() { + if (launcherEXEBinaryClass != null) { + try { + return (LauncherBinary)launcherEXEBinaryClass.getConstructor(LaunchServer.class).newInstance(this); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException + | InvocationTargetException | NoSuchMethodException | SecurityException e) { + LogHelper.error(e); + } + } try { Class.forName("net.sf.launch4j.Builder"); if (config.launch4j.enabled) return new EXEL4JLauncherBinary(this); @@ -686,10 +700,13 @@ private void generateConfigIfNotExists() throws IOException { } } - public Collection getProfiles() { + public List getProfiles() { return profilesList; } + public void setProfiles(List profilesList) { + this.profilesList = Collections.unmodifiableList(profilesList); + } public SignedObjectHolder getUpdateDir(String name) { return updatesDirMap.get(name);