summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/bukkit/command/defaults/GiveCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/bukkit/command/defaults/GiveCommand.java')
-rw-r--r--src/main/java/org/bukkit/command/defaults/GiveCommand.java59
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();
+ }
}