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; 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 materials; static { ArrayList materialList = new ArrayList(); 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"; this.usageMessage = "/give [amount [data]]"; this.setPermission("bukkit.command.give"); } @Override public boolean execute(CommandSender sender, String currentAlias, String[] args) { if (!testPermission(sender)) return true; if ((args.length < 2)) { sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); return false; } Player player = Bukkit.getPlayerExact(args[0]); if (player != null) { Material material = Material.matchMaterial(args[1]); if (material != null) { int amount = 1; short data = 0; if (args.length >= 3) { amount = this.getInteger(sender, args[2], 1, 64); if (args.length >= 4) { try { data = Short.parseShort(args[3]); } catch (NumberFormatException ex) {} } } player.getInventory().addItem(new ItemStack(material, amount, data)); Command.broadcastCommandMessage(sender, "Gave " + player.getName() + " some " + material.getId() + " (" + material + ")"); } else { sender.sendMessage("There's no item called " + args[1]); } } else { sender.sendMessage("Can't find player " + args[0]); } return true; } @Override public boolean matches(String input) { return input.equalsIgnoreCase("give"); } @Override public List 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 materials = GiveCommand.materials; List 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(); } completion.add(material); } else { break; } } if (completion != null) { return completion; } } return ImmutableList.of(); } }