mirror of
https://github.com/GravitLauncher/Launcher
synced 2025-04-01 22:14:01 +03:00
Removed костыльный command handler
This commit is contained in:
parent
75410477bf
commit
5e63726b1f
9 changed files with 196 additions and 194 deletions
|
@ -1,5 +1,6 @@
|
||||||
package pro.gravit.launcher.server.authlib;
|
package pro.gravit.launcher.server.authlib;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.server.commands.InstallAuthLib;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
import pro.gravit.utils.helper.SecurityHelper;
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
|
|
||||||
|
@ -10,7 +11,7 @@
|
||||||
|
|
||||||
public class DownloadContextModifier implements LibrariesHashFileModifier {
|
public class DownloadContextModifier implements LibrariesHashFileModifier {
|
||||||
@Override
|
@Override
|
||||||
public byte[] apply(byte[] data, InstallAuthlib.InstallAuthlibContext context) throws IOException {
|
public byte[] apply(byte[] data, InstallAuthLib.InstallAuthlibContext context) throws IOException {
|
||||||
String[] lines = new String(data).split("\n");
|
String[] lines = new String(data).split("\n");
|
||||||
for(int i=0;i<lines.length;++i) {
|
for(int i=0;i<lines.length;++i) {
|
||||||
if(lines[i].contains("mojang_")) {
|
if(lines[i].contains("mojang_")) {
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package pro.gravit.launcher.server.authlib;
|
package pro.gravit.launcher.server.authlib;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.server.commands.InstallAuthLib;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface LibrariesHashFileModifier {
|
public interface LibrariesHashFileModifier {
|
||||||
byte[] apply(byte[] data, InstallAuthlib.InstallAuthlibContext context) throws IOException;
|
byte[] apply(byte[] data, InstallAuthLib.InstallAuthlibContext context) throws IOException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package pro.gravit.launcher.server.authlib;
|
package pro.gravit.launcher.server.authlib;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.server.commands.InstallAuthLib;
|
||||||
import pro.gravit.utils.helper.SecurityHelper;
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
@ -7,7 +8,7 @@
|
||||||
public class LibrariesLstModifier implements LibrariesHashFileModifier {
|
public class LibrariesLstModifier implements LibrariesHashFileModifier {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] apply(byte[] data, InstallAuthlib.InstallAuthlibContext context) {
|
public byte[] apply(byte[] data, InstallAuthLib.InstallAuthlibContext context) {
|
||||||
String[] lines = new String(data).split("\n");
|
String[] lines = new String(data).split("\n");
|
||||||
for(int i=0;i<lines.length;++i) {
|
for(int i=0;i<lines.length;++i) {
|
||||||
if(lines[i].contains("com.mojang:authlib")) {
|
if(lines[i].contains("com.mojang:authlib")) {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package pro.gravit.launcher.server.authlib;
|
package pro.gravit.launcher.server.authlib;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.server.commands.InstallAuthLib;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
import pro.gravit.utils.helper.SecurityHelper;
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
|
|
||||||
|
@ -10,7 +11,7 @@
|
||||||
|
|
||||||
public class PatchPropertiesModifier implements LibrariesHashFileModifier {
|
public class PatchPropertiesModifier implements LibrariesHashFileModifier {
|
||||||
@Override
|
@Override
|
||||||
public byte[] apply(byte[] data, InstallAuthlib.InstallAuthlibContext context) throws IOException {
|
public byte[] apply(byte[] data, InstallAuthLib.InstallAuthlibContext context) throws IOException {
|
||||||
String[] lines = new String(data).split("\n");
|
String[] lines = new String(data).split("\n");
|
||||||
String version = null;
|
String version = null;
|
||||||
int linePatchedHashIndex = -1;
|
int linePatchedHashIndex = -1;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package pro.gravit.launcher.server.authlib;
|
package pro.gravit.launcher.server.authlib;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.server.commands.InstallAuthLib;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
import pro.gravit.utils.helper.SecurityHelper;
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
|
|
||||||
|
@ -10,7 +11,7 @@
|
||||||
|
|
||||||
public class PatchesLstModifier implements LibrariesHashFileModifier {
|
public class PatchesLstModifier implements LibrariesHashFileModifier {
|
||||||
@Override
|
@Override
|
||||||
public byte[] apply(byte[] data, InstallAuthlib.InstallAuthlibContext context) throws IOException {
|
public byte[] apply(byte[] data, InstallAuthLib.InstallAuthlibContext context) throws IOException {
|
||||||
String[] lines = new String(data).split("\n");
|
String[] lines = new String(data).split("\n");
|
||||||
for(int i=0;i<lines.length;++i) {
|
for(int i=0;i<lines.length;++i) {
|
||||||
if(lines[i].contains("paper-")) {
|
if(lines[i].contains("paper-")) {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package pro.gravit.launcher.server.authlib;
|
package pro.gravit.launcher.server.commands;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.server.authlib.*;
|
||||||
|
import pro.gravit.utils.command.Command;
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
|
@ -13,16 +15,30 @@
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
public class InstallAuthlib {
|
public class InstallAuthLib extends Command {
|
||||||
private static final Map<String, LibrariesHashFileModifier> modifierMap;
|
private final Map<String, LibrariesHashFileModifier> modifierMap = new HashMap<>();
|
||||||
static {
|
|
||||||
modifierMap = new HashMap<>();
|
public InstallAuthLib() {
|
||||||
modifierMap.put("META-INF/libraries.list", new LibrariesLstModifier());
|
modifierMap.put("META-INF/libraries.list", new LibrariesLstModifier());
|
||||||
modifierMap.put("patch.properties", new PatchPropertiesModifier());
|
modifierMap.put("patch.properties", new PatchPropertiesModifier());
|
||||||
modifierMap.put("META-INF/download-context", new DownloadContextModifier());
|
modifierMap.put("META-INF/download-context", new DownloadContextModifier());
|
||||||
modifierMap.put("META-INF/patches.list", new PatchesLstModifier());
|
modifierMap.put("META-INF/patches.list", new PatchesLstModifier());
|
||||||
}
|
}
|
||||||
public void run(String... args) throws Exception {
|
|
||||||
|
@Override
|
||||||
|
public String getArgsDescription() {
|
||||||
|
return "[Local/Url path to AuthLib]";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsageDescription() {
|
||||||
|
return "Patch authlib";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke(String... args) throws Exception {
|
||||||
|
verifyArgs(args, 1);
|
||||||
|
|
||||||
boolean deleteAuthlibAfterInstall = false;
|
boolean deleteAuthlibAfterInstall = false;
|
||||||
InstallAuthlibContext context = new InstallAuthlibContext();
|
InstallAuthlibContext context = new InstallAuthlibContext();
|
||||||
if(args[0].startsWith("http://") || args[0].startsWith("https://")) {
|
if(args[0].startsWith("http://") || args[0].startsWith("https://")) {
|
|
@ -0,0 +1,163 @@
|
||||||
|
package pro.gravit.launcher.server.commands;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.events.request.GetPublicKeyRequestEvent;
|
||||||
|
import pro.gravit.launcher.profiles.ClientProfile;
|
||||||
|
import pro.gravit.launcher.request.Request;
|
||||||
|
import pro.gravit.launcher.request.auth.GetPublicKeyRequest;
|
||||||
|
import pro.gravit.launcher.request.websockets.StdWebSocketService;
|
||||||
|
import pro.gravit.launcher.server.ServerWrapper;
|
||||||
|
import pro.gravit.utils.PublicURLClassLoader;
|
||||||
|
import pro.gravit.utils.command.Command;
|
||||||
|
import pro.gravit.utils.helper.IOHelper;
|
||||||
|
import pro.gravit.utils.helper.JVMHelper;
|
||||||
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
|
public class SetupCommand extends Command {
|
||||||
|
private final ServerWrapper wrapper;
|
||||||
|
|
||||||
|
public SetupCommand(ServerWrapper wrapper) {
|
||||||
|
this.wrapper = wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getArgsDescription() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUsageDescription() {
|
||||||
|
return "Setup ServerWrapper";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invoke(String... args) throws Exception {
|
||||||
|
LogHelper.info("Print server jar filename:");
|
||||||
|
String jarName = this.wrapper.commandHandler.readLine();
|
||||||
|
Path jarPath = Paths.get(jarName);
|
||||||
|
|
||||||
|
String mainClassName;
|
||||||
|
String agentClassName;
|
||||||
|
|
||||||
|
try (JarFile file = new JarFile(jarPath.toFile())) {
|
||||||
|
LogHelper.info("Check server jar MainClass");
|
||||||
|
mainClassName = file.getManifest().getMainAttributes().getValue("Main-Class");
|
||||||
|
agentClassName = file.getManifest().getMainAttributes().getValue("Premain-Class");
|
||||||
|
|
||||||
|
if (mainClassName == null) {
|
||||||
|
LogHelper.error("Main-Class not found in MANIFEST");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class.forName(mainClassName, false, new PublicURLClassLoader(new URL[] { jarPath.toUri().toURL() }));
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
LogHelper.error(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LogHelper.info("Found MainClass %s", mainClassName);
|
||||||
|
if (agentClassName != null)
|
||||||
|
LogHelper.info("Found PremainClass %s", agentClassName);
|
||||||
|
|
||||||
|
this.wrapper.config.mainclass = mainClassName;
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; ++i) {
|
||||||
|
if(!Request.isAvailable() || Request.getRequestService().isClosed()) {
|
||||||
|
LogHelper.info("Print websocket address (ws://host:port/api):");
|
||||||
|
|
||||||
|
wrapper.config.address = this.wrapper.commandHandler.readLine();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Request.setRequestService(StdWebSocketService.initWebSockets(this.wrapper.config.address).get());
|
||||||
|
} catch (Throwable e) {
|
||||||
|
LogHelper.error(e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LogHelper.info("Print server token:");
|
||||||
|
this.wrapper.config.extendedTokens.put("checkServer", this.wrapper.commandHandler.readLine());
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.wrapper.restore();
|
||||||
|
|
||||||
|
GetPublicKeyRequestEvent publicKeyRequestEvent = new GetPublicKeyRequest().request();
|
||||||
|
this.wrapper.config.encodedServerRsaPublicKey = publicKeyRequestEvent.rsaPublicKey;
|
||||||
|
this.wrapper.config.encodedServerEcPublicKey = publicKeyRequestEvent.ecdsaPublicKey;
|
||||||
|
break;
|
||||||
|
} catch (Throwable e) {
|
||||||
|
LogHelper.error(e);
|
||||||
|
|
||||||
|
if (Request.isAvailable() && Request.getRequestService() instanceof AutoCloseable) {
|
||||||
|
((AutoCloseable) Request.getRequestService()).close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LogHelper.info("(ONLY FOR 1.18+) Use alternative start mode? (Y/N)");
|
||||||
|
boolean altMode = this.wrapper.commandHandler.readLine().equals("Y");
|
||||||
|
|
||||||
|
if (altMode) {
|
||||||
|
LogHelper.debug("Switch to alternative start mode (1.18+)");
|
||||||
|
|
||||||
|
this.wrapper.config.classpath.add(jarName);
|
||||||
|
this.wrapper.config.classLoaderConfig = ClientProfile.ClassLoaderConfig.LAUNCHER;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.wrapper.saveConfig();
|
||||||
|
|
||||||
|
LogHelper.info("Generate start script");
|
||||||
|
Path startScript = Paths.get(JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE ? "start.bat" : "start.sh");
|
||||||
|
|
||||||
|
if (Files.exists(startScript)) {
|
||||||
|
LogHelper.warning("Start script found. Move to start.bak");
|
||||||
|
IOHelper.move(startScript, Paths.get("start.bak"));
|
||||||
|
}
|
||||||
|
|
||||||
|
try (Writer writer = IOHelper.newWriter(startScript)) {
|
||||||
|
if (JVMHelper.OS_TYPE == JVMHelper.OS.LINUX) {
|
||||||
|
writer.append("#!/bin/bash\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.append("\"");
|
||||||
|
writer.append(IOHelper.resolveJavaBin(Paths.get(System.getProperty("java.home")), true).toAbsolutePath().toString());
|
||||||
|
writer.append("\" ");
|
||||||
|
|
||||||
|
if (agentClassName != null) {
|
||||||
|
writer.append("-javaagent:ServerWrapper.jar ");
|
||||||
|
writer.append("-Dserverwrapper.agentproxy=");
|
||||||
|
writer.append(agentClassName);
|
||||||
|
writer.append(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.append("-Dserverwrapper.disableSetup=true ");
|
||||||
|
|
||||||
|
writer.append("-cp ");
|
||||||
|
writer.append(IOHelper.getCodeSource(ServerWrapper.class).getFileName().toString());
|
||||||
|
|
||||||
|
if(!altMode) {
|
||||||
|
writer.append(File.pathSeparator);
|
||||||
|
writer.append(jarName);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.append(" ");
|
||||||
|
writer.append(ServerWrapper.class.getName());
|
||||||
|
writer.append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (JVMHelper.OS_TYPE != JVMHelper.OS.MUSTDIE) {
|
||||||
|
if (!startScript.toFile().setExecutable(true)) {
|
||||||
|
LogHelper.error("Failed to set executable %s", startScript);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,36 +0,0 @@
|
||||||
package pro.gravit.launcher.server.setup;
|
|
||||||
|
|
||||||
import pro.gravit.utils.command.CommandHandler;
|
|
||||||
import pro.gravit.utils.command.JLineCommandHandler;
|
|
||||||
import pro.gravit.utils.command.StdCommandHandler;
|
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class ServerWrapperCommands {
|
|
||||||
public final CommandHandler commandHandler;
|
|
||||||
|
|
||||||
public ServerWrapperCommands(CommandHandler commandHandler) {
|
|
||||||
this.commandHandler = commandHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServerWrapperCommands() throws IOException {
|
|
||||||
// Set command handler
|
|
||||||
CommandHandler localCommandHandler;
|
|
||||||
try {
|
|
||||||
Class.forName("org.jline.terminal.Terminal");
|
|
||||||
|
|
||||||
// JLine2 available
|
|
||||||
localCommandHandler = new JLineCommandHandler();
|
|
||||||
LogHelper.info("JLine2 terminal enabled");
|
|
||||||
} catch (ClassNotFoundException ignored) {
|
|
||||||
localCommandHandler = new StdCommandHandler(true);
|
|
||||||
LogHelper.warning("JLine2 isn't in classpath, using std");
|
|
||||||
}
|
|
||||||
commandHandler = localCommandHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerCommands() {
|
|
||||||
//FUTURE
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,147 +0,0 @@
|
||||||
package pro.gravit.launcher.server.setup;
|
|
||||||
|
|
||||||
import pro.gravit.launcher.events.request.GetPublicKeyRequestEvent;
|
|
||||||
import pro.gravit.launcher.profiles.ClientProfile;
|
|
||||||
import pro.gravit.launcher.profiles.ClientProfileVersions;
|
|
||||||
import pro.gravit.launcher.request.Request;
|
|
||||||
import pro.gravit.launcher.request.auth.GetPublicKeyRequest;
|
|
||||||
import pro.gravit.launcher.request.websockets.StdWebSocketService;
|
|
||||||
import pro.gravit.launcher.server.ServerWrapper;
|
|
||||||
import pro.gravit.utils.PublicURLClassLoader;
|
|
||||||
import pro.gravit.utils.helper.IOHelper;
|
|
||||||
import pro.gravit.utils.helper.JVMHelper;
|
|
||||||
import pro.gravit.utils.helper.LogHelper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.Writer;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.jar.JarFile;
|
|
||||||
|
|
||||||
public class ServerWrapperSetup {
|
|
||||||
public ServerWrapperCommands commands;
|
|
||||||
public PublicURLClassLoader urlClassLoader;
|
|
||||||
|
|
||||||
public ServerWrapperSetup() throws IOException {
|
|
||||||
commands = new ServerWrapperCommands();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run() throws Exception {
|
|
||||||
ServerWrapper wrapper = ServerWrapper.wrapper;
|
|
||||||
System.out.println("Print server jar filename:");
|
|
||||||
String jarName = commands.commandHandler.readLine();
|
|
||||||
Path jarPath = Paths.get(jarName);
|
|
||||||
String mainClassName;
|
|
||||||
String agentClassName;
|
|
||||||
try (JarFile file = new JarFile(jarPath.toFile())) {
|
|
||||||
URL jarURL = jarPath.toUri().toURL();
|
|
||||||
urlClassLoader = new PublicURLClassLoader(new URL[]{jarURL});
|
|
||||||
LogHelper.info("Check server jar MainClass");
|
|
||||||
mainClassName = file.getManifest().getMainAttributes().getValue("Main-Class");
|
|
||||||
agentClassName = file.getManifest().getMainAttributes().getValue("Premain-Class");
|
|
||||||
if (mainClassName == null) {
|
|
||||||
LogHelper.error("Main-Class not found in MANIFEST");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
Class.forName(mainClassName, false, urlClassLoader);
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
LogHelper.error(e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LogHelper.info("Found MainClass %s", mainClassName);
|
|
||||||
if (agentClassName != null) {
|
|
||||||
LogHelper.info("Found PremainClass %s", agentClassName);
|
|
||||||
}
|
|
||||||
System.out.println("Print your server name:");
|
|
||||||
wrapper.config.serverName = commands.commandHandler.readLine();
|
|
||||||
wrapper.config.mainclass = mainClassName;
|
|
||||||
boolean altMode = false;
|
|
||||||
for (int i = 0; i < 10; ++i) {
|
|
||||||
if(!Request.isAvailable() || Request.getRequestService().isClosed()) {
|
|
||||||
System.out.println("Print launchserver websocket host( ws://host:port/api ):");
|
|
||||||
wrapper.config.address = commands.commandHandler.readLine();
|
|
||||||
StdWebSocketService service;
|
|
||||||
try {
|
|
||||||
service = StdWebSocketService.initWebSockets(wrapper.config.address).get();
|
|
||||||
} catch (Throwable e) {
|
|
||||||
LogHelper.error(e);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Request.setRequestService(service);
|
|
||||||
}
|
|
||||||
System.out.println("Print server token:");
|
|
||||||
String checkServerToken = commands.commandHandler.readLine();
|
|
||||||
wrapper.config.extendedTokens.put("checkServer", checkServerToken);
|
|
||||||
wrapper.updateLauncherConfig();
|
|
||||||
try {
|
|
||||||
wrapper.restore();
|
|
||||||
wrapper.getProfiles();
|
|
||||||
GetPublicKeyRequestEvent publicKeyRequestEvent = new GetPublicKeyRequest().request();
|
|
||||||
wrapper.config.encodedServerRsaPublicKey = publicKeyRequestEvent.rsaPublicKey;
|
|
||||||
wrapper.config.encodedServerEcPublicKey = publicKeyRequestEvent.ecdsaPublicKey;
|
|
||||||
break;
|
|
||||||
} catch (Throwable e) {
|
|
||||||
LogHelper.error(e);
|
|
||||||
if(Request.isAvailable() && Request.getRequestService() instanceof AutoCloseable) {
|
|
||||||
((AutoCloseable) Request.getRequestService()).close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(wrapper.profile != null && wrapper.profile.getVersion().compareTo(ClientProfileVersions.MINECRAFT_1_18) >= 0) {
|
|
||||||
LogHelper.info("Switch to alternative start mode (1.18)");
|
|
||||||
wrapper.config.classpath.add(jarName);
|
|
||||||
wrapper.config.classLoaderConfig = ClientProfile.ClassLoaderConfig.LAUNCHER;
|
|
||||||
altMode = true;
|
|
||||||
}
|
|
||||||
wrapper.saveConfig();
|
|
||||||
LogHelper.info("Generate start script");
|
|
||||||
Path startScript;
|
|
||||||
if (JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE) startScript = Paths.get("start.bat");
|
|
||||||
else startScript = Paths.get("start.sh");
|
|
||||||
if (Files.exists(startScript)) {
|
|
||||||
LogHelper.warning("start script found. Move to start.bak");
|
|
||||||
Path startScriptBak = Paths.get("start.bak");
|
|
||||||
IOHelper.move(startScript, startScriptBak);
|
|
||||||
}
|
|
||||||
try (Writer writer = IOHelper.newWriter(startScript)) {
|
|
||||||
if (JVMHelper.OS_TYPE == JVMHelper.OS.LINUX) {
|
|
||||||
writer.append("#!/bin/bash\n\n");
|
|
||||||
}
|
|
||||||
writer.append("\"");
|
|
||||||
writer.append(IOHelper.resolveJavaBin(Paths.get(System.getProperty("java.home")), true).toAbsolutePath().toString());
|
|
||||||
writer.append("\" ");
|
|
||||||
if (mainClassName.contains("bungee")) {
|
|
||||||
LogHelper.info("Found BungeeCord mainclass. Modules dir change to modules_srv");
|
|
||||||
writer.append(JVMHelper.jvmProperty("serverwrapper.modulesDir", "modules_srv"));
|
|
||||||
writer.append(" ");
|
|
||||||
}
|
|
||||||
if (agentClassName != null) {
|
|
||||||
writer.append("-javaagent:ServerWrapper.jar ");
|
|
||||||
writer.append("-Dserverwrapper.agentproxy=".concat(agentClassName));
|
|
||||||
writer.append(" ");
|
|
||||||
}
|
|
||||||
//More args
|
|
||||||
writer.append("-cp ");
|
|
||||||
String pathServerWrapper = IOHelper.getCodeSource(ServerWrapper.class).getFileName().toString();
|
|
||||||
writer.append(pathServerWrapper);
|
|
||||||
if(!altMode) {
|
|
||||||
if (JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE) {
|
|
||||||
writer.append(";");
|
|
||||||
} else writer.append(":");
|
|
||||||
writer.append(jarName);
|
|
||||||
}
|
|
||||||
writer.append(" ");
|
|
||||||
writer.append(ServerWrapper.class.getName());
|
|
||||||
writer.append("\n");
|
|
||||||
}
|
|
||||||
if(JVMHelper.OS_TYPE != JVMHelper.OS.MUSTDIE) {
|
|
||||||
if(!startScript.toFile().setExecutable(true)) {
|
|
||||||
LogHelper.error("Failed to set executable %s", startScript);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue