1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Защитить Жителей от удара молнии

Тема в разделе "Разработка плагинов для новичков", создана пользователем olegtrick78, 28 май 2018.

  1. Автор темы
    olegtrick78

    olegtrick78 Активный участник Пользователь

    Баллы:
    66
    Добрый день (ночь). Пытаюсь решить проблему с неуязвимостью жителей . Урон от entity запретил,

    @EventHandler
    public void onEntityDamage(EntityDamageEvent es) {
    if(es.getEntity() instanceof Villager) {
    es.setCancelled(true);}
    }

    Проблема неуязвимости не решена полностью, при ударе молнии житель превращается в ведьму и его можно убить. Пробовал код :

    @EventHandler
    private void onLightningStrikeEvent (EntityDamageByEntityEvent h) {
    if(h.getEntity() instanceof Villager) {
    if(h.getCause() == DamageCause.LIGHTNING) {
    h.setCancelled(true);
    }
    }
    }
    ----- тоже не помогает .
     
  2. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Можно попытаться ловить LightningStrikeEvent, проверять наличие жителей поблизости и отменять если они есть.
     
  3. Автор темы
    olegtrick78

    olegtrick78 Активный участник Пользователь

    Баллы:
    66
    Я смотрел тут примеры, https://www.programcreek.com/java-api-examples/index.php?api=org.bukkit.event.weather.LightningStrikeEvent

    Пробовал такой вариант. Не получается

    @EventHandler(ignoreCancelled = true)
    void onLightningStrike(LightningStrikeEvent event) {
    // workaround: preventing lightning strikes near villager shopkeepers
    // because they would turn into witches
    Location loc = event.getLightning().getLocation();
    for (Entity entity : Utils.getNearbyEntities(loc, VILLAGER_ZAP_RADIUS, EntityType.VILLAGER)) {
    if (plugin.isShopkeeper(entity)) {
    event.setCancelled(true);
    }
    }

    . Shopkeeper - название плагина. VILLAGER_ZAP_RADIUS - такого нет в Спиготе у меня.
     
  4. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Это и есть то что я предлагал. Только под себя перепиши.
     
  5. Автор темы
    olegtrick78

    olegtrick78 Активный участник Пользователь

    Баллы:
    66
    Скачал исходники ShopKeepers , создал класс Utils.java, загнал туда необходимое ( Utils.getNearbyEntities ), попробую оживить эту конструкцию )) .

    Спасибо , Cool_boy !! Немного таких разрабов, которые пишут по существу.
     
  6. _helper_

    _helper_ Активный участник Пользователь

    Баллы:
    76
    ЭТО ПРАВДА.!.
     
  7. Автор темы
    olegtrick78

    olegtrick78 Активный участник Пользователь

    Баллы:
    66
    Вот что мне ответили на spigotmc.org

    You could always try to create a Custom NMS mob and override the associated method.
    ( Вы можете создать NMS моба и переопределить связанный метод. )

    This is straight from the EntityVillager class: ( Это из класса EntityVillager )
    ----------------------------------------------------------------------------------------------------
    Code (Java):
    public void onLightningStrike(EntityLightning entitylightning) {
    if (!this.world.isClientSide && !this.dead) {
    EntityWitch entitywitch = new EntityWitch(this.world);

    entitywitch.setPositionRotation(this.locX, this.locY, this.locZ, this.yaw, this.pitch);
    entitywitch.prepare(this.world.D(new BlockPosition(entitywitch)), (GroupDataEntity) null);
    entitywitch.setNoAI(this.isNoAI());
    if (this.hasCustomName()) {
    entitywitch.setCustomName(this.getCustomName());
    entitywitch.setCustomNameVisible(this.getCustomNameVisible());
    }

    this.world.addEntity(entitywitch);
    this.die();
    }
    }
    --------------------------------------------------------------------------------------------------
    Это просто КАПЕЦ костыль... Надо пробовать )))
     
  8. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Отмена LightningStrikeEvent не помогла?
     
  9. Автор темы
    olegtrick78

    olegtrick78 Активный участник Пользователь

    Баллы:
    66
    Помогла. В коде вот всё тут https://cloud.mail.ru/public/FB4d/ypNWSrXC5
    В коде бардак почищу, но уже всё работает. Теперь убить можно только после отключения плагина.
     
  10. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    А чем тебя не устроило стандартное получение сущностей в радиусе?
     
  11. Автор темы
    olegtrick78

    olegtrick78 Активный участник Пользователь

    Баллы:
    66
    В классе Utils.java есть поиск энтити. Стандартное это как ?
     
  12. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    world.getNearbyEntities()
     
  13. Автор темы
    olegtrick78

    olegtrick78 Активный участник Пользователь

    Баллы:
    66
    Что-то у меня каша в коде с неопределенными методами..... Сорян...
     
  14. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Надо передать ему Location и три double
     

Поделиться этой страницей