Проблема с EntityDamageByEntityEvent

bb_KPOJlUK

Пользователь
Сообщения
79
Я хочу сделать так, чтобы скелет, который является всадником на пауке при случайном попадании стрелой в паука не наносил ему урона. Если это не сделать, то они начнут воевать между собой. Но я не знаю как это сделать(

Вот код, который я написал:

Java:
@EventHandler
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent e) {
    Entity skeleton = e.getDamager();
    Entity spider = e.getEntity();
    if (e.getDamager() instanceof Skeleton && e.getEntity() instanceof Spider) {
        e.setDamage(0);
    }
}

Может я что-то делаю не так? Подскажите, пожалуйста
 
Последнее редактирование модератором:
Не лучше ли будет использовать это, вместо 0 урона?:
Java:
е.setCancelled(true)
Я это тоже использовал, но нужного результата не добился
Авто объединение сообщений:

Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Последнее редактирование:
а урон наносит?
Проверь, зарегистрировал ли ты ивент при помощи Bukkit.getPluginManager().registerEvents в главном классе?
Я регистрировал ивент
Авто объединение сообщений:

Я не пойму почему не работает. Вот спавнится скелет на пауке. Я начинаю бегать вокруг него в выживании. Вроде бы всё норм (скелет не попадает по пауку), но через некоторое время скелет каким-то образом попадает в хитбокс паука.
Авто объединение сообщений:

Я регистрировал ивент
Авто объединение сообщений:

Я не пойму почему не работает. Вот спавнится скелет на пауке. Я начинаю бегать вокруг него в выживании. Вроде бы всё норм (скелет не попадает по пауку), но через некоторое время скелет каким-то образом попадает в хитбокс паука.
*ошибок в консоле нету. ядро Spigot 1.12.2. Используется Java 11*
Авто объединение сообщений:

а урон наносит?
Проверь, зарегистрировал ли ты ивент при помощи Bukkit.getPluginManager().registerEvents в главном классе?
И урон наносит
Авто объединение сообщений:

Если поставить

if (e.getDamager().getType() == EntityType.SKELETON && e.getEntity() instanceof Spider) {
e.setDamage(0);
e.setCancelled(true);

то урон вроде бы не засчитывается, но паук со временем умирает...
 
Последнее редактирование:
тут тоже лучше не юзай instanceof. он медленнее чем =
e.getEntity().getType() == EntityType.SPIDER
Спасибо
Авто объединение сообщений:

тут тоже лучше не юзай instanceof. он медленнее чем =
e.getEntity().getType() == EntityType.SPIDER
жаль, что это не решило проблему(
 
Потому что урон наносит не скелет, а стрела, которую он выпустил.
Авто объединение сообщений:

В теории, этот код должен сработать. Писал на новой версии Java. При необходимости адаптируешь под свою версию.
Java:
    @EventHandler
    public void onDamage(EntityDamageByEntityEvent e) {
        if (e.getDamager() instanceof Arrow arrow && e.getEntity() instanceof Spider spider) {
            if (arrow.getShooter() instanceof Skeleton skeleton) {
                if (spider.getPassengers().contains(skeleton))
                    e.setCancelled(true);
            }
        }
    }
 
Последнее редактирование:
Потому что урон наносит не скелет, а стрела, которую он выпустил.
Авто объединение сообщений:

В теории, этот код должен сработать. Писал на новой версии Java. При необходимости адаптируешь под свою версию.
Java:
    @EventHandler
    public void onDamage(EntityDamageByEntityEvent e) {
        if (e.getDamager() instanceof Arrow arrow && e.getEntity() instanceof Spider spider) {
            if (arrow.getShooter() instanceof Skeleton skeleton) {
                if (spider.getPassengers().contains(skeleton))
                    e.setCancelled(true);
            }
        }
    }
Спасибо. Попробую переписать для Java 8
Авто объединение сообщений:

Потому что урон наносит не скелет, а стрела, которую он выпустил.
Авто объединение сообщений:

В теории, этот код должен сработать. Писал на новой версии Java. При необходимости адаптируешь под свою версию.
Java:
    @EventHandler
    public void onDamage(EntityDamageByEntityEvent e) {
        if (e.getDamager() instanceof Arrow arrow && e.getEntity() instanceof Spider spider) {
            if (arrow.getShooter() instanceof Skeleton skeleton) {
                if (spider.getPassengers().contains(skeleton))
                    e.setCancelled(true);
            }
        }
    }
Емаё спасибо большое!
 
Последнее редактирование:
Назад
Сверху Снизу