Bukkit - 参考IF语句中的自定义项目并不起作用

时间:2014-05-10 23:52:45

标签: bukkit

对可怕的言语使用道歉,但我还没有进入行话。

我一直在为一个简单的bukkit插件创建一个拼写书,该插件会在右键点击制作的某个自定义项目时打开。这是代码

@EventHandler
public void onBookInteract(PlayerInteractEvent e){
    if(e.getAction() == Action.RIGHT_CLICK_AIR){
        if(e.getItem() == SpellBook){
            openGUI(e.getPlayer());

当我尝试这样做时,没有任何反应。我删除了if(e.getItem()== SpellBook){并且它的作用与我将语句更改为:

一样好

if(e.getMaterial()== Material.BLAZE_POWDER){

它也有效。可能是一个简单的错误,但我几天前才开始编码。感谢您提供任何有用的反馈^ _ ^

2 个答案:

答案 0 :(得分:2)

如果SpellBook是一个类型(即Java类)那么这就是你的问题,e.getItem()返回一个类的实例。同样,如果SpellBook是一种类型(我不能告诉您提供的简短代码),那么请尝试使用e.getItem() instanceof SpellBook。对不起,我离开了。

答案 1 :(得分:1)

有几件事可能是错的。

1)确保此类位于implements Listener的类以及Main类中的类(扩展JavaPlugin的类) onEnable()方法,你有:

this.getServer().getPluginManager().registerEvents(new <class that implements Listener>(), this);

因此,如果您的@EventHandler代码所在的类名为Handler,那么您可以使用:

this.getServer().getPluginManager().registerEvents(new Handler(), this);

2)尝试使用.equals()代替==

if(e.getAction().equals(Action.RIGHT_CLICK_AIR)){
    if(e.getItem().equals(SpellBook)){

3)确保SpellBook实际上是ItemStack。如果是,那么你可能想尝试这样做,如果它没有ItemMeta(显示名称,传说等)

if(e.getItem().getType().equals(SpellBook.getType())){

否则,如果它有ItemMeta,您可以使用:

if(e.getItem().getType().equals(SpellBook.getType()) && e.getItem().hasItemMeta()){
  if(e.getItem().getItemMeta().getDisplayName().equals(SpellBook.getItemMeta().getDisplayName(){
    if(e.getItem().getItemMeta().getLore().equals(SpellBook.getItemMeta().getLore(){  

所以,你的最终代码应该是这样的:

@EventHandler
public void onBookInteract(PlayerInteractEvent e){
  if(e.getAction().equals(Action.RIGHT_CLICK_AIR)){
    if(e.getItem().getType().equals(SpellBook.getType()) && e.getItem().hasItemMeta()){
      if(e.getItem().getItemMeta().getDisplayName().equals(SpellBook.getItemMeta().getDisplayName()){
        if(e.getItem().getItemMeta().getLore().equals(SpellBook.getItemMeta().getLore()){
          openGUI(e.getPlayer());
        }
      }
    }  
  }
}
相关问题