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

Помогите Не работает замена предмета при клике

Тема в разделе "Разработка плагинов для новичков", создана пользователем MasterCapeXD, 7 янв 2017.

  1. Автор темы
    MasterCapeXD

    MasterCapeXD Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    MasterCapeXD
    Мне нужно, чтобы при каждом клике на алмаз он удалялся, если есть больше одного, то убирало по одному.При клике алмазов уменьшается, а вот когда алмаз один остался,то не удаляет.Проблема в том, что алмазы- предмет обмена.Их можно обменивать на монетки, и можно дюпать когда у игрока 1 алмаз.

    ВОТ КОД

    Код:
        @EventHandler
        public void onClick(PlayerInteractEvent e)
        {
          
            int diamonds = e.getItem().getAmount();
          
            Player ep = e.getPlayer();
          
            if(e.getItem().getType() == Material.DIAMOND)
            {
              
                if(e.getAction() == Action.RIGHT_CLICK_AIR)
                {
                    if(e.getItem().getAmount() == 1) //-=-=-=-=-=-=-=-=-
                    {
                                                               //ТУТ НЕ РАБОТАЕТ!
                        ep.getItemInHand().setType(Material.AIR) //-=-=-=-=-=-=-=-=-
                      
                    } else
                    {
                        e.getItem().setAmount(diamonds - 1);
                    }
                  
                }
              
            }
          
        }
    Помогите пожалуйста.Что с этим мне делать?
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    MasterCapeXD

    MasterCapeXD Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    MasterCapeXD
    Я кстати какже пробовал через ивент, тоже не сработало.
    Вот так
    Код:
    e.getItem().setType(Material.AIR);
     
  4. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    ep.getInventory().setItem(ep.getInventory().getHeldItemSlot(), new ItemStack(Material.AIR));
     
  5. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Я так же юзаю, у меня робит.

    .getInventory().setItemInMainHand(new ItemStack(Material.AIR));
    .getInventory().setItemInOffHand(new ItemStack(Material.AIR));
     
  6. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    уу, есть более простые методы. пора заново прошарить доки. с 1.5.2 не чесал их (пфф, не буду)
     
  7. _TheZit445_

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

    Баллы:
    66
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Код:
    @EventHandler
        public void onClick(PlayerInteractEvent e){
           Player p = e.getPlayer();
           ItemStack i = p.getItemInHand();
           if (i.getAmount()>1) i.setAmount(i.getAmount()-1);
              else p.getInventory().remove(i);
       }
     
  8. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    а теперь положи в разные слоты по одному алмазу и посмотри что будет
     
  9. _TheZit445_

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

    Баллы:
    66
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    это под API 1.8, я лишь дал наводку, пусть сам под себя делает
     
  10. Zнамя Юности

    Zнамя Юности Активный участник Пользователь

    Баллы:
    46
    ep.setItemInHand(new ItemStack(Material.AIR))
     
  11. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    твой код вне зависимости от версии неверный, ибо удаляет все стаки эквивалентные i. т.е. все стаки где будет лежать один алмаз удалятся.
     
  12. Автор темы
    MasterCapeXD

    MasterCapeXD Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    MasterCapeXD
    Спасибо всем.Дали много вариантов, буду подбирать:). (Больше всего мне нравится код пользователя Zнамя Юности, простой и понятньій :good:)
     
  13. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Так у всех тоже самое, кроме неправильного ремове.
     
  14. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    афигенно. выбрал самый неверный вариант.

    удачи
     
  15. Автор темы
    MasterCapeXD

    MasterCapeXD Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    MasterCapeXD
    Будет неверным, подберу другой)

    И самым неверным мне кажется этот, не?
    1. @EventHandler
    2. public void onClick(PlayerInteractEvent e){
    3. Player p = e.getPlayer();
    4. ItemStack i = p.getItemInHand();
    5. if (i.getAmount()>1) i.setAmount(i.getAmount()-1);
    6. else p.getInventory().remove(i);
    7. }
     
  16. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Да он верный, только под оверстарый майн.
     
  17. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    сорян перепутал их.
    мне показалось что знамя его и предложил

    Ну это да.

    Теперь в манйе и вторая рука тоже функционирует, так что Deprecated
     
  18. Автор темы
    MasterCapeXD

    MasterCapeXD Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    MasterCapeXD
    на 1.8 не пойдет разве?
     
  19. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    ну там только он и запашет, там еще одна рука, слоты для щитов не добавлили.

    Вот только почему 1.8? Го сразу 1.4.7
     
  20. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Во всех не понятных ситуациях - обновляй инвентарь (вообще не рекомендуется, но если уже ничего не помогает, то почему бы и нет).
     
  21. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    setItemInMainHand работает без касяков.
     

Поделиться этой страницей