diff options
Diffstat (limited to 'src/main/java/org/bukkit/command/defaults/GiveCommand.java')
-rw-r--r-- | src/main/java/org/bukkit/command/defaults/GiveCommand.java | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/command/defaults/GiveCommand.java b/src/main/java/org/bukkit/command/defaults/GiveCommand.java index eeac739a..6010ac86 100644 --- a/src/main/java/org/bukkit/command/defaults/GiveCommand.java +++ b/src/main/java/org/bukkit/command/defaults/GiveCommand.java @@ -1,5 +1,10 @@ package org.bukkit.command.defaults; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -7,8 +12,21 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.util.StringUtil; + +import com.google.common.collect.ImmutableList; public class GiveCommand extends VanillaCommand { + private static List<String> materials; + static { + ArrayList<String> materialList = new ArrayList<String>(); + for (Material material : Material.values()) { + materialList.add(material.name()); + } + Collections.sort(materialList); + materials = ImmutableList.copyOf(materialList); + } + public GiveCommand() { super("give"); this.description = "Gives the specified player a certain amount of items"; @@ -60,4 +78,45 @@ public class GiveCommand extends VanillaCommand { public boolean matches(String input) { return input.equalsIgnoreCase("give"); } + + @Override + public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { + Validate.notNull(sender, "Sender cannot be null"); + Validate.notNull(args, "Arguments cannot be null"); + Validate.notNull(alias, "Alias cannot be null"); + + if (args.length == 1) { + return super.tabComplete(sender, alias, args); + } + if (args.length == 2) { + final String arg = args[1]; + final List<String> materials = GiveCommand.materials; + List<String> completion = null; + + final int size = materials.size(); + int i = Collections.binarySearch(materials, arg, String.CASE_INSENSITIVE_ORDER); + + if (i < 0) { + // Insertion (start) index + i = -1 - i; + } + + for ( ; i < size; i++) { + String material = materials.get(i); + if (StringUtil.startsWithIgnoreCase(material, arg)) { + if (completion == null) { + completion = new ArrayList<String>(); + } + completion.add(material); + } else { + break; + } + } + + if (completion != null) { + return completion; + } + } + return ImmutableList.of(); + } } |