diff --git a/build.gradle.kts b/build.gradle.kts index b3a1c56..37b01f6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,12 +15,12 @@ version = "1.3.0-SNAPSHOT" group = "xyz.jpenilla" description = "Server-side Fabric mod enhancing the console with tab completions, colored log output, command syntax highlighting, command history, and more." -val minecraftVersion = "26.1-snapshot-4" +val minecraftVersion = "26.1.2" dependencies { minecraft("com.mojang:minecraft:$minecraftVersion") - implementation("net.fabricmc:fabric-loader:0.18.4") - implementation("net.fabricmc.fabric-api:fabric-api:0.142.1+26.1") + implementation("net.fabricmc:fabric-loader:0.19.2") + implementation("net.fabricmc.fabric-api:fabric-api:0.146.0+26.1.2") annotationProcessor("org.apache.logging.log4j:log4j-core:2.25.3") @@ -33,7 +33,7 @@ dependencies { implementation("org.fusesource.jansi:jansi:2.4.2") include("org.fusesource.jansi:jansi:2.4.2") - implementation("net.kyori:adventure-platform-fabric:6.9.0-SNAPSHOT") + implementation("net.kyori:adventure-platform-fabric:6.9.0") implementation(transitiveInclude("org.spongepowered:configurate-hocon:4.2.0") { exclude("net.kyori", "option") // provided by adventure-platform-fabric @@ -61,9 +61,9 @@ fabricModJson { mainEntrypoint("xyz.jpenilla.betterfabricconsole.BetterFabricConsole") entrypoint("preLaunch", "xyz.jpenilla.betterfabricconsole.BetterFabricConsolePreLaunch") mixin("better-fabric-console.mixins.json") - depends("fabricloader", ">=0.18.4") + depends("fabricloader", ">=0.19.2") depends("fabric-api", "*") - depends("minecraft", ">1.21.11", "<26.2") // TODO ">=$minecraftVersion") + depends("minecraft", ">=$minecraftVersion", "<26.2") depends("adventure-platform-fabric", "*") } diff --git a/settings.gradle.kts b/settings.gradle.kts index e38201c..e62cfad 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -24,7 +24,7 @@ pluginManagement { } plugins { - id("xyz.jpenilla.quiet-fabric-loom") version "1.15-SNAPSHOT" apply false + id("xyz.jpenilla.quiet-fabric-loom") version "1.15.334" apply false id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" } diff --git a/src/main/java/xyz/jpenilla/betterfabricconsole/console/ConsoleSetup.java b/src/main/java/xyz/jpenilla/betterfabricconsole/console/ConsoleSetup.java index c045d7d..b81b901 100644 --- a/src/main/java/xyz/jpenilla/betterfabricconsole/console/ConsoleSetup.java +++ b/src/main/java/xyz/jpenilla/betterfabricconsole/console/ConsoleSetup.java @@ -23,6 +23,7 @@ */ package xyz.jpenilla.betterfabricconsole.console; +import java.io.IOException; import java.nio.file.Paths; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Logger; @@ -33,6 +34,8 @@ import org.jline.reader.LineReader; import org.jline.reader.LineReaderBuilder; import org.jline.reader.Parser; +import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; import org.jspecify.annotations.NullMarked; import xyz.jpenilla.betterfabricconsole.configuration.Config; @@ -48,8 +51,11 @@ private static LineReader buildLineReader( ) { System.setProperty("org.jline.reader.support.parsedline", "true"); // to hide a warning message about the parser not supporting + final Terminal terminal = buildTerminal(); + return LineReaderBuilder.builder() .appName("Dedicated Server") + .terminal(terminal) .variable(LineReader.HISTORY_FILE, Paths.get(".console_history")) .completer(completer) .highlighter(highlighter) @@ -61,6 +67,26 @@ private static LineReader buildLineReader( .build(); } + private static Terminal buildTerminal() { + try { + return TerminalBuilder.builder() + .system(true) + .dumb(false) + .nativeSignals(true) + .build(); + } catch (final IOException | IllegalStateException ex) { + try { + return TerminalBuilder.builder() + .system(true) + .dumb(true) + .nativeSignals(true) + .build(); + } catch (final IOException fallbackEx) { + throw new IllegalStateException("Failed to initialize console terminal", fallbackEx); + } + } + } + public static ConsoleState init( final Config config ) { diff --git a/src/main/java/xyz/jpenilla/betterfabricconsole/console/ConsoleThread.java b/src/main/java/xyz/jpenilla/betterfabricconsole/console/ConsoleThread.java index fc25a03..03b933f 100644 --- a/src/main/java/xyz/jpenilla/betterfabricconsole/console/ConsoleThread.java +++ b/src/main/java/xyz/jpenilla/betterfabricconsole/console/ConsoleThread.java @@ -33,9 +33,9 @@ import org.jline.reader.EndOfFileException; import org.jline.reader.LineReader; import org.jline.reader.UserInterruptException; +import org.jline.terminal.Terminal; import org.jspecify.annotations.NullMarked; import xyz.jpenilla.betterfabricconsole.BetterFabricConsole; -import xyz.jpenilla.betterfabricconsole.util.TerminalModeDetection; @NullMarked public final class ConsoleThread extends Thread { @@ -57,7 +57,7 @@ public ConsoleThread( @Override public void run() { BetterFabricConsole.LOGGER.info("Initialized Better Fabric Console console thread."); - if (TerminalModeDetection.isDumb()) { + if (Terminal.TYPE_DUMB.equals(this.lineReader.getTerminal().getType())) { this.acceptInput(System.in); } else { this.acceptTerminalInput(); diff --git a/src/main/java/xyz/jpenilla/betterfabricconsole/util/TerminalModeDetection.java b/src/main/java/xyz/jpenilla/betterfabricconsole/util/TerminalModeDetection.java index cb2fbe2..b3ef55e 100644 --- a/src/main/java/xyz/jpenilla/betterfabricconsole/util/TerminalModeDetection.java +++ b/src/main/java/xyz/jpenilla/betterfabricconsole/util/TerminalModeDetection.java @@ -37,10 +37,6 @@ private TerminalModeDetection() { } private static TerminalMode detectMode() { - if (!CONSOLE_INPUT_AVAILABLE) { - return TerminalMode.DUMB; - } - try (Terminal terminal = TerminalBuilder.builder().system(true).dumb(false).build()) { return Terminal.TYPE_DUMB.equals(terminal.getType()) ? TerminalMode.DUMB : TerminalMode.INTERACTIVE; } catch (final IOException | IllegalStateException e) {