diff options
author | EvilSeph <evilseph@gmail.com> | 2012-10-30 04:53:42 -0400 |
---|---|---|
committer | EvilSeph <evilseph@gmail.com> | 2012-10-30 04:53:42 -0400 |
commit | 57ea30e1523a0cfdfdd00006d2c5946923005e43 (patch) | |
tree | 49340eab6843009d46099f1bd090d499e71ba2f0 /src/main | |
parent | 0290aee17effcc2a30fede1fe5ae7fac93da011f (diff) | |
download | bukkit-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.java | 1 | ||||
-rw-r--r-- | src/main/java/org/bukkit/command/defaults/ClearCommand.java | 116 |
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(); + } +} |