From 83fa66d180d151166e8e7384bd91f3a2342c4192 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Tue, 10 Oct 2023 06:59:38 -0700 Subject: [PATCH] Replace console with a jline implementation --- build.gradle | 3 ++ src/main/java/emu/lunarcore/LunarRail.java | 28 +++++++++++++++---- .../emu/lunarcore/command/CommandManager.java | 3 +- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index b17d03e..861ad95 100644 --- a/build.gradle +++ b/build.gradle @@ -79,6 +79,9 @@ dependencies { implementation group: 'de.bwaldvogel', name: 'mongo-java-server', version: '1.44.0' implementation group: 'de.bwaldvogel', name: 'mongo-java-server-h2-backend', version: '1.44.0' + implementation group: 'org.jline', name: 'jline', version: '3.23.0' + implementation group: 'org.jline', name: 'jline-terminal-jansi', version: '3.23.0' + protobuf files('proto/') compileOnly 'org.projectlombok:lombok:1.18.30' diff --git a/src/main/java/emu/lunarcore/LunarRail.java b/src/main/java/emu/lunarcore/LunarRail.java index 3a685e7..dc47fef 100644 --- a/src/main/java/emu/lunarcore/LunarRail.java +++ b/src/main/java/emu/lunarcore/LunarRail.java @@ -2,6 +2,11 @@ package emu.lunarcore; import java.io.*; +import org.jline.reader.EndOfFileException; +import org.jline.reader.LineReaderBuilder; +import org.jline.reader.UserInterruptException; +import org.jline.reader.impl.LineReaderImpl; +import org.jline.terminal.TerminalBuilder; import org.slf4j.LoggerFactory; import com.google.gson.Gson; @@ -146,15 +151,26 @@ public class LunarRail { } // Server console - + private static void startConsole() { - String input; - try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { - while ((input = br.readLine()) != null) { + try { + LineReaderImpl reader = (LineReaderImpl) LineReaderBuilder.builder() + .terminal(TerminalBuilder.terminal()) + .build(); + + while (true) { + String input = reader.readLine("> "); + if (input == null || input.length() == 0) { + continue; + } + LunarRail.getCommandManager().invoke(null, input); - } + } + } catch (UserInterruptException | EndOfFileException e) { + // CTRL + C / CTRL + D + System.exit(0); } catch (Exception e) { - LunarRail.getLogger().error("Console error:", e); + LunarRail.getLogger().error("Terminal error: ", e); } } diff --git a/src/main/java/emu/lunarcore/command/CommandManager.java b/src/main/java/emu/lunarcore/command/CommandManager.java index fc4cf78..0998552 100644 --- a/src/main/java/emu/lunarcore/command/CommandManager.java +++ b/src/main/java/emu/lunarcore/command/CommandManager.java @@ -11,10 +11,9 @@ import emu.lunarcore.LunarRail; import emu.lunarcore.game.player.Player; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import lombok.AccessLevel; import lombok.Getter; -@Getter(AccessLevel.PRIVATE) +@Getter public class CommandManager { private Object2ObjectMap labels; private Object2ObjectMap commands;