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

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

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

  1. IcedwinterZ

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

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

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

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

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

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

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

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

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

    Баллы:
    173
    Skype:
    alexandr0116
     
  7. AtomicInteger

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

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

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

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

    Dereku Старожил

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


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

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

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

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

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

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

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

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

    Баллы:
    173
    Skype:
    alexandr0116
    Код:
        @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
  14. Fenix78563

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

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

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

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

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

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

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

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

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

    Баллы:
    173
    Skype:
    alexandr0116
    Вот вам усложненный вариант. То что было на видосе. При любой силе дамага, зомбяра соспавнит все этапы миньенов.
    Код:
        @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
  19. AtomicInteger

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

    Баллы:
    46
    Почему бы не сделать вот так?
    Код:
        @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ы?
     
  20. Dereku

    Dereku Старожил

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

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

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

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