TabCompletion for commands
This commit is contained in:
parent
2957233fbf
commit
18b90dedc9
4 changed files with 99 additions and 7 deletions
2
pom.xml
2
pom.xml
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<plib.version>1.3</plib.version>
|
<plib.version>1.4-SNAPSHOT</plib.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<scm>
|
<scm>
|
||||||
|
|
|
@ -6,9 +6,11 @@ import java.util.List;
|
||||||
|
|
||||||
import de.jaschastarke.bukkit.lib.configuration.ConfigurableList;
|
import de.jaschastarke.bukkit.lib.configuration.ConfigurableList;
|
||||||
import de.jaschastarke.bukkit.lib.configuration.IToGeneric;
|
import de.jaschastarke.bukkit.lib.configuration.IToGeneric;
|
||||||
|
import de.jaschastarke.bukkit.lib.configuration.command.ITabComplete;
|
||||||
|
import de.jaschastarke.bukkit.lib.configuration.command.ListConfigValue;
|
||||||
import de.jaschastarke.configuration.InvalidValueException;
|
import de.jaschastarke.configuration.InvalidValueException;
|
||||||
|
|
||||||
public class CmdBlockList extends ArrayList<ICmdBlockEntry> implements ConfigurableList<ICmdBlockEntry>, IToGeneric {
|
public class CmdBlockList extends ArrayList<ICmdBlockEntry> implements ConfigurableList<ICmdBlockEntry>, IToGeneric, ITabComplete {
|
||||||
private static final long serialVersionUID = -125544131527849084L;
|
private static final long serialVersionUID = -125544131527849084L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -46,4 +48,17 @@ public class CmdBlockList extends ArrayList<ICmdBlockEntry> implements Configura
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> tabComplete(String[] args, String[] chain) {
|
||||||
|
if (args.length > 0 && chain.length > 0) {
|
||||||
|
if (chain[chain.length - 1].equalsIgnoreCase(ListConfigValue.REMOVE)) {
|
||||||
|
List<String> hints = new ArrayList<String>();
|
||||||
|
for (ICmdBlockEntry s : this) {
|
||||||
|
if (s.toString().toLowerCase().startsWith(args[0].toLowerCase()))
|
||||||
|
hints.add(s.toString());
|
||||||
|
}
|
||||||
|
return hints;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,12 +11,14 @@ import org.bukkit.material.MaterialData;
|
||||||
|
|
||||||
import de.jaschastarke.bukkit.lib.configuration.ConfigurableList;
|
import de.jaschastarke.bukkit.lib.configuration.ConfigurableList;
|
||||||
import de.jaschastarke.bukkit.lib.configuration.IToGeneric;
|
import de.jaschastarke.bukkit.lib.configuration.IToGeneric;
|
||||||
|
import de.jaschastarke.bukkit.lib.configuration.command.ITabComplete;
|
||||||
|
import de.jaschastarke.bukkit.lib.configuration.command.ListConfigValue;
|
||||||
import de.jaschastarke.bukkit.lib.items.ItemUtils;
|
import de.jaschastarke.bukkit.lib.items.ItemUtils;
|
||||||
import de.jaschastarke.bukkit.lib.items.MaterialDataNotRecognizedException;
|
import de.jaschastarke.bukkit.lib.items.MaterialDataNotRecognizedException;
|
||||||
import de.jaschastarke.bukkit.lib.items.MaterialNotRecognizedException;
|
import de.jaschastarke.bukkit.lib.items.MaterialNotRecognizedException;
|
||||||
import de.jaschastarke.configuration.InvalidValueException;
|
import de.jaschastarke.configuration.InvalidValueException;
|
||||||
|
|
||||||
public class BlackList extends ArrayList<BlackList.Blacklisted> implements ConfigurableList<BlackList.Blacklisted>, IToGeneric {
|
public class BlackList extends ArrayList<BlackList.Blacklisted> implements ConfigurableList<BlackList.Blacklisted>, IToGeneric, ITabComplete {
|
||||||
private static final long serialVersionUID = -3701659163474405152L;
|
private static final long serialVersionUID = -3701659163474405152L;
|
||||||
|
|
||||||
public static class Blacklisted {
|
public static class Blacklisted {
|
||||||
|
@ -30,9 +32,9 @@ public class BlackList extends ArrayList<BlackList.Blacklisted> implements Confi
|
||||||
md = ItemUtils.parseMaterial(rep);
|
md = ItemUtils.parseMaterial(rep);
|
||||||
hasData = rep.contains(ItemUtils.MATERIAL_DATA_SEP);
|
hasData = rep.contains(ItemUtils.MATERIAL_DATA_SEP);
|
||||||
} catch (MaterialNotRecognizedException e) {
|
} catch (MaterialNotRecognizedException e) {
|
||||||
throw new InvalidValueException(e);
|
throw new InvalidValueException("Invalid Material: " + rep, e);
|
||||||
} catch (MaterialDataNotRecognizedException e) {
|
} catch (MaterialDataNotRecognizedException e) {
|
||||||
throw new InvalidValueException(e);
|
throw new InvalidValueException("Invalid Material with Data: " + rep, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public Blacklisted(Material m) {
|
public Blacklisted(Material m) {
|
||||||
|
@ -144,4 +146,27 @@ public class BlackList extends ArrayList<BlackList.Blacklisted> implements Confi
|
||||||
public void clearSettings() {
|
public void clearSettings() {
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> tabComplete(String[] args, String[] chain) {
|
||||||
|
if (args.length > 0 && chain.length > 0) {
|
||||||
|
List<String> hints = new ArrayList<String>();
|
||||||
|
String action = chain[chain.length - 1];
|
||||||
|
if (action.equalsIgnoreCase(ListConfigValue.ADD)) {
|
||||||
|
for (Material m : Material.values()) {
|
||||||
|
if (m.name().toLowerCase().startsWith(args[0].toLowerCase())) {
|
||||||
|
hints.add(m.name());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (action.equalsIgnoreCase(ListConfigValue.REMOVE)) {
|
||||||
|
for (Blacklisted bl : this) {
|
||||||
|
if (bl.toString().toLowerCase().startsWith(args[0].toLowerCase())) {
|
||||||
|
hints.add(bl.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hints;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.regions;
|
package de.jaschastarke.minecraft.limitedcreative.regions;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
@ -18,8 +22,13 @@ import de.jaschastarke.bukkit.lib.commands.BukkitCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.CommandContext;
|
import de.jaschastarke.bukkit.lib.commands.CommandContext;
|
||||||
import de.jaschastarke.bukkit.lib.commands.CommandException;
|
import de.jaschastarke.bukkit.lib.commands.CommandException;
|
||||||
import de.jaschastarke.bukkit.lib.commands.HelpCommand;
|
import de.jaschastarke.bukkit.lib.commands.HelpCommand;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.ICommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.IHelpDescribed;
|
import de.jaschastarke.bukkit.lib.commands.IHelpDescribed;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.MethodCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.MissingPermissionCommandException;
|
import de.jaschastarke.bukkit.lib.commands.MissingPermissionCommandException;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.TabCompletionHelper;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.TabCompletionHelper.Completer;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.TabCompletionHelper.Context;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
||||||
import de.jaschastarke.bukkit.lib.commands.parser.DefinedParameterParser;
|
import de.jaschastarke.bukkit.lib.commands.parser.DefinedParameterParser;
|
||||||
|
@ -53,6 +62,7 @@ public class RegionsCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
this.help = this.getDefaultHelpCommand();
|
this.help = this.getDefaultHelpCommand();
|
||||||
this.mod = mod;
|
this.mod = mod;
|
||||||
this.wg = (WorldGuardPlugin) mod.getPlugin().getServer().getPluginManager().getPlugin(WorldGuardIntegration.PLUGIN_NAME);
|
this.wg = (WorldGuardPlugin) mod.getPlugin().getServer().getPluginManager().getPlugin(WorldGuardIntegration.PLUGIN_NAME);
|
||||||
|
fullfillTabCompletion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -100,6 +110,48 @@ public class RegionsCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
return RegionPermissions.REGION.getPermission(subPerm);
|
return RegionPermissions.REGION.getPermission(subPerm);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
protected void fullfillTabCompletion() {
|
||||||
|
for (ICommand cmd : handler.getCommands()) {
|
||||||
|
if (cmd instanceof MethodCommand) {
|
||||||
|
if (cmd.getName().equals("info")) {
|
||||||
|
((MethodCommand) cmd).getCompleter().add(TabCompletionHelper.forUsageLine("[region]"));
|
||||||
|
}
|
||||||
|
for (TabCompletionHelper c : ((MethodCommand) cmd).getCompleter()) {
|
||||||
|
c.setCompleter("region", new RegionCompleter());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class RegionCompleter implements Completer {
|
||||||
|
@Override
|
||||||
|
public List<String> get(Context context, String arg) {
|
||||||
|
int idx = -1;
|
||||||
|
String[] args = context.getHelper().getArguments();
|
||||||
|
for (int i = 0; i < args.length; i++) {
|
||||||
|
if (args[i].equals("world")) {
|
||||||
|
idx = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
World w = context.getCommandContext().isPlayer() ? context.getCommandContext().getPlayer().getWorld() : null;
|
||||||
|
if (idx > -1 && context.getArgument(idx) != null)
|
||||||
|
w = Bukkit.getWorld(context.getArgument(idx));
|
||||||
|
if (w != null) {
|
||||||
|
RegionManager mgr = getWorldGuard().getGlobalRegionManager().get(w);
|
||||||
|
if (mgr != null) {
|
||||||
|
List<String> hints = new ArrayList<String>();
|
||||||
|
for (String rId : mgr.getRegions().keySet()) {
|
||||||
|
if (rId.toLowerCase().startsWith(arg.toLowerCase()))
|
||||||
|
hints.add(rId);
|
||||||
|
}
|
||||||
|
return hints;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the Flag of a region to a new value. If no value given, the flag is removed.
|
* Sets the Flag of a region to a new value. If no value given, the flag is removed.
|
||||||
* -g sets the affected group of the flag, instead the flag (equivalent to using flag-group as flag-name)
|
* -g sets the affected group of the flag, instead the flag (equivalent to using flag-group as flag-name)
|
||||||
|
@ -165,7 +217,7 @@ public class RegionsCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
|
|
||||||
@IsCommand("info")
|
@IsCommand("info")
|
||||||
//@NeedsPermission("region")
|
//@NeedsPermission("region")
|
||||||
@Usages("[world] [id]")
|
@Usages("[world] [region]")
|
||||||
public boolean getInfo(CommandContext context, String... args) throws CommandException {
|
public boolean getInfo(CommandContext context, String... args) throws CommandException {
|
||||||
DefinedParameterParser params = new DefinedParameterParser(args, new String[]{"s"}, 1);
|
DefinedParameterParser params = new DefinedParameterParser(args, new String[]{"s"}, 1);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue