Advertisement
tahg

Untitled

Jan 7th, 2012
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.48 KB | None | 0 0
  1. package org.bukkit.command.defaults;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.ChatColor;
  5. import org.bukkit.Material;
  6. import org.bukkit.command.Command;
  7. import org.bukkit.command.CommandSender;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.inventory.ItemStack;
  10. import org.bukkit.util.Java15Compat;
  11.  
  12. import java.util.regex.Matcher;
  13. import java.util.regex.Pattern;
  14.  
  15. public class GiveCommand extends VanillaCommand {
  16.     public GiveCommand() {
  17.         super("give");
  18.         this.description = "Gives the specified player a certain amount of items";
  19.         this.usageMessage = "/give <player> <item> [:|amount] [:|data]";
  20.         this.setPermission("bukkit.command.give");
  21.     }
  22.  
  23.     @Override
  24.     public boolean execute(CommandSender sender, String currentAlias, String[] args) {
  25.         if (!testPermission(sender)) return true;
  26.  
  27.         if ((args.length < 2) || (args.length > 3)) {
  28.             sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage);
  29.             return false;
  30.         }
  31.  
  32.         Player player = Bukkit.getPlayerExact(args[0]);
  33.  
  34.         if (player != null) {
  35.             String argString = join(Java15Compat.Arrays_copyOfRange(args, 1, args.length), " ");
  36.             Pattern pattern = Pattern.compile("([0-9A-Za-z_]+) *(: *[0-9]+|[0-9]+)? *([0-9]+)?");
  37.             //Pattern pattern = Pattern.compile("^ *([0-9]+) *(:| +[0-9]+)? *(:| +[0-9]+)? *$");
  38.             Matcher matcher = pattern.matcher(argString);
  39.  
  40.             if (matcher.find()) {
  41.                 String materialString = "";
  42.                 String dataString = "";
  43.                 String amountString = "";
  44.                 Material material = null;
  45.                 Byte data = new Byte((byte)0);
  46.                 int amount = 1;
  47.  
  48.                 if (matcher.start(1) > -1) {
  49.                     materialString = argString.substring(matcher.start(1), matcher.end(1));
  50.                 }
  51.                 if (matcher.start(2) > -1) {
  52.                     String arg2 = argString.substring(matcher.start(2), matcher.end(2));
  53.                     boolean vanilla = true;
  54.                     if (arg2.startsWith(":")) vanilla = false;
  55.                     if (vanilla) amountString = argString.substring(matcher.start(2), matcher.end(2));
  56.                     else dataString = arg2.substring(1).trim();
  57.  
  58.                     if (matcher.start(3) > -1) {
  59.                         if (vanilla) dataString = argString.substring(matcher.start(3), matcher.end(3));
  60.                         else amountString = argString.substring(matcher.start(3), matcher.end(3));
  61.                     }
  62.                 }
  63.  
  64.                 material = Material.matchMaterial(materialString);
  65.  
  66.                 try {
  67.                     data = new Byte(dataString);
  68.                 } catch (NumberFormatException e) {
  69.                 }
  70.                 try {
  71.                     amount = Integer.parseInt(amountString);
  72.                 } catch (NumberFormatException e) {
  73.                 }
  74.  
  75.                 if (material != null) {
  76.                     if (material == Material.AIR) {
  77.                         sender.sendMessage("Can't give air.");
  78.                         return true;
  79.                     }
  80.                     Command.broadcastCommandMessage(sender, "Giving " + player.getName() + " some " + material.getId() + " (" + material + ")");
  81.  
  82.                     if (amount < 1) amount = 1;
  83.                     if (amount > 64) amount = 64;
  84.  
  85.                     player.getInventory().addItem(new ItemStack(material, amount, (short)0, data));
  86.                 } else {
  87.                     sender.sendMessage("There's no item called " + args[1]);
  88.                 }
  89.             } else {
  90.                 // The regex didn't match.
  91.                 sendUsageMessage(sender);
  92.                 return false;
  93.             }
  94.         } else {
  95.             sender.sendMessage("Can't find user " + args[0]);
  96.         }
  97.  
  98.         return true;
  99.     }
  100.  
  101.     private void sendUsageMessage(CommandSender sender) {
  102.         sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage);
  103.     }
  104.  
  105.     @Override
  106.     public boolean matches(String input) {
  107.         return input.startsWith("give ") || input.equalsIgnoreCase("give");
  108.     }
  109.  
  110.     private static String join(String[] s, String delimiter) {
  111.         if (s.length == 0) return "";
  112.         StringBuffer buffer = new StringBuffer(s[0]);
  113.         for (int i = 1; i < s.length; i++ ) {
  114.             buffer.append(delimiter).append(s[i]);
  115.         }
  116.         return buffer.toString();
  117.     }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement