Replace console with a jline implementation

This commit is contained in:
Melledy
2023-10-10 06:59:38 -07:00
parent 0682ca4ecf
commit 83fa66d180
3 changed files with 26 additions and 8 deletions

View File

@@ -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'

View File

@@ -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);
}
}

View File

@@ -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<String, CommandHandler> labels;
private Object2ObjectMap<String, CommandHandler> commands;