猿问

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

      }

   }

}


达令说
浏览 221回答 3
3回答

撒科打诨

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

慕桂英4014372

只是一个快速提示,如果你想为不同的类注册一个监听器,那么#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);}谢谢!

翻过高山走不出你

您尝试调用的侦听器类代码将有助于尝试和调试此场景。您必须确保以下内容为真: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
随时随地看视频慕课网APP

相关分类

Java
我要回答