From fd6e292d6e4ad92faa723978338baf322f196932 Mon Sep 17 00:00:00 2001 From: SashegDev Date: Fri, 8 May 2026 17:23:38 +0000 Subject: [PATCH] Add game log file writing, debug modloader launch --- .../launcher/api/launch/LaunchService.java | 4 ++++ .../zernmc/launcher/ui/jfx/JFXLauncher.java | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/api/launch/LaunchService.java b/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/api/launch/LaunchService.java index 157a413..f89e79c 100644 --- a/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/api/launch/LaunchService.java +++ b/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/api/launch/LaunchService.java @@ -46,6 +46,8 @@ public class LaunchService { return ApiResponse.error("Сборка не найдена: " + instanceName); } + JFXLauncher.initGameLog(instance.getPath()); + LaunchCommandBuilder builder = new LaunchCommandBuilder(instance); LaunchOptions options = new LaunchOptions(); @@ -55,6 +57,8 @@ public class LaunchService { options.setUuid(AuthManager.getUuid()); List command = builder.build(options); + System.out.println("[LAUNCH] Generated command for " + instanceName + ":"); + command.forEach(arg -> System.out.println(" " + arg)); ProcessBuilder processBuilder = new ProcessBuilder(command); processBuilder.directory(instance.getPath().toFile()); diff --git a/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java b/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java index 496fbd8..7bb6bb3 100644 --- a/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java +++ b/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java @@ -19,6 +19,9 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executors; @@ -34,14 +37,33 @@ public class JFXLauncher extends Application { private HttpServer server; private StringBuilder logBuffer = new StringBuilder(); private static StringBuilder gameLogBuffer = new StringBuilder(); + private static Path gameLogFile; private Stage mainStage; public static void appendGameLog(String log) { synchronized (gameLogBuffer) { gameLogBuffer.append(log).append("\n"); + + if (gameLogFile != null) { + try { + String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss")); + Files.writeString(gameLogFile, "[" + timestamp + "] " + log + "\n", + StandardOpenOption.CREATE, StandardOpenOption.APPEND); + } catch (Exception ignored) {} + } } } + public static void initGameLog(Path instanceDir) { + try { + Path logsDir = instanceDir.resolve("logs"); + Files.createDirectories(logsDir); + gameLogFile = logsDir.resolve("game.log"); + Files.writeString(gameLogFile, "=== Game Log " + LocalDateTime.now() + " ===\n", + StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); + } catch (Exception ignored) {} + } + public static String getGameLogs() { synchronized (gameLogBuffer) { return gameLogBuffer.toString();