我在Java中创建一个名为 BanItems 的 Bukkit 插件。我有很多创建它的问题,我无法找到任何答案。所以我问了这个问题。 在代码中,我有一个数组,ItemsBanned [] ,只包含字符串。 我想检查并查看是否有任何玩家的库存中有一个项目在该数组中。
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
Inventory inv = player.getInventory();
if (inv.contains(itemsBanned[x])) {
}
出于某些奇怪的原因,当我复制&将代码粘贴到此处,无论我使用4个空格和类似的东西,它都会完全填满。所以,这就是我能展示的一切。
它不会让我看到玩家的库存是否包含数组itemsBanned中的项目。 我怎样才能做到这一点? 请回答。
答案 0 :(得分:2)
您可以使用简单的for循环。我将从你的问题中假设ItemsBanned是项目的名称。
for(int i = 0; i < itemsBanned.length(); i++){
Material m = Material.getMaterial(itemsBanned[i]); //convert the strings to Materials
if(inv.contains(m)){
//do something here
}
}
该代码唯一的问题是您无法删除这些项目,只有当玩家拥有一个或多个项目时才能提醒您。如果您想删除被禁止的物品,可以这样做:
for(int i = 0; i < itemsBanned.length(); i++){
Material m = Material.getMaterial(itemsBanned[i]); //convert the strings to Materials
for(int n = 0; n < inv.getSize(); n++){ //loop threw all items in the inventory
ItemStack itm = inv.getItem(n); //get the items
if(itm != null){ //make sure the item is not null, or you'll get a NullPointerException
if(itm.getType().equals(m)){ //if the item equals a contraband item
inv.remove(m); //remove the item
}
}
}
}