diff --git a/Assembly/dependency-reduced-pom.xml b/Assembly/dependency-reduced-pom.xml
index a90e72c..9c0cbae 100644
--- a/Assembly/dependency-reduced-pom.xml
+++ b/Assembly/dependency-reduced-pom.xml
@@ -3,7 +3,7 @@
AntiVPN
dev.brighten.antivpn
- 1.1
+ 1.1.1
4.0.0
Assembly
diff --git a/Assembly/pom.xml b/Assembly/pom.xml
index d72ebbe..8239c9a 100644
--- a/Assembly/pom.xml
+++ b/Assembly/pom.xml
@@ -5,7 +5,7 @@
AntiVPN
dev.brighten.antivpn
- 1.1
+ 1.1.1
4.0.0
diff --git a/Bukkit/dependency-reduced-pom.xml b/Bukkit/dependency-reduced-pom.xml
index a66e719..7e61704 100644
--- a/Bukkit/dependency-reduced-pom.xml
+++ b/Bukkit/dependency-reduced-pom.xml
@@ -3,7 +3,7 @@
AntiVPN
dev.brighten.antivpn
- 1.1
+ 1.1.1
4.0.0
Bukkit
diff --git a/Bukkit/pom.xml b/Bukkit/pom.xml
index dc9f4bf..96166ce 100644
--- a/Bukkit/pom.xml
+++ b/Bukkit/pom.xml
@@ -5,7 +5,7 @@
AntiVPN
dev.brighten.antivpn
- 1.1
+ 1.1.1
4.0.0
@@ -47,7 +47,7 @@
dev.brighten.antivpn
Common
- 1.1
+ 1.1.1
provided
diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java
index 5021e8d..cf8f6c4 100644
--- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java
+++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java
@@ -49,6 +49,23 @@ public class BukkitPlugin extends JavaPlugin {
for (Command command : AntiVPN.getInstance().getCommands()) {
val newCommand = new org.bukkit.command.Command(command.name(), command.description(), command.usage(),
Arrays.asList(command.aliases())) {
+ @Override
+ public List tabComplete(CommandSender sender, String alias, String[] args)
+ throws IllegalArgumentException {
+ val children = command.children();
+
+ if(children.length > 0 && args.length > 0) {
+ for (Command child : children) {
+ if(child.name().equalsIgnoreCase(args[0])) {
+ return child.tabComplete(new BukkitCommandExecutor(sender), alias, IntStream
+ .range(0, args.length - 1)
+ .mapToObj(i -> args[i + 1]).toArray(String[]::new));
+ }
+ }
+ }
+ return command.tabComplete(new BukkitCommandExecutor(sender), alias, args);
+ }
+
@Override
public boolean execute(CommandSender sender, String s, String[] args) {
if(!sender.hasPermission("antivpn.command.*")
diff --git a/Bungee/dependency-reduced-pom.xml b/Bungee/dependency-reduced-pom.xml
index 117e54e..3c5b21b 100644
--- a/Bungee/dependency-reduced-pom.xml
+++ b/Bungee/dependency-reduced-pom.xml
@@ -3,7 +3,7 @@
AntiVPN
dev.brighten.antivpn
- 1.1
+ 1.1.1
4.0.0
Bungee
diff --git a/Bungee/pom.xml b/Bungee/pom.xml
index 3cb5565..7d28bcb 100644
--- a/Bungee/pom.xml
+++ b/Bungee/pom.xml
@@ -5,7 +5,7 @@
AntiVPN
dev.brighten.antivpn
- 1.1
+ 1.1.1
4.0.0
@@ -41,7 +41,7 @@
dev.brighten.antivpn
Common
- 1.1
+ 1.1.1
provided
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java
index bf3f4c7..ce051c1 100644
--- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java
@@ -6,6 +6,7 @@ import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.event.PostLoginEvent;
+import net.md_5.bungee.api.event.TabCompleteEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.scheduler.ScheduledTask;
import net.md_5.bungee.event.EventHandler;
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java
index 84d2854..9556d2e 100644
--- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java
@@ -2,9 +2,19 @@ package dev.brighten.antivpn.bungee;
import dev.brighten.antivpn.AntiVPN;
import dev.brighten.antivpn.bungee.util.Config;
+import dev.brighten.antivpn.command.Command;
import lombok.Getter;
+import lombok.val;
+import net.md_5.bungee.BungeeCord;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.CommandSender;
+import net.md_5.bungee.api.chat.BaseComponent;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.plugin.Plugin;
+import java.util.stream.IntStream;
+
public class BungeePlugin extends Plugin {
public static BungeePlugin pluginInstance;
@@ -12,6 +22,9 @@ public class BungeePlugin extends Plugin {
@Getter
private Config config;
+ private static BaseComponent[] noPermission = new ComponentBuilder("No permission").color(ChatColor.RED)
+ .create();
+
@Override
public void onEnable() {
pluginInstance = this;
@@ -23,22 +36,48 @@ public class BungeePlugin extends Plugin {
AntiVPN.start(new BungeeConfig(), new BungeeListener(), new BungeePlayerExecutor());
//TODO Add command functionality for BungeeCord
- /*for (Command command : AntiVPN.getInstance().getCommands()) {
+ for (Command command : AntiVPN.getInstance().getCommands()) {
BungeeCord.getInstance().getPluginManager().registerCommand(pluginInstance, new net.md_5.bungee.api.plugin
- .Command(command.parent() + " " + command.name(), command.permission(), command.aliases()) {
+ .Command(command.name(), command.permission(), command.aliases()) {
+
@Override
- public void execute(CommandSender commandSender, String[] strings) {
- if(!commandSender.hasPermission("antivpn.command.*")
- && !commandSender.hasPermission(command.permission())) {
- commandSender.sendMessage(new ComponentBuilder("No permission").color(ChatColor.RED)
- .create());
+ public void execute(CommandSender sender, String[] args) {
+ if(!sender.hasPermission("antivpn.command.*")
+ && !sender.hasPermission(command.permission())) {
+ sender.sendMessage(noPermission);
return;
}
- command.execute(new BungeeCommandExecutor(commandSender), strings);
+ val children = command.children();
+
+ if(children.length > 0 && args.length > 0) {
+ for (Command child : children) {
+ if(child.name().equalsIgnoreCase(args[0])) {
+ if(!sender.hasPermission("antivpn.command.*")
+ && !sender.hasPermission(child.permission())) {
+ sender.sendMessage(noPermission);
+ return;
+ }
+
+ sender.sendMessage(TextComponent
+ .fromLegacyText(ChatColor
+ .translateAlternateColorCodes('&',
+ child.execute(new BungeeCommandExecutor(sender), IntStream
+ .range(0, args.length - 1)
+ .mapToObj(i -> args[i + 1]).toArray(String[]::new)))));
+ return;
+ }
+ }
+ }
+
+
+ sender.sendMessage(TextComponent
+ .fromLegacyText(ChatColor
+ .translateAlternateColorCodes('&',
+ command.execute(new BungeeCommandExecutor(sender), args))));
}
});
- }*/
+ }
}
@Override
diff --git a/Common/pom.xml b/Common/pom.xml
index 7b09f7c..820f4d6 100644
--- a/Common/pom.xml
+++ b/Common/pom.xml
@@ -5,7 +5,7 @@
AntiVPN
dev.brighten.antivpn
- 1.1
+ 1.1.1
4.0.0
diff --git a/Common/src/main/java/dev/brighten/antivpn/command/Command.java b/Common/src/main/java/dev/brighten/antivpn/command/Command.java
index a025ad2..893248e 100644
--- a/Common/src/main/java/dev/brighten/antivpn/command/Command.java
+++ b/Common/src/main/java/dev/brighten/antivpn/command/Command.java
@@ -1,6 +1,6 @@
package dev.brighten.antivpn.command;
-import dev.brighten.antivpn.AntiVPN;
+import java.util.List;
public abstract class Command {
@@ -19,4 +19,6 @@ public abstract class Command {
public abstract Command[] children();
public abstract String execute(CommandExecutor executor, String[] args);
+
+ public abstract List tabComplete(CommandExecutor executor, String alias, String[] args);
}
diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java
index 706adb5..738be74 100644
--- a/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java
+++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java
@@ -6,8 +6,8 @@ import dev.brighten.antivpn.command.CommandExecutor;
import dev.brighten.antivpn.utils.StringUtil;
import jdk.nashorn.internal.lookup.Lookup;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
public class AntiVPNCommand extends Command {
@Override
@@ -61,4 +61,15 @@ public class AntiVPNCommand extends Command {
return String.join("\n", messages);
}
+
+ @Override
+ public List tabComplete(CommandExecutor executor, String alias, String[] args) {
+ if(args.length == 1)
+ return Arrays.stream(children())
+ .map(Command::name)
+ .filter(name -> name.toLowerCase().startsWith(args[0].toLowerCase()))
+ .collect(Collectors.toList());
+
+ return Collections.emptyList();
+ }
}
diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/LookupCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/LookupCommand.java
index 96a53a7..d039d00 100644
--- a/Common/src/main/java/dev/brighten/antivpn/command/impl/LookupCommand.java
+++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/LookupCommand.java
@@ -6,7 +6,11 @@ import dev.brighten.antivpn.command.Command;
import dev.brighten.antivpn.command.CommandExecutor;
import dev.brighten.antivpn.utils.StringUtil;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
import java.util.Optional;
+import java.util.stream.Collectors;
public class LookupCommand extends Command {
@Override
@@ -78,4 +82,15 @@ public class LookupCommand extends Command {
return "&7Looking up the IP information for player " + player.get().getName() + "...";
}
+
+ @Override
+ public List tabComplete(CommandExecutor executor, String alias, String[] args) {
+
+ if(args.length == 1) return AntiVPN.getInstance().getPlayerExecutor().getOnlinePlayers().stream()
+ .map(APIPlayer::getName)
+ .filter(name -> name.toLowerCase().startsWith(args[0].toLowerCase()))
+ .collect(Collectors.toList());
+
+ return Collections.emptyList();
+ }
}
diff --git a/pom.xml b/pom.xml
index 6936095..0bf8295 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
dev.brighten.antivpn
AntiVPN
pom
- 1.1
+ 1.1.1
Common