Minecraft Bukkit标志库存

时间:2013-08-14 18:33:21

标签: minecraft sign inventory bukkit

我正在制作一个带有标牌店的bukkit插件,可打开静态库存,然后点击获取套件。我已经设置了库存,当点击标志时它会打开,我想要的物品就在那里。但是,当我单击清单时,第一个if语句返回false。这是我的代码:

@EventHandler
    public void onInventoryClick(InventoryClickEvent e){
        if (e.getInventory() == kitInvent){
            Player player = (Player) e.getWhoClicked();
            player.sendMessage("Kit Shop Opened");

            if (e.getCurrentItem().getItemMeta().getDisplayName() == ChatColor.DARK_PURPLE + "Grenadier Kit"){
                e.setCancelled(true);
                player.getInventory().clear();
                Potion potion = new Potion(PotionType.INSTANT_DAMAGE, 1);
                potion.setSplash(true);
                ItemStack grenadeStack = new ItemStack(Material.POTION, 32);


                potion.apply(grenadeStack);
                player.getInventory().addItem(grenadeStack);
            }
        }
    }

它无法通过“if(e.getInventory()== kitInvent)”部分,因为当我将其注释掉时,它会发送消息“Kit Shop Opened”。

另外,我是否正确地执行下一个if语句,它检查项目的标题?我也遇到了问题,但我不知道这是不是因为之前的if语句。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

打开的广告资源永远不会真正等同于库存“kitInvent”,因为==会检查除名称,内部项目之外的其他内容。 您可以通过多种方式检查库存是否与kitInvent“相同”。 (“相同”与您想要做的事情一样,检查玩家是否在正确的库存中

您可以检查库存是否符合要求的一些方法是检查库存名称是否相同。虽然这是一般检查,但您也可以检查清单和项目名称中的项目 - 但坚持使用名称就足够了。 (特别是如果你使用的是ChatColors,因为可以重命名箱子!)另外,对于额外的检查,请使用equalsIgnoreCase()。

if(e.getInventory().getName().equalsIgnoreCase(kitInvent.getName()))

最后,从this thread about == vs .equals()引用的引用告诉你,如果你只想检查一件事,那么equals()就是你的选择。

  

equals只会比较写入比较的内容,不多也不少。

希望通过您的项目获得好运。

答案 1 :(得分:0)

您应该使用if (e.getInventory().equals(kitInvent))而不是==。 .equals查找相同的值而不是引用。

至于下一个if语句,我还建议使用.equals,因为在比较字符串时使用==被认为是错误的编码习惯。

答案 2 :(得分:0)

如果广告资源的名称等于活动广告资源的名称,您可以if(e.getInventory().getName().equalsIgnoreCase("the name of the inventory you want to do stuff with"))这将返回true!