Bukkit  1.4.7-R1.0
 All Classes Namespaces Files Functions Variables Enumerator Pages
GiveCommand.java
Go to the documentation of this file.
1 package org.bukkit.command.defaults;
2 
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6 
7 import org.apache.commons.lang.Validate;
8 import org.bukkit.Bukkit;
9 import org.bukkit.ChatColor;
10 import org.bukkit.Material;
11 import org.bukkit.command.Command;
12 import org.bukkit.command.CommandSender;
13 import org.bukkit.entity.Player;
14 import org.bukkit.inventory.ItemStack;
15 import org.bukkit.util.StringUtil;
16 
17 import com.google.common.collect.ImmutableList;
18 
19 public class GiveCommand extends VanillaCommand {
20  private static List<String> materials;
21  static {
22  ArrayList<String> materialList = new ArrayList<String>();
23  for (Material material : Material.values()) {
24  materialList.add(material.name());
25  }
26  Collections.sort(materialList);
27  materials = ImmutableList.copyOf(materialList);
28  }
29 
30  public GiveCommand() {
31  super("give");
32  this.description = "Gives the specified player a certain amount of items";
33  this.usageMessage = "/give <player> <item> [amount [data]]";
34  this.setPermission("bukkit.command.give");
35  }
36 
37  @Override
38  public boolean execute(CommandSender sender, String currentAlias, String[] args) {
39  if (!testPermission(sender)) return true;
40  if ((args.length < 2)) {
41  sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage);
42  return false;
43  }
44 
45  Player player = Bukkit.getPlayerExact(args[0]);
46 
47  if (player != null) {
48  Material material = Material.matchMaterial(args[1]);
49 
50  if (material != null) {
51  int amount = 1;
52  short data = 0;
53 
54  if (args.length >= 3) {
55  amount = this.getInteger(sender, args[2], 1, 64);
56 
57  if (args.length >= 4) {
58  try {
59  data = Short.parseShort(args[3]);
60  } catch (NumberFormatException ex) {}
61  }
62  }
63 
64  player.getInventory().addItem(new ItemStack(material, amount, data));
65 
66  Command.broadcastCommandMessage(sender, "Gave " + player.getName() + " some " + material.getId() + " (" + material + ")");
67  } else {
68  sender.sendMessage("There's no item called " + args[1]);
69  }
70  } else {
71  sender.sendMessage("Can't find player " + args[0]);
72  }
73 
74  return true;
75  }
76 
77  @Override
78  public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
79  Validate.notNull(sender, "Sender cannot be null");
80  Validate.notNull(args, "Arguments cannot be null");
81  Validate.notNull(alias, "Alias cannot be null");
82 
83  if (args.length == 1) {
84  return super.tabComplete(sender, alias, args);
85  }
86  if (args.length == 2) {
87  final String arg = args[1];
88  final List<String> materials = GiveCommand.materials;
89  List<String> completion = null;
90 
91  final int size = materials.size();
92  int i = Collections.binarySearch(materials, arg, String.CASE_INSENSITIVE_ORDER);
93 
94  if (i < 0) {
95  // Insertion (start) index
96  i = -1 - i;
97  }
98 
99  for ( ; i < size; i++) {
100  String material = materials.get(i);
101  if (StringUtil.startsWithIgnoreCase(material, arg)) {
102  if (completion == null) {
103  completion = new ArrayList<String>();
104  }
105  completion.add(material);
106  } else {
107  break;
108  }
109  }
110 
111  if (completion != null) {
112  return completion;
113  }
114  }
115  return ImmutableList.of();
116  }
117 }