Bukkit(Spigot API)侦听器没有响应?

时间:2018-10-18 02:39:36

标签: java bukkit

我一直在制作一个bukkit插件,它会显示在插件列表中,但是当我执行我想让代码不执行任何操作时。

public class MyClass extends JavaPlugin implements Listener {

@EventHandler
public void onInteract(PlayerInteractEvent event) {
  Player player = event.getPlayer();
  if (player.isSneaking()) {
      player.sendMessage("Fire!");
      Arrow arrow = player.launchProjectile(Arrow.class);
      arrow.setShooter(player);
      arrow.setGravity(false);
      arrow.setSilent(true);
      arrow.setBounce(false);
      Block attach = arrow.getAttachedBlock();
      Location attachlocation = attach.getLocation();
      attachlocation.getWorld().createExplosion(attachlocation, 3);
            arrow.setVelocity((player.getEyeLocation().getDirection().multiply(1000)));
      }
   }
}

3 个答案:

答案 0 :(得分:2)

我看不到您注册监听器。 Bukkit需要知道哪些对象是侦听器(您无需这样做),并且需要知道要执行哪些方法(带有@EventHandler注释)

您可以使用PluginManager的registerEvents(Listener listener, Plugin plugin)方法注册侦听器。一个聪明的主意是在您的onEnable方法中执行此操作,以确保在您的插件启动后立即注册您的侦听器。

public class MyClass extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        this.getServer().getPluginManager().registerEvents(this, this);
    }

    // rest of your code
}

答案 1 :(得分:0)

快速提示

如果您想为其他类注册一个侦听器,则#onEnable()中的代码将为:

public void onEnable() {
    this.getServer().getPluginManager().registerEvents(this, this); //You have to 
    register the main class as a listener too.
    this.getServer().getPluginManager().registerEvents(new EventClass(), this);
}

谢谢!

答案 2 :(得分:0)

您尝试调用的侦听器类代码将有助于尝试调试此方案。您必须确保满足以下条件:

1)类实现侦听器

2)您使用以下方法注册课程:

Bukkit.getServer().getPluginManager().registerEvents(new [class] /* class of listener. this if it's your main class */, this/* your main class */);

3)您在每个事件之前都想起@EventHandler。

如果您正在学习bukkit编程,那么可能值得观看以下视频:https://youtu.be/Rinjdx6c6r8和本系列:

https://www.youtube.com/watch?v=bVySbfryiMM&list=PLAF3anQEEkzREsHA8yZzVhc3_GHcPnqxR