java.lang.ArrayIndexOutOfBoundsException: 0 HELP! Please!

Discussion in 'Plugin Development' started by mrcreeper242, Apr 30, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    mrcreeper242

    HELP! I'm getting this error on my plugin:
    Code:
    Caused by:  java.lang.ArrayIndexOutOfBoundsException: 0
       at me.mrcreeper242.Ticket.onCommand<Ticket.java:41>~[?:?]
    at org.bukkit.command.PluginCommand.execute<PluginCommand.java:44> ~[serve.jar:git-Spigot-1649]
    
    Here is my plugin code:
    Code:
    package me.mrcreeper242;
    
    import java.util.ArrayList;
    import java.util.List;
    
    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.inventory.meta.ItemMeta;
    import org.bukkit.metadata.FixedMetadataValue;
    import org.bukkit.metadata.MetadataValue;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Ticket extends JavaPlugin{
    
        private List<Player> cantDoCommand = new ArrayList<Player>();
       
        private final String KEY = "Ticket";
       
        CountDown d = new CountDown();
       
        @Override
        public void onEnable() {
           
        }
           
        @Override
        public void onDisable() {
           
        }
       
       
       
          public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
              Player p = (Player) sender;
              Player s = Bukkit.getPlayer(args[0]);
              ItemStack item = p.getItemInHand();
              ItemMeta meta = item.getItemMeta();
                   ItemStack i = new ItemStack(Material.PAPER, 1);
                  ItemMeta itemMeta = i.getItemMeta();
                  itemMeta.setDisplayName(ChatColor.BLUE + "Ticket");
                  i.setItemMeta(itemMeta);
                  if(commandLabel.equalsIgnoreCase("Ticket")) {
                      if(p.hasPermission("ticket.use")) {
                 
    
                 
                  if((sender instanceof Player)) {
                      if(!cantDoCommand.contains(p)) {
                          p.getInventory().addItem(new ItemStack(i));
                          cantDoCommand.add(p);
                          d.setList(cantDoCommand);
                          d.setPlayer(p);
                          p.sendMessage(ChatColor.GREEN + "Here is your ticket!");
                          new Thread(d).start();
                      } else if(cantDoCommand.contains(p)) {
                          p.sendMessage(ChatColor.RED + "You can only use this command once every two days.");
                      }
                  }
                 
                      } else if(!p.hasPermission("ticket.use")) {
                          p.sendMessage("You need a donator rank to claim a ticket!");
                      }
             
              } else if(commandLabel.equalsIgnoreCase("TicketRegister")) {
                  if(p.getInventory().contains(Material.PAPER)) {
                  if(item.hasItemMeta()){
                      if(meta.getDisplayName().contains((ChatColor.stripColor((ChatColor.BLUE + "Ticket"))))){
                          p.sendMessage(ChatColor.GREEN + "Registered!");
                          p.getInventory().removeItem(new ItemStack(Material.PAPER));
                          setMetadata(p, KEY, p, this);
                     
                  }
              } else if(!item.hasItemMeta()) {
                  p.sendMessage(ChatColor.RED + "You need a ticket to register!");
              }
                 
              }
                 
              } else if(commandLabel.equalsIgnoreCase("TicketCheck")) {
                  if(p.hasPermission("ticket.check")) {
                  if(args.length == 1) {
                  if(hasMetadata(s, KEY, this)) {
                      p.sendMessage(ChatColor.GREEN + "Player has registered a ticket!");
                      p.removeMetadata(KEY, this);
                  } else if(!hasMetadata(s, KEY, this)) {
                      p.sendMessage(ChatColor.RED+"Player has not registered a ticket!");
    
                  }
                 
              } else {
                  p.sendMessage(ChatColor.RED + "Usage:");
                  p.sendMessage(ChatColor.RED + "/ticketcheck <Player Name>");
              }
                 
              } else {
                  p.sendMessage(ChatColor.RED + "You do not have permission");
              }
                 
              }
                
                 
              
                return true;
            }
         
         
          class CountDown implements Runnable {
             
              public Player player = null;
              public List<Player> cantDoCommand = new ArrayList<Player>();
             
             
              public void setPlayer(Player player) {
                  this.player = player;
              }
             
              public void setList(List<Player> list) {
                  cantDoCommand = list;
              }
             
              public List<Player> getList() {
                  return cantDoCommand;
              }
    
            public void run() {
                try {
                    Thread.sleep(5000);
                    cantDoCommand.remove(player);
                   
                }catch(Exception ingored) {
                   
                }
               
            }
             
          }
         
          public void setMetadata(Player player, String key, Player value, Plugin plugin) {
              player.setMetadata(key, new FixedMetadataValue(plugin, value));
          }
         
          public Player getMetadata(Player player, String key, Plugin plugin) {
              List<MetadataValue> values = player.getMetadata(key);
              for(MetadataValue val: values) {
                  if(val.getOwningPlugin().getDescription().getName().equals(plugin.getDescription().getName())) {
                      return (Player) val.value();
                  }
              }
             
             
              return null;
          }
         
          public boolean hasMetadata(Player player, String key, Plugin plugin) {
              List<MetadataValue> values = player.getMetadata(key);
              for(MetadataValue val: values) {
                  if(val.getOwningPlugin().getDescription().getName().equals(plugin.getDescription().getName())) {
                      return true;
                  }
              }
             
             
              return false;
             
          }
         
    }
    
     
  2. Offline

    Koobaczech

    Look, argument [0] is the first argument you pass in. But your code does not check how many arguments are being passed in. So if you ran /ticket, and didn't give an argument, well. You get errors. Write your code properly, check for argument count, check if argument[0] is even a player, check if that player is online, etc. Also add those checks IN ORDER, so first do /ticket, then check argument count, then check if argument 0 is player, then act upon that player accordingly
     
Thread Status:
Not open for further replies.

Share This Page