Bukkit从库存中移除物品

2022-04-18 00:00:00 minecraft java bukkit

我正在尝试检查玩家的库存中是否有物品,如果有,则删除其中一个。这是我现在拥有的:

Material ammomat = parseMaterial(plugin.getConfig().getString("game.ammo_material"));

ItemStack ammo = new ItemStack(ammomat, 1);

if(p.getInventory().contains(ammomat, 1)){
    p.getInventory().removeItem(ammo);
    p.updateInventory();
}

它获取他们是否拥有该项目,但不会删除一个项目。

如何从玩家的库存中删除一件物品?


解决方案

如果您只想删除一件物品,您可以遍历玩家清单中的物品,然后检查材料是否与您想要的匹配。如果是,您可以从ItemStack中删除一项

它可能如下所示:

for(int i = 0; i < p.getInventory().getSize(); i++){
  //get the ItemStack at slot i
  ItemStack itm = p.getInventory().getItem(i);
  //make sure the item is not null, and check if it's material is "mat"
  if(itm != null && itm.getType().equals(mat){
    //get the new amount of the item
    int amt = itm.getAmount() - 1;
    //set the amount of the item to "amt"
    itm.setAmount(amt);
    //set the item in the player's inventory at slot i to "itm" if the amount
    //is > 0, and to null if it is <= 0
    p.getInventory().setItem(i, amt > 0 ? itm : null);
    //update the player's inventory
    p.updateInventory();
    //we're done, break out of the for loop
    break;
  }
}

因此,您的代码可能如下所示:

Material ammomat = parseMaterial(plugin.getConfig().getString("game.ammo_material"));

for(int i = 0; i < p.getInventory().getSize(); i++){
  ItemStack itm = p.getInventory().getItem(i);
  if(itm != null && itm.getType().equals(ammomat){
    int amt = itm.getAmount() - 1;
    itm.setAmount(amt);
    p.getInventory().setItem(i, amt > 0 ? itm : null);
    p.updateInventory();
    break;
  }
}

相关文章