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