2014-08-31 2 views
1

Я установил этот метод, когда игроки могут использовать Порох, когда они нажимают правой кнопкой мыши, чтобы накрыть на некоторое время, и 1 Порох будет вычтен из их инвентаря. Проблема в том, что, когда у них остается только 1 Порох, он не будет вычитаться, в результате у них будет бесконечный плащ. Вот мой код:Нельзя вычесть из одного предмета?

if (e.getAction().equals(Action.RIGHT_CLICK_AIR) 
     || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { 
    if (e.getPlayer().getInventory().getItemInHand().getType() 
      .equals(Material.SULPHUR)) { 
     Player player = e.getPlayer(); 

     Location location = e.getPlayer().getLocation().add(new Vector(0, 2, 0)); 

     Bukkit.getWorld(e.getPlayer().getWorld().getName()) 
       .createExplosion(location, 0); 

     player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 80, 0)); 

     player.getItemInHand().setAmount(player.getItemInHand().getAmount() - 1); 
    } 
} 
+0

Вы должны использовать '==' для перечислений ('Материал' и' Действие'). –

+0

Используйте 'player.getWorld()' вместо 'Bukkit.getWorld (e.getPlayer(). GetWorld(). GetName())'. –

+0

Используйте 'player.getItemInHand()' вместо 'e.getPlayer(). GetInventory(). GetItemInHand()'. –

ответ

3

Я думаю, что проблема здесь.

player.getItemInHand().setAmount(player.getItemInHand().getAmount() - 1); 

ItemStack.setAmount(0) потерпит неудачу.


Просмотрите весь алгоритм.

ItemStack hand = player.getItemInHand(); 
int amount = hand.getAmount(); 
if (amount > 1) { 
    hand.setAmount(amount - 1); 
    player.setItemInHand(hand); 
} else { 
    player.setItemInHand(new ItemStack(Material.AIR)); 
} 
1

Вы должны удалять предметы, а не устанавливать их количество.

ItemStack remove = new ItemStack(Material.SULPHUR, 1); 
player.getInventory().removeItem(remove); 

Это должно удалить 1 порошок из их инвентаря.

Смежные вопросы