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

Помогите NMS Сделать что бы мобы шли до цели и по пути били игроков

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

Метки:
  1. Автор темы
    digitalEugene

    digitalEugene Активный участник

    Баллы:
    61
    Здравствуйте! Нужна для мини игры вот такая система мобов(крипов). Сначала центр граблей в моем мозгу придумал телепортировать мобов в шедулере на маленькое расстояние по направлению к цели, и если рядом есть игрок, то перестать их телепортировать и дать мобам его спокойно атаковать, но через 3 секунды когда очередная порция кислорода подошла, стало понятно что это будет выглядеть ужасно. Спросил тут о том как назначить локацию назначения.
    Вышло как-то так:
    Код:
    public class LightCreep
    {
        public Location spawnLocation  = new Location(Bukkit.getWorld("server"), 185, 55, 76);
        public LivingEntity zombie = null;
    
        public void spawn()
        {
            World world = spawnLocation.getWorld();
            zombie = (LivingEntity)world.spawnEntity(spawnLocation.add(
                    Math.random()*2, 0, Math.random()*2
            ), EntityType.ZOMBIE);
        }
    
        public void followLoc(Location loc, float d)
        {
            final LivingEntity e = zombie;
            ((EntityInsentient) ((CraftEntity) e).getHandle()).getNavigation().a(loc.getX(), loc.getY(), loc.getZ(), (float) d);
        }
    }
    
    Но это не работает. Когда еще одна порция кислорода попала в мозг, я понял, что эта штука перекрывается дефолтными PathFinder'ами. Как их очистить я не понял, информации об этом совсем нет.

    Помогите, как такое реализовать?
     
  2. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Вроде эта штука перекрывается не пачфиндерами, а ЭнтитиТаргетЭвентом
    В каком смысле шли до цели и били игроков? Тебе надо чтобы все время шли или останавливались и били игрока пока кто-то не умрет?
     
  3. Автор темы
    digitalEugene

    digitalEugene Активный участник

    Баллы:
    61
    Ну вот идут они, рядом оказался игрок, они перестают идти, начинают его бить пока он не уйдет из зоны видимости или не умрет. Потом идут дальше к цели. Нужно что бы они еще и били мобов другой команды(но мб это можно реализовать просто той же целью что и с игроками, просто для мобов другой команды другого моба ставить)
     
  4. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Надо просто проверять: если у твоего LivingEntity, getTarget равен null тогда выполнять followLoc, иначе return.
     
  5. Автор темы
    digitalEugene

    digitalEugene Активный участник

    Баллы:
    61
    followLoc не работает вовсе. Я уверен что в этом виновен стандартный AI, и его нужно очистить (каким то образом). Но как?
     
  6. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Должно работать, попробуй в рунейбл засунуть, переназначать АИ гораздо сложнее.
     
  7. SaMEC

    SaMEC Старожил Пользователь

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    А в чем проблема переназначения движения по таймеру?
    По памяти, но как то так
    Код:
    new BukkitRunnable(){
                @Override
                public void run() {
                  ((EntityCreature) ((CraftEntity) e).getHandle()).getNavigation().a(22, 87, 12, 1D);
                   }
                }.runTaskTimer(this, 5);
    
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
  9. Автор темы
    digitalEugene

    digitalEugene Активный участник

    Баллы:
    61
    LivingEntity#getTarget не существует... Возможно забыл упомянуть что пишу под 1.15.2 upload_2020-5-9_12-5-52.png
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
  11. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Код:
    Zombie Zombi = (Zombie) e.getEntity();
    Zombi.getTarget();
    Кастуй так, все должно быть
     
  12. Lemar98

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

    Баллы:
    76
  13. Автор темы
    digitalEugene

    digitalEugene Активный участник

    Баллы:
    61
    Реализовал через getNearbyEntities и раннейбл, заработало. Остался последний вопрос: Как добавить что бы зомби могли атаковать кадавров и наоборот?
     
  14. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Там все изи ага, оверайднул пару методов с оригинального контроллера и все.
     

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