不能从1个单项中减去?

时间:2014-08-31 08:22:23

标签: java bukkit

我已经设置了这种方法,当玩家右键点击隐藏一秒时,玩家可以使用火药,并从他们的库存中减去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);
    }
}

2 个答案:

答案 0 :(得分: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 :(得分:1)

您应该删除项目而不是设置其数量。

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

这应该从他们的库存中删除1个火药。