なぜ「EntityDamageByEntityEventは、」活性化されませんか?

Ariix:

だから、私は各チームがplayer1とplayer2を持っているチームのプラグインを、やろうとしています。今、私はEntityDamageByEntityEventを使用してfriendyfire追加したいが、私のコードのいずれかが仕事をしない、またはイベントが起動しません。それは私のコードは少し愚かである可能性がありますので、私は、プラグインにはかなり新しいです。ところで、「teams2は、」その中に「チーム」オブジェクトとのArrayListで、それぞれがplayer1、player2とTEAMNAMEが含まれています。

これは、関数であります:

public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {

        if (((event.getEntity() instanceof Player)) && ((event.getDamager() instanceof Player))) {
            Player player = (Player)event.getEntity();
            Player damager = (Player)event.getDamager();
            for(int i = 0; i < teams2.size(); i++){
                if((teams2.get(i).player1 == player || teams2.get(i).player2 == player) && (teams2.get(i).player1 == damager || teams2.get(i).player2 == damager)){
                    event.setCancelled(true);
                }
            }
        }
        else if (((event.getEntity() instanceof Arrow)) && ((event.getDamager() instanceof Player))) {
            Entity arrow = event.getEntity();
            if ((((Projectile)arrow).getShooter() instanceof Player)) {
                Player player = (Player)arrow;
                Player damager = (Player)event.getDamager();
                for(int i = 0; i < teams2.size(); i++){
                    if((teams2.get(i).player1 == player || teams2.get(i).player2 == player) && (teams2.get(i).player1 == damager || teams2.get(i).player2 == damager)){
                        event.setCancelled(true);
                    }
                }
            }
        }
    }

これは、同じチームの選手がお互いを攻撃できないように、イベントをキャンセルしたが、thatsのない場合必要があります。どうして?またFriendlyFire関数を作成する他の方法を提案することができます。

ニコラUetz:

あなたがあなたの全体のソースコードを投稿していなかったので、私はBukkitプログラミングに新しい多くの人々が完了間違っを取得することを1つの単純な質問(でも、私にはいくつかの回が起こる)で開始します:あなたはあなたのイベントを登録しましたか?

public class YourPlugin extends JavaPlugin {

    @Override
    public void onEnable() {
        super.onEnable();
        Bukkit.getServer().getPluginManager().registerEvents(listener, this);
    }

}

listenerあなたのリスナクラスのインスタンスです。あなたがあなたのMainClassに質問に投稿されたこのコードを持っているのであれば、それは次のようになります。

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
    }

}

あなたがこれを置くことが非常に重要である@EventHandler1行あなたの上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あなたは、いくつかの他のクラス名を取った場合、あなたが私のコードを試してみたいと、その変更が必要になる場合がありますので。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=214250&siteId=1