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

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

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

  1. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Так если ты не додумался getCostumName :B Что мне оставалось делать?
     
  2. AtomicInteger

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

    Баллы:
    76
    Да дураку понятно, что он отличает мобов по кастомному имени, для проведения некоторой логики, после чего изменяет это имя, это всё понятно.Только я не понимаю, где начальное имя присваивается и зачем оно вообще нужно, чем оно лучше EntityType, учитывая то, что имя выводится игроку и его можно изменить(хоть это никому не надо, но всё же).
     
  3. alexandrage

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

    Баллы:
    173
    Тебе не понять, смирись с этим.
     
  4. AtomicInteger

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

    Баллы:
    76
    Хорошо.Я тебя понял.
     
  5. alexandrage

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

    Баллы:
    173
     
  6. AtomicInteger

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

    Баллы:
    76
    Да, спасибо конечно, но я и так понимал что это работает(и как)Я лишь хотел узнать, где именно ты задаешь кастом нейм мобу, а только что мне один человек объяснил, что такое можно задать вручную.Теперь я всё понял, создаем моба, одним из десятка способов задаем ему кастом нейм и работаем дальше.Если учитывать что TS'у нужно было глобально "усложнить" мобов, то мой вариант подходит лучше, так как работает через конфиг и действует на всех мобов.В остальном же - твой вариант лучше, так как работает только на определённых мобах, что существенно снижает нагрузку на сервер.
     
  7. alexandrage

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

    Баллы:
    173
    У моба 300 хп, явно он не стандартный там, значит спавнился плагином.
     
  8. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    В принципе он нахер не нужен, если мы его спауним. Просто можно брать его UUID и хранить/сверяться по нему.
    Проглатывай ;)
    if (mob.contains(uuid)) {
    Они были всегда. Да даже сейчас любая сущность имеет два id - uuid (постоянный, не меняется), и entityId (порядковый номер загрузки энтити).


    А вообще я так и не понимаю, зачем вы ему это разжевываете. У него зубки вроде есть, челюсть не отвалилась - жевать умеет.
     
    Последнее редактирование: 30 ноя 2016
  9. alexandrage

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

    Баллы:
    173
    Так мой вариант и был с конфигом uuid. Но остальным индивидуумам это не понравилось.
     
    Последнее редактирование: 30 ноя 2016
  10. IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Кому? ТС?
     
  11. Автор темы
    _Rudey_

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

    Баллы:
    76
    Имя в Minecraft:
    RudeyCoolLeet
    Я вам не мешаю? О_о
    Ребят, сделать-то сделал, но меня волнует одно - миньон моба спаунится на КАЖДЫЙ удар. Мне нужно, чтобы как только его здоровье упало меньше, чем на 300 - выпрыгивает толпа... Паучков скажем. Сразу
     
  12. alexandrage

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

    Баллы:
    173
    Код:
        @EventHandler
        public void on(EntityDamageByEntityEvent e) {
            Entity mob = e.getEntity();
            if(mob.getCustomName()==null) return;
            if(mob.getCustomName().contains("§0")) {
                LivingEntity en = (LivingEntity) mob;
                if(en.getHealth()<300) {
                    mob.setCustomName("§1");
                    mob.getWorld().spawnEntity(mob.getLocation(), EntityType.ZOMBIE);
                }
            }
        }
     
    Последнее редактирование: 30 ноя 2016
  13. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    это будет происходить каждый удар, когда здоровье упадет <300
     
  14. alexandrage

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

    Баллы:
    173
    Пересмотри внимательно.
     
  15. AtomicInteger

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

    Баллы:
    76
    После первой итерации кастомное имя изменяется, соотв. при след. итерации этого не произойдёт.
     
  16. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Не заметил, простите. Был не прав :)
     
  17. alexandrage

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

    Баллы:
    173
    Вот вам усложненный вариант. То что было на видосе. При любой силе дамага, зомбяра соспавнит все этапы миньенов.
    Код:
        @EventHandler
        public void on(EntityDamageByEntityEvent e) {
            Entity mob = e.getEntity();
            LivingEntity en = (LivingEntity) mob;
            if(mob.getCustomName()==null) return;
            String s =  mob.getCustomName();
            double i = en.getHealth()-e.getDamage();
            if(Pattern.compile("(?i)§[1]").matcher(s).find() && i < 20) {
                en.setCustomName(Pattern.compile("(?i)§[1]").matcher(s).replaceAll("§2"));
                Spawn(1, mob, "ZOMBIE");
            }
            if(Pattern.compile("(?i)§[1-2]").matcher(s).find() && i < 17) {
                en.setCustomName(Pattern.compile("(?i)§[1-2]").matcher(s).replaceAll("§3"));;
                Spawn(2, mob, "ZOMBIE");
            }
            if(Pattern.compile("(?i)§[1-3]").matcher(s).find() && i < 14) {
                en.setCustomName(Pattern.compile("(?i)§[1-3]").matcher(s).replaceAll("§4"));
                Spawn(4, mob, "ZOMBIE");
            }
            if(Pattern.compile("(?i)§[1-4]").matcher(s).find() && i < 11) {
                en.setCustomName(Pattern.compile("(?i)§[1-4]").matcher(s).replaceAll("§5"));
                Spawn(6, mob, "ZOMBIE");
            }
            if(Pattern.compile("(?i)§[1-5]").matcher(s).find() && i < 8) {
                en.setCustomName(Pattern.compile("(?i)§[1-5]").matcher(s).replaceAll("§6"));
                Spawn(8, mob, "ZOMBIE");
            }
            if(Pattern.compile("(?i)§[1-6]").matcher(s).find() && i < 5) {
                en.setCustomName(Pattern.compile("(?i)§[1-6]").matcher(s).replaceAll("§7"));
                Spawn(12, mob, "ZOMBIE");
            }
            if(Pattern.compile("(?i)§[1-7]").matcher(s).find() && i < 2) {
                en.setCustomName(Pattern.compile("(?i)§[1-7]").matcher(s).replaceAll("§8"));
                Spawn(14, mob, "ZOMBIE");
            }
        }
    
        //Для теста
        @EventHandler
        void on(CreatureSpawnEvent e) {
            if(e.getEntityType() == EntityType.valueOf("ZOMBIE") && e.getSpawnReason() == SpawnReason.NATURAL) {
                e.getEntity().setCustomName("§1"+e.getEntity().getName());
            }
        }
    
    
        void Spawn(int i, Entity mob, String name) {
            for(int x= 0; x<i;x++) {
                mob.getWorld().spawnEntity(mob.getLocation(), EntityType.valueOf(name));
            }
        }
     
    Последнее редактирование: 30 ноя 2016
  18. AtomicInteger

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

    Баллы:
    76
    Почему бы не сделать вот так?
    Код:
        @EventHandler
        public void entitySpawn(EntityDamageByEntityEvent event) {
            Entity entity = event.getEntity();
            LivingEntity livingEntity = (LivingEntity) entity;
            if(livingEntity.getCustomName() == null) return;
            String customName = livingEntity.getCustomName();
            switch (customName){
                case "§1" :
                    livingEntity.setCustomName("§2");
                    spawnEntity(1, entity);
                    break;
                case "§2" :
                    livingEntity.setCustomName("§3");
                    spawnEntity(2, entity);
                    break;
                case "§3" :
                    livingEntity.setCustomName("§4");
                    spawnEntity(4, entity);
                    break;
                case "§4" :
                    livingEntity.setCustomName("§5");
                    spawnEntity(6, entity);
                    break;
                case "§5" :
                    livingEntity.setCustomName("§6");
                    spawnEntity(8, entity);
                    break;
                case "§6" :
                    livingEntity.setCustomName("§7");
                    spawnEntity(12, entity);
                    break;
                case "§7" :
                    livingEntity.setCustomName("§8");
                    spawnEntity(14, entity);
                    break;
            }
        }
    
        private void spawnEntity(int i, Entity entity) {
            for(int x = 0;x < i;x++)
                entity.getWorld().spawnEntity(entity.getLocation(), EntityType.ZOMBIE);
        }
    Тут, конечно, нет зависимости от хп и нет защиты от большого урона(если убить моба с 1 удара, то заспавнится только 1 зомби), но я думаю суть ясна.Зачем использовать именно Pattern и ifы?
     
  19. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Фу-фу-фу. Entity же Metadatable. Кидаешь мету в энтитю, и все дела. И игрок не видит разницы, и работа выполняется.
     
  20. AtomicInteger

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

    Баллы:
    76
    Можно ещё через нбт попробовать.Через API PowerNBT или напрямую.
     

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