很抱歉,我对术语还不太熟悉。
我一直在为一个简单的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
。对不起,我说得有点离题了。