summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorEvilSeph <evilseph@gmail.com>2012-10-30 04:53:42 -0400
committerEvilSeph <evilseph@gmail.com>2012-10-30 04:53:42 -0400
commit57ea30e1523a0cfdfdd00006d2c5946923005e43 (patch)
tree49340eab6843009d46099f1bd090d499e71ba2f0 /src/main
parent0290aee17effcc2a30fede1fe5ae7fac93da011f (diff)
downloadbukkit-57ea30e1523a0cfdfdd00006d2c5946923005e43.tar
bukkit-57ea30e1523a0cfdfdd00006d2c5946923005e43.tar.gz
bukkit-57ea30e1523a0cfdfdd00006d2c5946923005e43.tar.lz
bukkit-57ea30e1523a0cfdfdd00006d2c5946923005e43.tar.xz
bukkit-57ea30e1523a0cfdfdd00006d2c5946923005e43.zip
Add default Clear command. Partially fixes BUKKIT-2671
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/bukkit/command/SimpleCommandMap.java1
-rw-r--r--src/main/java/org/bukkit/command/defaults/ClearCommand.java116
2 files changed, 117 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java
index 292f7686..7e007c57 100644
--- a/src/main/java/org/bukkit/command/SimpleCommandMap.java
+++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java
@@ -56,6 +56,7 @@ public class SimpleCommandMap implements CommandMap {
fallbackCommands.add(new DifficultyCommand());
fallbackCommands.add(new WeatherCommand());
fallbackCommands.add(new SpawnpointCommand());
+ fallbackCommands.add(new ClearCommand());
}
public SimpleCommandMap(final Server server) {
diff --git a/src/main/java/org/bukkit/command/defaults/ClearCommand.java b/src/main/java/org/bukkit/command/defaults/ClearCommand.java
new file mode 100644
index 00000000..b5f2e3ef
--- /dev/null
+++ b/src/main/java/org/bukkit/command/defaults/ClearCommand.java
@@ -0,0 +1,116 @@
+package org.bukkit.command.defaults;
+
+import com.google.common.collect.ImmutableList;
+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.util.StringUtil;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class ClearCommand 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 ClearCommand() {
+ super("clear");
+ this.description = "Clears the player's inventory. Can specify item and data filters too.";
+ this.usageMessage = "/clear <player> [item] [data]";
+ this.setPermission("bukkit.command.clear");
+ }
+
+ @Override
+ public boolean execute(CommandSender sender, String currentAlias, String[] args) {
+ if (!testPermission(sender)) return true;
+
+ Player player = null;
+ if (args.length > 0) {
+ player = Bukkit.getPlayer(args[0]);
+ } else if (sender instanceof Player) {
+ player = (Player) sender;
+ }
+
+ if (player != null) {
+ int id;
+
+ if (args.length > 1 && !(args[1].equals("-1"))) {
+ Material material = Material.matchMaterial(args[1]);
+ if (material == null) {
+ sender.sendMessage(ChatColor.RED + "There's no item called " + args[1]);
+ return false;
+ }
+
+ id = material.getId();
+ } else {
+ id = -1;
+ }
+
+ int data = args.length >= 3 ? getInteger(sender, args[2], 0) : -1;
+ int count = player.getInventory().clear(id, data);
+ Command.broadcastCommandMessage(sender, "Cleared the inventory of " + player.getDisplayName() + ", removing " + count + " items");
+ } else {
+ sender.sendMessage(ChatColor.RED + "Can't find user " + args[0]);
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean matches(String input) {
+ return input.equalsIgnoreCase("clear");
+ }
+
+ @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 = ClearCommand.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();
+ }
+}