我有一个bukkit插件,但我希望我的箭头爆炸。我有这段代码:
public void ArrowHit(ProjectileHitEvent e)
{
if (((e.getEntity() instanceof Arrow)) &&
((e.getEntity().getShooter() instanceof Player)))
{
Player shooter = (Player)e.getEntity().getShooter();
double x = e.getEntity().getLocation().getX();
double y = e.getEntity().getLocation().getY();
double z = e.getEntity().getLocation().getZ();
e.getEntity().getWorld().createExplosion(x, y, z, 2.0F, false, false);
}
在我的主课的底部。它不起作用。有人在乎解释吗?
答案 0 :(得分:2)
首先,您应确保已使用onEnable()
方法注册了您的监听器!例如:
public void onEnable() {
this.getServer().getPluginManager().registerEvents(this, plugin);
}
完成此操作后,请检查您的活动前是否有@EventHandler
annotation。
您还可以添加优先级!例如:
@EventHandler(priority = EventPriority.HIGH)
public void ArrowHit(ProjectileHitEvent e) {
if (e.getEntity() instanceof Arrow && e.getEntity().getShooter() instanceof Player) {
Player shooter = (Player) e.getEntity().getShooter();
double x = e.getEntity().getLocation().getX();
double y = e.getEntity().getLocation().getY();
double z = e.getEntity().getLocation().getZ();
e.getEntity().getWorld().createExplosion(x, y, z, 2.0F, false, false);
}
}
答案 1 :(得分:0)
第一个是检查以确保您注册了侦听器,并且您已为该方法提供了EventHandler注释。如果这不起作用,请在代码周围放置一些sysouts / sout以查看出错的地方。据我所知,除了缺少注释的可能性外,所有代码都可以从您发布的块中获得。
public class Example implements Listener {
public Example(JavaPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onGUIClick(InventoryClickEvent e) {
// foo
}
}
不同的事件,但同样的前提。