mirror of
https://github.com/PaperMC/Waterfall.git
synced 2025-02-23 15:21:19 +01:00
This is the last time we will be amending the patch authors, unless an author hasen't been credited properly.
100 lines
3.5 KiB
Diff
100 lines
3.5 KiB
Diff
From 7f7105e1d3486409e139bb8b2481966f17ffe086 Mon Sep 17 00:00:00 2001
|
|
From: Mystiflow <mystiflow@gmail.com>
|
|
Date: Sun, 14 Feb 2016 15:54:40 +0000
|
|
Subject: [PATCH] Allow the console to tab complete commands
|
|
|
|
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
index c803735..f3625e5 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
@@ -210,6 +210,7 @@ public class BungeeCord extends ProxyServer
|
|
AnsiConsole.systemInstall();
|
|
consoleReader = new ConsoleReader();
|
|
consoleReader.setExpandEvents( false );
|
|
+ consoleReader.addCompleter( new ConsoleCommandCompleter( this ) );
|
|
|
|
logger = new BungeeLogger( "BungeeCord", System.getProperty("bungee.log-file", "proxy.log"), consoleReader );
|
|
System.setErr( new PrintStream( new LoggingOutputStream( logger, Level.SEVERE ), true ) );
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/ConsoleCommandCompleter.java b/proxy/src/main/java/net/md_5/bungee/ConsoleCommandCompleter.java
|
|
new file mode 100644
|
|
index 0000000..455b078
|
|
--- /dev/null
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/ConsoleCommandCompleter.java
|
|
@@ -0,0 +1,72 @@
|
|
+package net.md_5.bungee;
|
|
+
|
|
+import com.google.common.collect.Iterables;
|
|
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
|
+import jline.console.completer.Completer;
|
|
+import net.md_5.bungee.api.ProxyServer;
|
|
+
|
|
+import java.util.ArrayList;
|
|
+import java.util.List;
|
|
+import java.util.concurrent.Callable;
|
|
+import java.util.concurrent.ExecutionException;
|
|
+import java.util.concurrent.ExecutorService;
|
|
+import java.util.concurrent.Executors;
|
|
+import java.util.concurrent.Future;
|
|
+import java.util.logging.Level;
|
|
+
|
|
+public class ConsoleCommandCompleter implements Completer
|
|
+{
|
|
+
|
|
+ private final ExecutorService executor = Executors.newSingleThreadExecutor(
|
|
+ new ThreadFactoryBuilder().setNameFormat( "Console Command Completer Thread - %1$d" ).build() );
|
|
+
|
|
+ private final ProxyServer proxy;
|
|
+
|
|
+ public ConsoleCommandCompleter( ProxyServer proxy )
|
|
+ {
|
|
+ this.proxy = proxy;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int complete( String buffer, int cursor, List<CharSequence> candidates )
|
|
+ {
|
|
+ Future<Iterable<String>> future = executor.submit( new Callable<Iterable<String>>()
|
|
+ {
|
|
+ @Override
|
|
+ public Iterable<String> call() throws Exception
|
|
+ {
|
|
+ List<String> results = new ArrayList<>();
|
|
+ proxy.getPluginManager().dispatchCommand( proxy.getConsole(), buffer, results );
|
|
+ return results;
|
|
+ }
|
|
+ } );
|
|
+
|
|
+ try
|
|
+ {
|
|
+ Iterable<String> offers = future.get();
|
|
+ if ( offers == null )
|
|
+ {
|
|
+ return cursor;
|
|
+ }
|
|
+
|
|
+ Iterables.addAll( candidates, offers );
|
|
+
|
|
+ final int lastSpace = buffer.lastIndexOf( ' ' );
|
|
+ if ( lastSpace == -1 )
|
|
+ {
|
|
+ return cursor - buffer.length();
|
|
+ } else
|
|
+ {
|
|
+ return cursor - ( buffer.length() - lastSpace - 1 );
|
|
+ }
|
|
+ } catch ( ExecutionException ex )
|
|
+ {
|
|
+ proxy.getLogger().log( Level.WARNING, "Unhandled exception when tab completing", ex );
|
|
+ } catch ( InterruptedException ex )
|
|
+ {
|
|
+ Thread.currentThread().interrupt();
|
|
+ }
|
|
+
|
|
+ return cursor;
|
|
+ }
|
|
+}
|
|
--
|
|
2.10.0
|
|
|