首页 > 解决方案 > Bukkit(spigot api)监听器没有响应?

问题描述

我一直在制作一个 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)));
      }
   }
}

标签: javabukkit

解决方案


我看不到你注册你的听众。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
}

推荐阅读