Bukkit - 在 IF 语句中引用自定义项不起作用



很抱歉,我对术语还不太熟悉。

我一直在为一个简单的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.p getmaterial () == Material.BLAZE_POWDER){

同样有效。可能是一个简单的错误,但我才开始编码几天前。感谢所有有帮助的反馈^_^

有几件事可能是错误的。

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());
        }
      }
    }  
  }
}

如果SpellBook是一个类型(即Java类),那么这是你的问题,e.getItem()返回一个类的实例。同样,如果SpellBook是一种类型(我无法通过你提供的简短代码判断),那么尝试使用e.getItem() instanceof SpellBook。对不起,我说得有点离题了。

最新更新