Stucked whit arraylist

Discussion in 'Plugin Development' started by XFarwar, Aug 12, 2014.

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

    XFarwar

    Hi, i'm stuck whit arraylist usign. I've tried this:
    Code:java
    1. ArrayList<ItemStack> KitSoldato = new ArrayList<ItemStack>();
    2. @Override
    3. public boolean onCommand(CommandSender sender, Command cmd, String label,
    4. String[] args) {
    5. Player p = (Player) sender;
    6. if(cmd.getName().equalsIgnoreCase("Kit-Soldato")){
    7. if(!(sender instanceof Player)){
    8. sender.sendMessage("Devi essere un giocatore per eseguire il comando.");
    9. return true;
    10. }
    11. KitSoldato.add(new ItemStack(Material.DIAMOND_SWORD, 1));
    12. KitSoldato.add(new ItemStack(Material.IRON_HELMET, 1));
    13. KitSoldato.add(new ItemStack(Material.IRON_CHESTPLATE, 1));
    14. KitSoldato.add(new ItemStack(Material.IRON_LEGGINGS, 1));
    15. KitSoldato.add(new ItemStack(Material.IRON_BOOTS, 1));
    16.  
    17. p.getInventory().clear();
    18. if(!(KitSoldato.contains(p.getName()))){
    19. }
    20. }
    21.  
    22. return false;
    23. }

    I can't go on, can you help me?
     
  2. Offline

    Gerov

    On the thing that checks if the sender is a player entity, add an else after that if statement, like this:

    Code:java
    1. ArrayList<ItemStack> KitSoldato = new ArrayList<ItemStack>();
    2. @Override
    3. public boolean onCommand(CommandSender sender, Command cmd, String label,
    4. String[] args) {
    5. Player p = (Player) sender;
    6. if(cmd.getName().equalsIgnoreCase("Kit-Soldato")){
    7. if(!(sender instanceof Player)){
    8. sender.sendMessage("Devi essere un giocatore per eseguire il comando.");
    9. return true;
    10. }else{
    11. KitSoldato.add(new ItemStack(Material.DIAMOND_SWORD, 1));
    12. KitSoldato.add(new ItemStack(Material.IRON_HELMET, 1));
    13. KitSoldato.add(new ItemStack(Material.IRON_CHESTPLATE, 1));
    14. KitSoldato.add(new ItemStack(Material.IRON_LEGGINGS, 1));
    15. KitSoldato.add(new ItemStack(Material.IRON_BOOTS, 1));
    16.  
    17. p.getInventory().clear();
    18. if(!(KitSoldato.contains(p.getName()))){
    19. }
    20. }
    21. }
    22.  
    23. return false;
    24. }


    I think that will work.
     
  3. Offline

    mine-care

    I think casting needs to be after the if not before it Gerov
     
  4. Offline

    Gerov



    Ah, I didn't notice that.
     
  5. Offline

    Necrodoom

    XFarwar first off, you cast and only then check if you can cast sender to player. First check, then cast.
    Also, you did not explain your issue.
     
  6. Offline

    XFarwar

    Code:
        ArrayList<ItemStack> KitSoldato = new ArrayList<ItemStack>();
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label,
                String[] args) {
            Player p = (Player) sender;
            if(cmd.getName().equalsIgnoreCase("Kit-Soldato")){
            if(!(sender instanceof Player)){
            sender.sendMessage("Devi essere un giocatore per eseguire il comando.");
            return true;
            }
            KitSoldato.add(new ItemStack(Material.DIAMOND_SWORD, 1));
            KitSoldato.add(new ItemStack(Material.IRON_HELMET, 1));
            KitSoldato.add(new ItemStack(Material.IRON_CHESTPLATE, 1));
            KitSoldato.add(new ItemStack(Material.IRON_LEGGINGS, 1));
            KitSoldato.add(new ItemStack(Material.IRON_BOOTS, 1));
           
            p.getInventory().clear();
            if(!(KitSoldato.contains(p.getName()))){
                //Take a kit.
                p.sendMessage("Kit preso.");
            }else{
                //You have already taken this kit.
                p.sendMessage("Hai già preso questo kit.");
            }
            }
           
            return false;
        }
    Not work... help

    I would that when I type /kit-soldato i receive stuff, but if i've already taken kit-soldato, plgin says me "already taken".

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
  7. Offline

    MCForger

    XFarwar
    Mi consiglia di spostare il ArrayList all'interno del vostro metodo di comando oppure quando la prossima Player utilizza il comando che riceveranno il doppio dell'importo. Quando si dà il kit si dimentica di aggiungere il nome del giocatore per l'elenco di nomi che hanno già riscattato il kit. Inoltre, prima di lanciare un mittente a un oggetto Player, aggiungere un'istruzione if controllo per assicurarsi che il mittente è un lettore instanceof.
     
  8. Offline

    XFarwar

    MCForger I don't have understand you, sorry xD, can you post simple code or explain?
     
  9. Offline

    mine-care

    Gerov no hard feelings its an honest mistake <3
     
  10. Offline

    XFarwar

    Upp

    Dump

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
  11. Offline

    Totom3

    Your ArrayList is storing ItemStacks and you are searching for a String in it. Your program will never find it, trust me.

    Also, MCForger is right. Each time a player will enter the command, it will add again all the items to the list, giving him 1/2/3/4/etc.. copies of the kit.
     
  12. Offline

    XFarwar

    So, how can I add kit only time for life?
     
  13. Offline

    XFarwar

    Code:
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label,
                String[] args) {
            Player p = (Player) sender;
            if(cmd.getName().equalsIgnoreCase("Kit-Soldato")){
            if(!(sender instanceof Player)){
            sender.sendMessage("Devi essere un giocatore per eseguire il comando.");
            return true;
            }
            ArrayList <ItemStack> KitSoldato = new ArrayList <ItemStack>();
     
            KitSoldato.add(new ItemStack(Material.DIAMOND_SWORD, 1));
            KitSoldato.add(new ItemStack(Material.IRON_HELMET, 1));
            KitSoldato.add(new ItemStack(Material.IRON_CHESTPLATE, 1));
            KitSoldato.add(new ItemStack(Material.IRON_LEGGINGS, 1));
            KitSoldato.add(new ItemStack(Material.IRON_BOOTS, 1));
           
            p.getInventory().clear();
            if(!(KitSoldato.contains(p.getName()))){
                p.sendMessage("Kit preso.");
            }else{
                //You have already taken this kit.
                p.sendMessage("Hai già preso questo kit.");
            }
            }
           
            return false;
        }
    Not work..
     
Thread Status:
Not open for further replies.

Share This Page