Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Если здоровье меньше...

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

  1. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    NBT хорошо, но лучше избегать его. Как и nms.
     
  2. Хостинг MineCraft
    <
  3. AtomicInteger

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

    Баллы:
    46
    Почему?
     
  4. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Будет небольшая проблема с дальнейшей поддержкой плагина.
     
  5. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Чтоб не пропустить спавн мобов при сильном дамаге.[DOUBLEPOST=1480527032,1480526961][/DOUBLEPOST]
    Не знал.
     
  6. AtomicInteger

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

    Баллы:
    46
    И ради этого столько говнокода?А так что, нельзя было?
    Код:
     
    if(livingEntity.getLastDamage()>livingEntity.getHealth()) 
        spawnEntity(47, entity);
     
    Да, кстати, в общем, спавнится 47 мобов.
     
  7. AtomicInteger

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

    Баллы:
    46
    Я выше его предоставил, я переписал его, что бы каждый раз не передавать в параметры имя моба.Делал я это учитывая то, что значение будет получаться из конфига.Ну, а пока, спавнится могут только зомби.Вот этот метод:
    Код:
        private void spawnEntity(int i, Entity entity) {
            for(int x = 0;x < i;x++)
                entity.getWorld().spawnEntity(entity.getLocation(), EntityType.ZOMBIE);
        }
     
  8. AtomicInteger

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

    Баллы:
    46
    Ну, я изначально планировал спавнить одного моба, тогда да, в параметры передавать не нужно.Но если разные мобы на разных этапах, то да.А это, зачем использовать регулярки?
     
  9. AtomicInteger

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

    Баллы:
    46
    Вот, я убрал регулярки, и код наоборот стал короче.Что скажешь?
    Код:
        @EventHandler
        public void on(EntityDamageByEntityEvent e) {
            Entity mob = e.getEntity();
            LivingEntity en = (LivingEntity) mob;
            String metaData = en.getMetadata("boss").get(0).asString();
            double i = en.getHealth() - e.getDamage();
            if (metaData.equalsIgnoreCase("§1") && i < 20) {
                en.setMetadata("boss", m("§2"));
                Spawn(1, mob, "SLIME");
            }
            if (metaData.equalsIgnoreCase("§2") && i < 17) {
                en.setMetadata("boss", m("§3"));
                Spawn(2, mob, "ZOMBIE");
            }
            if (metaData.equalsIgnoreCase("§3") && i < 14) {
                en.setMetadata("boss", m("§4"));
                Spawn(4, mob, "ENDERMITE");
            }
            if (metaData.equalsIgnoreCase("§4") && i < 11) {
                en.setMetadata("boss", m("§5"));
                Spawn(6, mob, "CREEPER");
            }
            if (metaData.equalsIgnoreCase("§5") && i < 8) {
                en.setMetadata("boss", m("§6"));
                Spawn(8, mob, "SILVERFISH");
            }
            if (metaData.equalsIgnoreCase("§6") && i < 5) {
                en.setMetadata("boss", m("§7"));
                Spawn(12, mob, "SKELETON");
            }
            if (metaData.equalsIgnoreCase("§7") && i < 2) {
                en.setMetadata("boss", m("§8"));
                Spawn(14, mob, "BLAZE");
            }
        }
    
        FixedMetadataValue m(String s) {
            return new FixedMetadataValue(this,s);
        }
     
    Последнее редактирование: 1 дек 2016
  10. AtomicInteger

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

    Баллы:
    46
    Код работал правильно, единственным недостающим звеном была защита от слишком высокого урона.equalsIgnoreCase я делал с расчётом на то, что вместо символов в мете будет какая-нибудь надпись, а спавнится моб будет не обязательно в нашем плагине, соотв. решил избавиться от зависимости, но это мелочи.Так вот, защиту от слишком большого урона я сделал, выглядит всё равно плохо, но уже лучше чем с регулярками.
    Код:
        @EventHandler
        public void on(EntityDamageByEntityEvent e) {
            Entity mob = e.getEntity();
            LivingEntity en = (LivingEntity) mob;
            String metaData = en.getMetadata("boss").get(0).asString();
            double i = en.getHealth() - e.getDamage();
            if (metaData.equals("§1") && i < 20) {
                en.setMetadata("boss", m("§2"));
                Spawn(1, mob, "SLIME");
                metaData = en.getMetadata("boss").get(0).asString();
            }
            if (metaData.equals("§2") && i < 17) {
                en.setMetadata("boss", m("§3"));
                Spawn(2, mob, "ZOMBIE");
                metaData = en.getMetadata("boss").get(0).asString();
            }
            if (metaData.equals("§3") && i < 14) {
                en.setMetadata("boss", m("§4"));
                Spawn(4, mob, "ENDERMAN");
                metaData = en.getMetadata("boss").get(0).asString();
            }
            if (metaData.equals("§4") && i < 11) {
                en.setMetadata("boss", m("§5"));
                Spawn(6, mob, "CREEPER");
                metaData = en.getMetadata("boss").get(0).asString();
            }
            if (metaData.equals("§5") && i < 8) {
                en.setMetadata("boss", m("§6"));
                Spawn(8, mob, "SILVERFISH");
                metaData = en.getMetadata("boss").get(0).asString();
            }
            if (metaData.equals("§6") && i < 5) {
                en.setMetadata("boss", m("§7"));
                Spawn(12, mob, "SKELETON");
                metaData = en.getMetadata("boss").get(0).asString();
            }
            if (metaData.equals("§7") && i < 2) {
                en.setMetadata("boss", m("§8"));
                Spawn(14, mob, "BLAZE");
            }
        }
    А вообще, регулярки обычно работают медленнее.В итоге, зачем было писать лишние методы, лишний трудночитаемый код?
     
  11. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Не тебе уж про трудно читаемый код говорить)
     
  12. AtomicInteger

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

    Баллы:
    46
    Написал человек, который предлагал решить эту проблему через шедулер:lol:
     
  13. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Ты хотел вариант решения, я тебе предложил? Еще вопросы? Знаешь, все темы которые я видел с тобой скатываются в какую-то ***ню, думаю, я дал повод тебе задуматься о себе.
     
  14. AtomicInteger

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

    Баллы:
    46
    Ты не поверишь.Столько же, сколько и твой код.Вот результат выполнения моего кода(Проверял на свинье):
    [​IMG]
    А вот результат выполнения твоего кода:
    [​IMG]
    Но, я вижу, что ты не способен вести конструктивную дискуссию, так что я не вижу смысла продолжать.[DOUBLEPOST=1480602352,1480602304][/DOUBLEPOST]
    Это не решение проблемы, даже близко.Больше вопросов нет, выводы я сделал.
     
  15. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Ну да, просто работает по ТЗ.
     
  16. AtomicInteger

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

    Баллы:
    46
    К сожалению, оно не работает.И даже ТЗ оно не соответствует.Ну, можешь написать через шедулер, посмотрим, что из этого получится.И заметь, я сейчас не пытаюсь спровоцировать или что-то ещё, я действительно хочу найти наилучший способ решения этой проблемы.Если ты напишешь и предоставишь код, и он будет действительно лучшим чем все варианты, которые предоставлены в этой теме, то, я думаю, никто оспаривать это не станет.
     
  17. AtomicInteger

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

    Баллы:
    46
    Не буду возражать если ты вставишь этот код к себе и собственноручно проверишь.Можешь даже видео снять, только я не знаю на какой версии ты тестируешь, я вот на 1.7.10.Но исправить под более новые не составит труда.
     
  18. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Еще раз говорю, это лишь вариант решения, разумеется есть лучше, я сам не люблю шудуллеры
     
  19. AtomicInteger

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

    Баллы:
    46
    Ну вот я и говорю, решение не является решением до тех пор, пока оно не решает проблему.Твой вариант проблему не решает, соотв. решением не является.Но, возможно, если ты реализуешь это в коде, то такой вариант будет решать эту проблему лучше всех реализаций, предоставленных в этой теме, кто знает.
     
  20. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Лучшее решение точно не шудуллер, смотря в каком ивенте делать, я лично думал что надо взять всех мобов с мира и если хп больше то спаунить кого то еще
     
  21. AtomicInteger

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

    Баллы:
    46
    Я сначала так же думал, выше есть реализации.Ну..Ошибаются все.[DOUBLEPOST=1480606158,1480604268][/DOUBLEPOST]Что случилось, Алекс?Где все твои сообщения?
     

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