我正在制作一个带有标牌店的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语句。
非常感谢任何帮助!
答案 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!