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