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

MasterCapeXD

Активный участник
Пользователь
Баллы
66
Имя в 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);
                }
              
            }
          
        }
      
    }

Помогите пожалуйста.Что с этим мне делать?
 
Мне нужно, чтобы при каждом клике на алмаз он удалялся, если есть больше одного, то убирало по одному.При клике алмазов уменьшается, а вот когда алмаз один остался,то не удаляет.Проблема в том, что алмазы- предмет обмена.Их можно обменивать на монетки, и можно дюпать когда у игрока 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);
                }
             
            }
         
        }
     
    }

Помогите пожалуйста.Что с этим мне делать?

Я кстати какже пробовал через ивент, тоже не сработало.
Вот так
Код:
e.getItem().setType(Material.AIR);
 
ep.getInventory().setItem(ep.getInventory().getHeldItemSlot(), new ItemStack(Material.AIR));
 
Я так же юзаю, у меня робит.

.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
.getInventory().setItemInOffHand(new ItemStack(Material.AIR));
 
Я так же юзаю, у меня робит.

.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
.getInventory().setItemInOffHand(new ItemStack(Material.AIR));
уу, есть более простые методы. пора заново прошарить доки. с 1.5.2 не чесал их (пфф, не буду)
 
Код:
@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);
   }
 
Код:
@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);
   }
а теперь положи в разные слоты по одному алмазу и посмотри что будет
 
это под API 1.8, я лишь дал наводку, пусть сам под себя делает
твой код вне зависимости от версии неверный, ибо удаляет все стаки эквивалентные i. т.е. все стаки где будет лежать один алмаз удалятся.
 
Спасибо всем.Дали много вариантов, буду подбирать:). (Больше всего мне нравится код пользователя Zнамя Юности, простой и понятньій :good:)
 
Спасибо всем.Дали много вариантов, буду подбирать:). (Больше всего мне нравится код пользователя Zнамя Юности, простой и понятньій :good:)
афигенно. выбрал самый неверный вариант.

удачи
 
афигенно. выбрал самый неверный вариант.

удачи
Будет неверным, подберу другой)

И самым неверным мне кажется этот, не?
  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. }
 
Будет неверным, подберу другой)

И самым неверным мне кажется этот, не?
  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. }
сорян перепутал их.
мне показалось что знамя его и предложил

Да он верный, только под оверстарый майн.
Ну это да.

Теперь в манйе и вторая рука тоже функционирует, так что Deprecated
 
Во всех не понятных ситуациях - обновляй инвентарь (вообще не рекомендуется, но если уже ничего не помогает, то почему бы и нет).
 
Назад
Верх