ИНТЕРФЕЙС ФИКСЕСССС БЛЯЯЯ а так же фикс CLI

This commit is contained in:
SashegDev
2026-05-10 01:46:38 +00:00
parent 2c670b1103
commit 1d5241075b
5 changed files with 48 additions and 14 deletions
@@ -354,7 +354,7 @@ public class Bootstrap {
}
private static void launchJFX() throws Exception {
Path javaBin = findJava();
Path javaBin = findJava(false); // false = use javaw for GUI mode
Path jarPath = getLauncherJar();
log("Запуск JFX режима...");
@@ -393,8 +393,6 @@ public class Bootstrap {
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(baseDir.toFile());
// inheritIO позволяет лаунчеру закрываться при закрытии консоли
pb.inheritIO();
Process p = pb.start();
@@ -404,8 +402,8 @@ public class Bootstrap {
}
private static void launchCLI() throws Exception {
Path javaBin = findJava();
Path jarPath = getLauncherJar();
Path javaBin = findJava(true);
Path jarPath = getLauncherJar(); // <-- added this line
log("Запуск CLI режима...");
log("Java: " + javaBin);
@@ -428,17 +426,23 @@ public class Bootstrap {
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(baseDir.toFile());
pb.inheritIO();
Process p = pb.start();
pb.redirectErrorStream(true);
Process p = pb.inheritIO().start();
int code = p.waitFor();
log("Завершено с кодом: " + code);
System.exit(code);
}
private static Path findJava() {
private static Path findJava(boolean needConsole) {
String os = System.getProperty("os.name").toLowerCase();
// Используем javaw для скрытия консоли в JFX режиме
String javaExe = os.contains("windows") ? "javaw.exe" : "java";
String javaExe;
if (needConsole || !os.contains("windows")) {
javaExe = "java";
} else {
javaExe = "javaw.exe";
}
// Сначала ищем jre21/bin/java рядом с лаунчером
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.cyan("Запуск CLI режима..."));
// === ГЛАВНЫЙ ЦИКЛ ===
try {
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.minecraft.Instance;
import me.sashegdev.zernmc.launcher.minecraft.InstanceManager;
import me.sashegdev.zernmc.launcher.minecraft.MinecraftLib;
import me.sashegdev.zernmc.launcher.minecraft.launch.LaunchCommandBuilder;
import java.io.BufferedReader;
@@ -427,8 +428,9 @@ public class JFXLauncher extends Application {
String name = body.get("name");
String version = body.get("version");
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);
if (!createResult.isSuccess()) {
@@ -440,11 +442,30 @@ public class JFXLauncher extends Application {
if (instance != null) {
instance.setMinecraftVersion(version);
instance.setLoaderType(loader);
if (loaderVersion != null) {
instance.setLoaderVersion(loaderVersion);
}
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);
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"));
}
sendJson(exchange, Map.of("success", true, "data", true));
log("Установлено: " + name);
} catch (Exception e) {
log("Ошибка установки: " + e.getMessage());
sendJson(exchange, Map.of("success", false, "error", e.getMessage()));
}
}
@@ -683,6 +683,11 @@ class LauncherApp {
entry.className = 'log-entry ' + type;
entry.textContent = '[' + new Date().toLocaleTimeString() + '] ' + message;
container.appendChild(entry);
while (container.children.length > 500) {
container.removeChild(container.firstChild);
}
container.scrollTop = container.scrollHeight;
}
@@ -500,6 +500,7 @@ body {
flex-direction: column;
padding: 20px;
background: var(--bg-primary);
height: 100%;
}
.logs-section {
@@ -510,6 +511,7 @@ body {
border-radius: var(--radius-md);
border: 1px solid var(--border-color);
overflow: hidden;
min-height: 0;
}
.logs-header {