Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Цикл для Inventory.all в диспенсере

Discussion in 'Разработка плагинов для новичков' started by poiNt_3D, Apr 27, 2014.

Thread Status:
Not open for further replies.
  1. Автор темы
    poiNt_3D

    poiNt_3D Активный участник Пользователь

    Trophy Points:
    68
    Здравствуйте.
    Проблема такая: нужно посчитать все предметы определенного типа в диспенсере, затем удалить их.
    В документации нашел подходящий метод - all. Но возвращает он какой-то непонятный для меня тип: <Integer,? extends ItemStack> (я новичек в программировании).
    Поискав в гугле, нашел вроде-бы подходящий цикл, но он почему-то делает только один проход.
    Собственно, вот код:
    Code:
    public void onBlockDispenseEvent(BlockDispenseEvent event) {
        Block block = event.getBlock();
        Dispenser dispenser = (Dispenser) block.getState();
        Inventory inventory = dispenser.getInventory();
        ItemStack item = event.getItem();
        Integer amount = 1;
        for (Entry<Integer, ? extends ItemStack> pair : ((HashMap<Integer, ? extends ItemStack>)inventory.all(item)).entrySet()){
          System.out.println("Key: " + pair.getKey() + ", Value: " + pair.getValue());
          ItemStack stack = (ItemStack) pair.getValue();
         
          amount += stack.getAmount();
          inventory.clear(pair.getKey());
        }
       
        item.setAmount(amount);
        event.setItem(item);
       
    }
    Насколько я понимаю, цикл должен обходить все элементы HashMap, а выходит только один. Где тут ошибка?
    Вторая проблема заключается в том, что даже если тупо применить ко всему инвентарю clear, удалятся все stack'и, кроме того который был выброшен из диспенсера.
     
  2. Хостинг MineCraft
    <
  3. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    Если новичек - так вначале прочитай пару умных книжек, а потом уже спрашивай.
    Его можно взять и перебрать с помощью итератора, без всяких заумных HashMap.
    for(ItemStack is: inventory)
     
    Den_Abr and poiNt_3D like this.
  4. Автор темы
    poiNt_3D

    poiNt_3D Активный участник Пользователь

    Trophy Points:
    68
    Ок, спасибо за направление - почитаю про интераторы.
    Заумные книжки, я надеюсь, будут впереди. Но надо, чтобы зацепило программирование, а то если с них начать, можно вообще забить.[DOUBLEPOST=1398610127,1398610061][/DOUBLEPOST]Объясните пожалуйста про "? extends ItemStack" как это называется и где про это почитать? Как можно объявить наследование в возвращаемом типе?
     
    makssof likes this.
  5. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Так и объявить. Исходники bukkit на гитхабе.
     
  6. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    В разделе для новичков есть перечень литературы, которую было бы не плохо прочитать любому человеку, который хочется заниматься данным языком. Поэтому меньше левых вопросов - и вперёд за чтением.
     
  7. Автор темы
    poiNt_3D

    poiNt_3D Активный участник Пользователь

    Trophy Points:
    68
    Посмотрел я на вопросы, которые тут задают. Обычно всё гораздо проще. И ведь отвечают.
    А я не спросив гугл и не почтитав документацию Bukkit не стал бы спрашивать.
    Ну да ладно...
     
Thread Status:
Not open for further replies.

Share This Page