当前位置: 首页 > 知识库问答 >
问题:

Bukkit检查玩家的库存

潘嘉颖
2023-03-14

我正在尝试查看玩家的库存中是否有以下物品,如果有,我想移除这些物品并向他们发送消息,说该物品已被移除,但我不知道如何做到这一点,这就是我目前拥有的:

    Material[] bannedItems = { Material.DIAMOND_HELMET, Material.DIAMOND_CHESTPLATE, Material.DIAMOND_LEGGINGS, Material.DIAMOND_BOOTS, Material.GOLD_HELMET, Material.GOLD_CHESTPLATE, Material.GOLD_LEGGINGS, Material.GOLD_BOOTS };

@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
    Player player = (Player) event.getWhoClicked();
    if(player.getInventory().contains(bannedItems, 1)){
        player.sendMessage(ChatColor.GRAY + "[" + ChatColor.RED + ChatColor.BOLD + "RPG" + ChatColor.GRAY + "] " + ChatColor.RED + "A has been removed from your possession.");
    }
}

我在.contains(bannedItems,1))行上收到一个错误。

谢谢你的帮助!

共有1个答案

公良征
2023-03-14

对于数组中的每个元素,必须进行检查,而不仅仅是比较数组。这是一个概念证明:

double[] check = {1.3, 4.2, 4.3}; //A sample double array

for(double d : check) { //Loop thru all elements
    if(4.2 == d) { //If current element is equal to 4.2
        System.out.println("EQUAL!"); //Print "EQUAL!"
    }
}

这将逐个循环< code>check数组,并将每个元素与4.2进行比较。当它们相等时,它报告。然后,您可以将此应用于这种情况:

@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
    Material[] bannedItems = { Material.DIAMOND_HELMET, Material.DIAMOND_CHESTPLATE, Material.DIAMOND_LEGGINGS, Material.DIAMOND_BOOTS, Material.GOLD_HELMET, Material.GOLD_CHESTPLATE, Material.GOLD_LEGGINGS, Material.GOLD_BOOTS };
    Player player = (Player) event.getWhoClicked();

    for(Material m : bannedItems) { //Loop thru all elements
        if(player.getInventory().contains(m, 1)){ //Check if in inventory
            player.sendMessage(ChatColor.GRAY + "[" + ChatColor.RED + ChatColor.BOLD + "RPG" + ChatColor.GRAY + "] " + ChatColor.RED + "A has been removed from your possession.");
            //Remove stuff
        }
    }
}

现在,该事件将遍历< code>bannedItems的每个元素,并检查用户在库存中是否有它。

for(Material m : bannedItems) 

是一个增强的 for 循环,它将当前元素存储m 变量中的 bannedItems 中,然后我们使用 m(单个材料)进行比较。

我也会使用不同的事件,例如当他们拿起一个项目,然后检查,这样你就可以立即删除它。

 类似资料:
  • 我知道你可以得到损坏的原因 在实体损坏事件中,但是我还没有找到返回造成损坏的实体的方法。我需要找出这一点,这样我就可以检查玩家的库存中是否有某个物品。

  • 目前,我正在编写一个RPG插件。我创建了一个类,用于存储玩家的UUID、角色类(如骑士和弓箭手)以及修改玩家属性的技能,例如会增加玩家的生命值,会增加玩家身体伤害,等等。 这是到目前为止的课程: 我还想说,我主要是一名Python和Javascript程序员。我大约2天前学会了Java,所以如果我的代码不卫生,我很抱歉。我仍在努力理解语言及其实践。如果你愿意的话,我也很感激你的建议。尽管如此,请随

  • 我正在用Java制作一个名为BanItems的Bukkit插件。我在创建它时遇到了很多问题,我只是在任何地方都找不到答案。所以我问了这个问题。在代码中,我有一个数组ItemsBanned[],只包含Strings。我想检查一下,看看是否有玩家在他们的库存中有一件物品在该阵列中。 出于某种奇怪的原因,当我复制时 它不会让我看到玩家的物品栏是否包含数组物品禁止中的物品。我该怎么做?请回答。

  • 我目前正在开发一个插件,可以让你假设另一个玩家的身份。它几乎完美无缺地做到了这一点:您的UUID和用户名被更改为您假定为服务器端的用户的身份,就服务器和插件所知,您似乎就是那个玩家。你将拥有与他们相同的等级,相同的权限,一切。我唯一没能得到的就是皮肤。我以为当UUID是的时候,一个玩家的皮肤会为其他玩家改变,但事实似乎并非如此。我使用反射来更改GameProfile和EntityPlayer中的U

  • 我正在为《我的世界》编写一个bukkit插件,它会对低食物水平做出反应,然后自动将食物从库存中移动到现成的地方,然后吃掉它。我管理了第一部分,但我在bukkit API(,,其他地方)中找不到让玩家使用物品的方法。 这可能吗?如果可能,怎么做?