对可怕的言语使用道歉,但我还没有进入行话。
我一直在为一个简单的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){
它也有效。可能是一个简单的错误,但我几天前才开始编码。感谢您提供任何有用的反馈^ _ ^
答案 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());
}
}
}
}
}