#3837: Update to JLine 3

This commit is contained in:
md_5 2025-06-01 12:09:40 +10:00
parent aa44ebe770
commit 7cde213e63
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11
7 changed files with 45 additions and 41 deletions

View File

@ -20,9 +20,9 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>jline</groupId> <groupId>org.jline</groupId>
<artifactId>jline</artifactId> <artifactId>jline</artifactId>
<version>2.12.1</version> <version>3.30.4</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -5,14 +5,14 @@ import java.util.logging.FileHandler;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.LogRecord; import java.util.logging.LogRecord;
import java.util.logging.Logger; import java.util.logging.Logger;
import jline.console.ConsoleReader; import org.jline.reader.LineReader;
public class BungeeLogger extends Logger public class BungeeLogger extends Logger
{ {
private final LogDispatcher dispatcher = new LogDispatcher( this ); private final LogDispatcher dispatcher = new LogDispatcher( this );
public BungeeLogger(String loggerName, String filePattern, ConsoleReader reader) public BungeeLogger(String loggerName, String filePattern, LineReader reader)
{ {
super( loggerName, null ); super( loggerName, null );
setLevel( Level.ALL ); setLevel( Level.ALL );

View File

@ -1,15 +1,15 @@
package net.md_5.bungee.log; package net.md_5.bungee.log;
import java.io.IOException;
import java.util.logging.Handler; import java.util.logging.Handler;
import java.util.logging.LogRecord; import java.util.logging.LogRecord;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import jline.console.ConsoleReader;
import lombok.Data; import lombok.Data;
import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import org.fusesource.jansi.Ansi; import org.jline.jansi.Ansi;
import org.fusesource.jansi.Ansi.Erase; import org.jline.reader.LineReader;
@RequiredArgsConstructor
public class ColouredWriter extends Handler public class ColouredWriter extends Handler
{ {
@ -52,12 +52,7 @@ public class ColouredWriter extends Handler
compile( ChatColor.RESET, Ansi.ansi().a( Ansi.Attribute.RESET ).toString() ), compile( ChatColor.RESET, Ansi.ansi().a( Ansi.Attribute.RESET ).toString() ),
}; };
// //
private final ConsoleReader console; private final LineReader console;
public ColouredWriter(ConsoleReader console)
{
this.console = console;
}
public void print(String s) public void print(String s)
{ {
@ -65,14 +60,7 @@ public class ColouredWriter extends Handler
{ {
s = replacement.pattern.matcher( s ).replaceAll( replacement.replacement ); s = replacement.pattern.matcher( s ).replaceAll( replacement.replacement );
} }
try console.printAbove( s + Ansi.ansi().reset().toString() );
{
console.print( Ansi.ansi().eraseLine( Erase.ALL ).toString() + ConsoleReader.RESET_LINE + s + Ansi.ansi().reset().toString() );
console.drawLine();
console.flush();
} catch ( IOException ex )
{
}
} }
@Override @Override

View File

@ -179,7 +179,7 @@
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-maven-plugin</artifactId> <artifactId>animal-sniffer-maven-plugin</artifactId>
<version>1.23</version> <version>1.24</version>
<executions> <executions>
<execution> <execution>
<phase>process-classes</phase> <phase>process-classes</phase>

View File

@ -44,7 +44,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.logging.Handler; import java.util.logging.Handler;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import jline.console.ConsoleReader;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.Synchronized; import lombok.Synchronized;
@ -84,7 +83,10 @@ import net.md_5.bungee.protocol.packet.PluginMessage;
import net.md_5.bungee.query.RemoteQuery; import net.md_5.bungee.query.RemoteQuery;
import net.md_5.bungee.scheduler.BungeeScheduler; import net.md_5.bungee.scheduler.BungeeScheduler;
import net.md_5.bungee.util.CaseInsensitiveMap; import net.md_5.bungee.util.CaseInsensitiveMap;
import org.fusesource.jansi.AnsiConsole; import org.jline.reader.LineReader;
import org.jline.reader.LineReaderBuilder;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.slf4j.impl.JDK14LoggerFactory; import org.slf4j.impl.JDK14LoggerFactory;
/** /**
@ -146,7 +148,7 @@ public class BungeeCord extends ProxyServer
@Getter @Getter
private final BungeeScheduler scheduler = new BungeeScheduler(); private final BungeeScheduler scheduler = new BungeeScheduler();
@Getter @Getter
private final ConsoleReader consoleReader; private final LineReader consoleReader;
@Getter @Getter
private final Logger logger; private final Logger logger;
@Getter @Getter
@ -195,10 +197,11 @@ public class BungeeCord extends ProxyServer
// BungeeCord. This version is only used when extracting the libraries to their temp folder. // BungeeCord. This version is only used when extracting the libraries to their temp folder.
System.setProperty( "library.jansi.version", "BungeeCord" ); System.setProperty( "library.jansi.version", "BungeeCord" );
AnsiConsole.systemInstall(); Terminal terminal = TerminalBuilder.builder().build();
consoleReader = new ConsoleReader(); consoleReader = LineReaderBuilder.builder().terminal( terminal )
consoleReader.setExpandEvents( false ); .option( LineReader.Option.DISABLE_EVENT_EXPANSION, true )
consoleReader.addCompleter( new ConsoleCommandCompleter( this ) ); .completer( new ConsoleCommandCompleter( this ) )
.build();
logger = new BungeeLogger( "BungeeCord", "proxy.log", consoleReader ); logger = new BungeeLogger( "BungeeCord", "proxy.log", consoleReader );
JDK14LoggerFactory.LOGGER = logger; JDK14LoggerFactory.LOGGER = logger;

View File

@ -12,6 +12,8 @@ import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.command.ConsoleCommandSender; import net.md_5.bungee.command.ConsoleCommandSender;
import org.jline.reader.EndOfFileException;
import org.jline.reader.UserInterruptException;
public class BungeeCordLauncher public class BungeeCordLauncher
{ {
@ -67,6 +69,8 @@ public class BungeeCordLauncher
bungee.start(); bungee.start();
if ( !options.has( "noconsole" ) ) if ( !options.has( "noconsole" ) )
{
try
{ {
String line; String line;
while ( bungee.isRunning && ( line = bungee.getConsoleReader().readLine( ">" ) ) != null ) while ( bungee.isRunning && ( line = bungee.getConsoleReader().readLine( ">" ) ) != null )
@ -76,6 +80,10 @@ public class BungeeCordLauncher
bungee.getConsole().sendMessage( new ComponentBuilder( "Command not found" ).color( ChatColor.RED ).create() ); bungee.getConsole().sendMessage( new ComponentBuilder( "Command not found" ).color( ChatColor.RED ).create() );
} }
} }
} catch ( EndOfFileException | UserInterruptException ex )
{
// ignore
}
} }
} }
} }

View File

@ -5,9 +5,12 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jline.console.completer.Completer;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import org.jline.reader.Candidate;
import org.jline.reader.Completer;
import org.jline.reader.LineReader;
import org.jline.reader.ParsedLine;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ConsoleCommandCompleter implements Completer public class ConsoleCommandCompleter implements Completer
@ -16,23 +19,25 @@ public class ConsoleCommandCompleter implements Completer
private final ProxyServer proxy; private final ProxyServer proxy;
@Override @Override
public int complete(String buffer, int cursor, List<CharSequence> candidates) public void complete(LineReader reader, ParsedLine line, List<Candidate> candidates)
{ {
List<String> suggestions;
String buffer = line.line();
int lastSpace = buffer.lastIndexOf( ' ' ); int lastSpace = buffer.lastIndexOf( ' ' );
if ( lastSpace == -1 ) if ( lastSpace == -1 )
{ {
String lowerCase = buffer.toLowerCase( Locale.ROOT ); String lowerCase = buffer.toLowerCase( Locale.ROOT );
candidates.addAll( proxy.getPluginManager().getCommands().stream() suggestions = proxy.getPluginManager().getCommands().stream()
.map( Map.Entry::getKey ) .map( Map.Entry::getKey )
.filter( (name) -> name.toLowerCase( Locale.ROOT ).startsWith( lowerCase ) ) .filter( (name) -> name.toLowerCase( Locale.ROOT ).startsWith( lowerCase ) )
.collect( Collectors.toList() ) ); .collect( Collectors.toList() );
} else } else
{ {
List<String> suggestions = new ArrayList<>(); suggestions = new ArrayList<>();
proxy.getPluginManager().dispatchCommand( proxy.getConsole(), buffer, suggestions ); proxy.getPluginManager().dispatchCommand( proxy.getConsole(), buffer, suggestions );
candidates.addAll( suggestions );
} }
return ( lastSpace == -1 ) ? cursor - buffer.length() : cursor - ( buffer.length() - lastSpace - 1 ); suggestions.stream().map( Candidate::new ).forEach( (candidate) -> candidates.add( candidate ) );
} }
} }