Так как вы не опубликовали весь свой исходный код, я начну с одного простого вопроса, что многие люди, плохо знакомые с программированием на Bukkit, ошибаются (даже случается со мной несколько раз): вы регистрировали свои события?
public class YourPlugin extends JavaPlugin {
@Override
public void onEnable() {
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(listener, this);
}
}
listener
- это экземпляр вашего класса Listener.Так что, если у вас есть этот код, который вы разместили в своем вопросе в главном классе, он должен выглядеть так:
public class YourPlugin extends JavaPlugin implements Listener {
@Override
public void onEnable() {
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
//your event
}
}
, а если у вас отдельный класс, он должен выглядеть так:
public class YourPlugin extends JavaPlugin {
@Override
public void onEnable() {
super.onEnable();
Bukkit.getServer().getPluginManager().registerEvents(new YourListener(), this);
}
}
public class YourListener implements Listener {
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
//your event
}
}
Очень важно, чтобы вы поставили эту @EventHandler
на одну строку выше EntityDamageByEntntyEvent
.Это также может быть проблемой, из-за которой ваше мероприятие не работает.
Я просмотрел ваш слушатель, и он должен работать совершенно нормально.Я просто потратил время, чтобы немного его затянуть:
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
if (!(e.getEntity() instanceof Player)) return;
Player player = (Player) e.getEntity();
Player damager;
if (e.getDamager() instanceof Arrow) {
Arrow a = (Arrow) e.getDamager();
if (!(a.getShooter() instanceof Player)) return;
damager = (Player) a.getShooter();
} else {
if (!(e.getDamager() instanceof Player)) return;
damager = (Player) e.getDamager();
}
for (Team t : teams2) {
if ((t.player1 == player || t.player2 == player) && (t.player1 == damager || t.player2 == damager)) {
e.setCancelled(true);
}
}
}
Я не знаю, какой класс хранится в teams2
, но я предположил, что это будет Team
, так что вы могли бы иметьизменить это, если вы взяли какое-то другое имя класса, как вы хотели бы попробовать мой код.