ИНТЕРФЕЙС ФИКСЕСССС БЛЯЯЯ а так же фикс CLI
This commit is contained in:
@@ -354,7 +354,7 @@ public class Bootstrap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void launchJFX() throws Exception {
|
private static void launchJFX() throws Exception {
|
||||||
Path javaBin = findJava();
|
Path javaBin = findJava(false); // false = use javaw for GUI mode
|
||||||
Path jarPath = getLauncherJar();
|
Path jarPath = getLauncherJar();
|
||||||
|
|
||||||
log("Запуск JFX режима...");
|
log("Запуск JFX режима...");
|
||||||
@@ -393,8 +393,6 @@ public class Bootstrap {
|
|||||||
|
|
||||||
ProcessBuilder pb = new ProcessBuilder(cmd);
|
ProcessBuilder pb = new ProcessBuilder(cmd);
|
||||||
pb.directory(baseDir.toFile());
|
pb.directory(baseDir.toFile());
|
||||||
|
|
||||||
// inheritIO позволяет лаунчеру закрываться при закрытии консоли
|
|
||||||
pb.inheritIO();
|
pb.inheritIO();
|
||||||
|
|
||||||
Process p = pb.start();
|
Process p = pb.start();
|
||||||
@@ -404,8 +402,8 @@ public class Bootstrap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void launchCLI() throws Exception {
|
private static void launchCLI() throws Exception {
|
||||||
Path javaBin = findJava();
|
Path javaBin = findJava(true);
|
||||||
Path jarPath = getLauncherJar();
|
Path jarPath = getLauncherJar(); // <-- added this line
|
||||||
|
|
||||||
log("Запуск CLI режима...");
|
log("Запуск CLI режима...");
|
||||||
log("Java: " + javaBin);
|
log("Java: " + javaBin);
|
||||||
@@ -428,17 +426,23 @@ public class Bootstrap {
|
|||||||
|
|
||||||
ProcessBuilder pb = new ProcessBuilder(cmd);
|
ProcessBuilder pb = new ProcessBuilder(cmd);
|
||||||
pb.directory(baseDir.toFile());
|
pb.directory(baseDir.toFile());
|
||||||
pb.inheritIO();
|
pb.redirectErrorStream(true);
|
||||||
Process p = pb.start();
|
|
||||||
|
Process p = pb.inheritIO().start();
|
||||||
int code = p.waitFor();
|
int code = p.waitFor();
|
||||||
log("Завершено с кодом: " + code);
|
log("Завершено с кодом: " + code);
|
||||||
System.exit(code);
|
System.exit(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Path findJava() {
|
private static Path findJava(boolean needConsole) {
|
||||||
String os = System.getProperty("os.name").toLowerCase();
|
String os = System.getProperty("os.name").toLowerCase();
|
||||||
// Используем javaw для скрытия консоли в JFX режиме
|
String javaExe;
|
||||||
String javaExe = os.contains("windows") ? "javaw.exe" : "java";
|
|
||||||
|
if (needConsole || !os.contains("windows")) {
|
||||||
|
javaExe = "java";
|
||||||
|
} else {
|
||||||
|
javaExe = "javaw.exe";
|
||||||
|
}
|
||||||
|
|
||||||
// Сначала ищем jre21/bin/java рядом с лаунчером
|
// Сначала ищем jre21/bin/java рядом с лаунчером
|
||||||
Path javaBin = baseDir.resolve("jre21").resolve("bin").resolve(javaExe);
|
Path javaBin = baseDir.resolve("jre21").resolve("bin").resolve(javaExe);
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ public class Main {
|
|||||||
System.out.println(ZAnsi.brightGreen("Добро пожаловать обратно, " + sessionInfo.getUsername() + "!"));
|
System.out.println(ZAnsi.brightGreen("Добро пожаловать обратно, " + sessionInfo.getUsername() + "!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println(ZAnsi.cyan("Запуск CLI режима..."));
|
||||||
|
|
||||||
// === ГЛАВНЫЙ ЦИКЛ ===
|
// === ГЛАВНЫЙ ЦИКЛ ===
|
||||||
try {
|
try {
|
||||||
mainLoop();
|
mainLoop();
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import me.sashegdev.zernmc.launcher.api.launch.LaunchService;
|
|||||||
import me.sashegdev.zernmc.launcher.auth.AuthManager;
|
import me.sashegdev.zernmc.launcher.auth.AuthManager;
|
||||||
import me.sashegdev.zernmc.launcher.minecraft.Instance;
|
import me.sashegdev.zernmc.launcher.minecraft.Instance;
|
||||||
import me.sashegdev.zernmc.launcher.minecraft.InstanceManager;
|
import me.sashegdev.zernmc.launcher.minecraft.InstanceManager;
|
||||||
|
import me.sashegdev.zernmc.launcher.minecraft.MinecraftLib;
|
||||||
import me.sashegdev.zernmc.launcher.minecraft.launch.LaunchCommandBuilder;
|
import me.sashegdev.zernmc.launcher.minecraft.launch.LaunchCommandBuilder;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
@@ -427,8 +428,9 @@ public class JFXLauncher extends Application {
|
|||||||
String name = body.get("name");
|
String name = body.get("name");
|
||||||
String version = body.get("version");
|
String version = body.get("version");
|
||||||
String loader = body.get("loader");
|
String loader = body.get("loader");
|
||||||
|
String loaderVersion = body.get("loaderVersion");
|
||||||
|
|
||||||
log("Установка: " + name + " " + version + " " + loader);
|
log("Установка: " + name + " " + version + " " + loader + (loaderVersion != null ? " " + loaderVersion : ""));
|
||||||
|
|
||||||
var createResult = api.instances().createInstance(name);
|
var createResult = api.instances().createInstance(name);
|
||||||
if (!createResult.isSuccess()) {
|
if (!createResult.isSuccess()) {
|
||||||
@@ -440,11 +442,30 @@ public class JFXLauncher extends Application {
|
|||||||
if (instance != null) {
|
if (instance != null) {
|
||||||
instance.setMinecraftVersion(version);
|
instance.setMinecraftVersion(version);
|
||||||
instance.setLoaderType(loader);
|
instance.setLoaderType(loader);
|
||||||
|
if (loaderVersion != null) {
|
||||||
|
instance.setLoaderVersion(loaderVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendJson(exchange, Map.of("success", true, "data", true));
|
MinecraftLib lib = new MinecraftLib(instance);
|
||||||
|
|
||||||
|
boolean success = false;
|
||||||
|
if ("vanilla".equalsIgnoreCase(loader)) {
|
||||||
|
success = lib.installMinecraft(version);
|
||||||
|
} else {
|
||||||
|
success = lib.installPack(name, version, loader, loaderVersion != null ? loaderVersion : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success) {
|
||||||
log("Установлено: " + name);
|
log("Установлено: " + name);
|
||||||
|
sendJson(exchange, Map.of("success", true, "data", true));
|
||||||
|
} else {
|
||||||
|
sendJson(exchange, Map.of("success", false, "error", "Ошибка установки"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sendJson(exchange, Map.of("success", false, "error", "Instance not found"));
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
log("Ошибка установки: " + e.getMessage());
|
||||||
sendJson(exchange, Map.of("success", false, "error", e.getMessage()));
|
sendJson(exchange, Map.of("success", false, "error", e.getMessage()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -683,6 +683,11 @@ class LauncherApp {
|
|||||||
entry.className = 'log-entry ' + type;
|
entry.className = 'log-entry ' + type;
|
||||||
entry.textContent = '[' + new Date().toLocaleTimeString() + '] ' + message;
|
entry.textContent = '[' + new Date().toLocaleTimeString() + '] ' + message;
|
||||||
container.appendChild(entry);
|
container.appendChild(entry);
|
||||||
|
|
||||||
|
while (container.children.length > 500) {
|
||||||
|
container.removeChild(container.firstChild);
|
||||||
|
}
|
||||||
|
|
||||||
container.scrollTop = container.scrollHeight;
|
container.scrollTop = container.scrollHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -500,6 +500,7 @@ body {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
background: var(--bg-primary);
|
background: var(--bg-primary);
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logs-section {
|
.logs-section {
|
||||||
@@ -510,6 +511,7 @@ body {
|
|||||||
border-radius: var(--radius-md);
|
border-radius: var(--radius-md);
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
min-height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logs-header {
|
.logs-header {
|
||||||
|
|||||||
Reference in New Issue
Block a user