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