java - 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)));
}
}
}
解决方案
我看不到你注册你的听众。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
}
推荐阅读
- java - 如何将 objectId 传输到 mongock 中的其他变更集?
- javascript - 修复 nextjs 中的“调用堆栈已满”错误
- javascript - 在活动时减小不同样式的字体大小
- javascript - 响应式菜单修复
- spring - 表包含多个逻辑列名引用的物理列名
- flutter - 通过 kafka mqtt-proxy 发送 Protobuf 消息
- go - golang如何自动将logrus错误写入supervisord stderr_logfile
- blockchain - 如何检查以太坊地址是否有效?
- python - SQLALCHAM 关系
- java - 使用 JPA 的 varchar 中的内容长度