Add basic tab completion support.
This commit adds support for basic tab completion for most of the commands that take arguments. Some completions are somewhat intelligent, e.g. `/ma join` which only lists enabled and "functional" arenas that the given player is permitted to use. Others are just kinda dumb, e.g. `/ma enable` which indiscriminately lists all arenas. Closes #405
This commit is contained in:
@@ -12,6 +12,7 @@ These changes will (most likely) be included in the next version.
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
- Extended and upgraded potions are now supported in the item syntax by prepending `long_` or `strong_` to the data portion of a potion item (e.g. `potion:strong_instant_heal:1` will yield a Potion of Healing II). Check the wiki for details.
|
- Extended and upgraded potions are now supported in the item syntax by prepending `long_` or `strong_` to the data portion of a potion item (e.g. `potion:strong_instant_heal:1` will yield a Potion of Healing II). Check the wiki for details.
|
||||||
|
- MobArena now has basic tab completion support for most of the commands that take arguments.
|
||||||
- Tridents and crossbows are now considered weapons with regards to the `unbreakable-weapons` flag. All class items that have durability now have their unbreakable flag set to true unless the `unbreakable-weapons` and/or `unbreakable-armor` flags are set to `false`.
|
- Tridents and crossbows are now considered weapons with regards to the `unbreakable-weapons` flag. All class items that have durability now have their unbreakable flag set to true unless the `unbreakable-weapons` and/or `unbreakable-armor` flags are set to `false`.
|
||||||
- Leaderboards now work again on servers running Minecraft 1.14+.
|
- Leaderboards now work again on servers running Minecraft 1.14+.
|
||||||
- Class chests (non-linked) now work again on servers running Minecraft 1.14+.
|
- Class chests (non-linked) now work again on servers running Minecraft 1.14+.
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ package com.garbagemule.MobArena.commands;
|
|||||||
|
|
||||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface Command
|
public interface Command
|
||||||
{
|
{
|
||||||
@@ -25,4 +29,16 @@ public interface Command
|
|||||||
* command handler should print the usage message to the sender
|
* command handler should print the usage message to the sender
|
||||||
*/
|
*/
|
||||||
boolean execute(ArenaMaster am, CommandSender sender, String... args);
|
boolean execute(ArenaMaster am, CommandSender sender, String... args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tab complete the given arguments.
|
||||||
|
*
|
||||||
|
* @param am an ArenaMaster instance
|
||||||
|
* @param player the sender
|
||||||
|
* @param args array of arguments
|
||||||
|
* @return a list of possible completions, or null
|
||||||
|
*/
|
||||||
|
default List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,16 +34,20 @@ import com.garbagemule.MobArena.framework.ArenaMaster;
|
|||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
import org.bukkit.conversations.Conversable;
|
import org.bukkit.conversations.Conversable;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class CommandHandler implements CommandExecutor
|
public class CommandHandler implements CommandExecutor, TabCompleter
|
||||||
{
|
{
|
||||||
private MobArena plugin;
|
private MobArena plugin;
|
||||||
private Messenger fallbackMessenger;
|
private Messenger fallbackMessenger;
|
||||||
@@ -237,6 +241,60 @@ public class CommandHandler implements CommandExecutor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, org.bukkit.command.Command bcmd, String alias, String[] args) {
|
||||||
|
// Only players can tab complete
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Player player = (Player) sender;
|
||||||
|
|
||||||
|
// If the player is in a convo (Setup Mode), bail
|
||||||
|
if (player.isConversing()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Grab the base argument.
|
||||||
|
String base = (args.length > 0 ? args[0] : "").toLowerCase();
|
||||||
|
|
||||||
|
// If there's no base argument, show it all
|
||||||
|
if (base.equals("")) {
|
||||||
|
return commands.values()
|
||||||
|
.stream()
|
||||||
|
.map(cmd -> cmd.getClass().getAnnotation(CommandInfo.class))
|
||||||
|
.filter(info -> info != null && player.hasPermission(info.permission()))
|
||||||
|
.map(CommandInfo::name)
|
||||||
|
.sorted()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reloads are terminal
|
||||||
|
if (base.equals("reload") || (base.equals("config") && args.length > 1 && args[1].equals("reload"))) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we only have the base, terminate
|
||||||
|
if (args.length == 1) {
|
||||||
|
return commands.values().stream()
|
||||||
|
.map(cmd -> cmd.getClass().getAnnotation(CommandInfo.class))
|
||||||
|
.filter(info -> info.name().startsWith(base))
|
||||||
|
.map(CommandInfo::name)
|
||||||
|
.sorted()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, find the command
|
||||||
|
List<Command> matches = getMatchingCommands(base);
|
||||||
|
if (matches.size() != 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// And pass completion
|
||||||
|
Command command = matches.get(0);
|
||||||
|
String[] params = trimFirstArg(args);
|
||||||
|
return command.tab(plugin.getArenaMaster(), player, params);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register all the commands directly.
|
* Register all the commands directly.
|
||||||
* This could also be done with a somewhat dirty classloader/resource reader
|
* This could also be done with a somewhat dirty classloader/resource reader
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ import com.garbagemule.MobArena.framework.Arena;
|
|||||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "disable",
|
name = "disable",
|
||||||
@@ -50,4 +55,20 @@ public class DisableCommand implements Command
|
|||||||
arena.getPlugin().saveConfig();
|
arena.getPlugin().saveConfig();
|
||||||
arena.getGlobalMessenger().tell(sender, "Arena '" + arena.configName() + "' " + ChatColor.RED + "disabled");
|
arena.getGlobalMessenger().tell(sender, "Arena '" + arena.configName() + "' " + ChatColor.RED + "disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getArenas();
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ import com.garbagemule.MobArena.framework.Arena;
|
|||||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "enable",
|
name = "enable",
|
||||||
@@ -50,4 +55,20 @@ public class EnableCommand implements Command
|
|||||||
arena.getPlugin().saveConfig();
|
arena.getPlugin().saveConfig();
|
||||||
arena.getGlobalMessenger().tell(sender, "Arena '" + arena.configName() + "' " + ChatColor.GREEN + "enabled");
|
arena.getGlobalMessenger().tell(sender, "Arena '" + arena.configName() + "' " + ChatColor.GREEN + "enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getArenas();
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,12 @@ import com.garbagemule.MobArena.commands.CommandInfo;
|
|||||||
import com.garbagemule.MobArena.framework.Arena;
|
import com.garbagemule.MobArena.framework.Arena;
|
||||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "force",
|
name = "force",
|
||||||
@@ -82,4 +88,38 @@ public class ForceCommand implements Command
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 2) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.length == 1) {
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
List<String> result = new ArrayList<>(2);
|
||||||
|
if ("end".startsWith(prefix)) {
|
||||||
|
result.add("end");
|
||||||
|
}
|
||||||
|
if ("start".startsWith(prefix)) {
|
||||||
|
result.add("start");
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!args[0].equals("end") && !args[0].equals("start")) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean start = args[0].equals("start");
|
||||||
|
String prefix = args[1].toLowerCase();
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getArenas();
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.filter(arena -> start != arena.isRunning())
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ import com.garbagemule.MobArena.framework.ArenaMaster;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "kick",
|
name = "kick",
|
||||||
pattern = "kick|kcik",
|
pattern = "kick|kcik",
|
||||||
@@ -36,4 +40,20 @@ public class KickCommand implements Command
|
|||||||
am.getGlobalMessenger().tell(bp, "You were kicked by " + sender.getName() + ".");
|
am.getGlobalMessenger().tell(bp, "You were kicked by " + sender.getName() + ".");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<Player> players = am.getAllPlayers();
|
||||||
|
|
||||||
|
return players.stream()
|
||||||
|
.filter(p -> p.getDisplayName().toLowerCase().startsWith(prefix))
|
||||||
|
.map(Player::getDisplayName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ import com.garbagemule.MobArena.util.inventory.InventoryManager;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "restore",
|
name = "restore",
|
||||||
pattern = "restore",
|
pattern = "restore",
|
||||||
@@ -38,4 +43,20 @@ public class RestoreCommand implements Command
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
Collection<? extends Player> players = am.getPlugin().getServer().getOnlinePlayers();
|
||||||
|
|
||||||
|
return players.stream()
|
||||||
|
.filter(p -> p.getDisplayName().toLowerCase().startsWith(prefix))
|
||||||
|
.map(Player::getDisplayName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,11 @@ import org.bukkit.block.Block;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "classchest",
|
name = "classchest",
|
||||||
@@ -58,4 +62,20 @@ public class ClassChestCommand implements Command {
|
|||||||
am.loadClasses();
|
am.loadClasses();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
Collection<ArenaClass> classes = am.getClasses().values();
|
||||||
|
|
||||||
|
return classes.stream()
|
||||||
|
.filter(cls -> cls.getConfigName().toLowerCase().startsWith(prefix))
|
||||||
|
.map(ArenaClass::getConfigName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ import com.garbagemule.MobArena.framework.Arena;
|
|||||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "editarena",
|
name = "editarena",
|
||||||
@@ -52,4 +57,20 @@ public class EditArenaCommand implements Command
|
|||||||
if (arena.inEditMode()) am.getGlobalMessenger().tell(sender, "Remember to turn it back off after editing!");
|
if (arena.inEditMode()) am.getGlobalMessenger().tell(sender, "Remember to turn it back off after editing!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getArenas();
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,11 @@ import com.garbagemule.MobArena.commands.CommandInfo;
|
|||||||
import com.garbagemule.MobArena.framework.Arena;
|
import com.garbagemule.MobArena.framework.Arena;
|
||||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "removearena",
|
name = "removearena",
|
||||||
@@ -34,4 +39,20 @@ public class RemoveArenaCommand implements Command
|
|||||||
am.getGlobalMessenger().tell(sender, "Arena '" + arena.configName() + "' deleted.");
|
am.getGlobalMessenger().tell(sender, "Arena '" + arena.configName() + "' deleted.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getArenas();
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,13 @@ import com.garbagemule.MobArena.framework.Arena;
|
|||||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "setting",
|
name = "setting",
|
||||||
@@ -95,4 +100,37 @@ public class SettingCommand implements Command {
|
|||||||
am.getGlobalMessenger().tell(sender, buffy.toString());
|
am.getGlobalMessenger().tell(sender, buffy.toString());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 2) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getArenas();
|
||||||
|
|
||||||
|
if (args.length == 1) {
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.filter(arena -> !arena.isRunning())
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
Arena arena = am.getArenaWithName(args[0]);
|
||||||
|
if (arena == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[1].toLowerCase();
|
||||||
|
|
||||||
|
Collection<String> settings = arena.getSettings().getValues(false).keySet();
|
||||||
|
|
||||||
|
return settings.stream()
|
||||||
|
.filter(s -> s.toLowerCase().startsWith(prefix))
|
||||||
|
.sorted()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "setup",
|
name = "setup",
|
||||||
@@ -88,6 +90,22 @@ public class SetupCommand implements Command, Listener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getArenas();
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The internal Setup class has three roles; it is the prompt and the
|
* The internal Setup class has three roles; it is the prompt and the
|
||||||
* abandon listener for the Conversation initiated by the setup command,
|
* abandon listener for the Conversation initiated by the setup command,
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ import com.garbagemule.MobArena.framework.ArenaMaster;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "join",
|
name = "join",
|
||||||
pattern = "j|jo.*|j.*n",
|
pattern = "j|jo.*|j.*n",
|
||||||
@@ -77,4 +81,22 @@ public class JoinCommand implements Command
|
|||||||
arena.playerJoin(player, player.getLocation());
|
arena.playerJoin(player, player.getLocation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getPermittedArenas(player);
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(Arena::isEnabled)
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.filter(arena -> arena.getRegion().isSetup())
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,11 @@ import com.garbagemule.MobArena.util.ClassChests;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "class",
|
name = "class",
|
||||||
pattern = "(pick)?class",
|
pattern = "(pick)?class",
|
||||||
@@ -101,4 +106,21 @@ public class PickClassCommand implements Command
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
Collection<ArenaClass> classes = am.getClasses().values();
|
||||||
|
|
||||||
|
return classes.stream()
|
||||||
|
.filter(cls -> cls.getConfigName().toLowerCase().startsWith(prefix))
|
||||||
|
.filter(cls -> cls.hasPermission(player))
|
||||||
|
.map(ArenaClass::getConfigName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ import com.garbagemule.MobArena.framework.ArenaMaster;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@CommandInfo(
|
@CommandInfo(
|
||||||
name = "spec",
|
name = "spec",
|
||||||
pattern = "s|spec.*",
|
pattern = "s|spec.*",
|
||||||
@@ -71,4 +75,22 @@ public class SpecCommand implements Command
|
|||||||
arena.playerSpec(player, player.getLocation());
|
arena.playerSpec(player, player.getLocation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tab(ArenaMaster am, Player player, String... args) {
|
||||||
|
if (args.length > 1) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
String prefix = args[0].toLowerCase();
|
||||||
|
|
||||||
|
List<Arena> arenas = am.getPermittedArenas(player);
|
||||||
|
|
||||||
|
return arenas.stream()
|
||||||
|
.filter(Arena::isEnabled)
|
||||||
|
.filter(arena -> arena.configName().toLowerCase().startsWith(prefix))
|
||||||
|
.filter(arena -> arena.getRegion().isSetup())
|
||||||
|
.map(Arena::configName)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user