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

  • Автор темы Автор темы _Rudey_
  • Дата начала Дата начала
Так если ты не додумался getCostumName :B Что мне оставалось делать?
Да дураку понятно, что он отличает мобов по кастомному имени, для проведения некоторой логики, после чего изменяет это имя, это всё понятно.Только я не понимаю, где начальное имя присваивается и зачем оно вообще нужно, чем оно лучше EntityType, учитывая то, что имя выводится игроку и его можно изменить(хоть это никому не надо, но всё же).
 
Да дураку понятно, что он отличает мобов по кастомному имени, для проведения некоторой логики, после чего изменяет это имя, это всё понятно.Только я не понимаю, где начальное имя присваивается и зачем оно вообще нужно, чем оно лучше EntityType, учитывая то, что имя выводится игроку и его можно изменить(хоть это никому не надо, но всё же).
Тебе не понять, смирись с этим.
 
Да, спасибо конечно, но я и так понимал что это работает(и как)Я лишь хотел узнать, где именно ты задаешь кастом нейм мобу, а только что мне один человек объяснил, что такое можно задать вручную.Теперь я всё понял, создаем моба, одним из десятка способов задаем ему кастом нейм и работаем дальше.Если учитывать что TS'у нужно было глобально "усложнить" мобов, то мой вариант подходит лучше, так как работает через конфиг и действует на всех мобов.В остальном же - твой вариант лучше, так как работает только на определённых мобах, что существенно снижает нагрузку на сервер.
 
Да, спасибо конечно, но я и так понимал что это работает(и как)Я лишь хотел узнать, где именно ты задаешь кастом нейм мобу, а только что мне один человек объяснил, что такое можно задать вручную.Теперь я всё понял, создаем моба, одним из десятка способов задаем ему кастом нейм и работаем дальше.Если учитывать что TS'у нужно было глобально "усложнить" мобов, то мой вариант подходит лучше, так как работает через конфиг и действует на всех мобов.В остальном же - твой вариант лучше, так как работает только на определённых мобах, что существенно снижает нагрузку на сервер.
У моба 300 хп, явно он не стандартный там, значит спавнился плагином.
 
кастом нейм мобу
В принципе он нахер не нужен, если мы его спауним. Просто можно брать его UUID и хранить/сверяться по нему.
Жуй.
Java:
    @EventHandler
    public void on(EntityDamageByEntityEvent e) {
        UUID uuid = e.getEntity().getUniqueId();
        if(mob.get(uuid)!=null) {
            //Что то делаем
            mob.remove(uuid);
        }
    }
Пруфит!
Проглатывай ;)
if (mob.contains(uuid)) {
У мобов нету UUID карл, или...
Они были всегда. Да даже сейчас любая сущность имеет два id - uuid (постоянный, не меняется), и entityId (порядковый номер загрузки энтити).


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


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


А вообще я так и не понимаю, зачем вы ему это разжевываете. У него зубки вроде есть, челюсть не отвалилась - жевать умеет.
Кому? ТС?
 
Я вам не мешаю? О_о
Ребят, сделать-то сделал, но меня волнует одно - миньон моба спаунится на КАЖДЫЙ удар. Мне нужно, чтобы как только его здоровье упало меньше, чем на 300 - выпрыгивает толпа... Паучков скажем. Сразу
 
Ребят, сделать-то сделал, но меня волнует одно - миньон моба спаунится на КАЖДЫЙ удар. Мне нужно, чтобы как только его здоровье упало меньше, чем на 300 - выпрыгивает толпа... Паучков скажем. Сразу
Java:
    @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);
            }
        }
    }
 
Последнее редактирование:
Java:
    @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);
            }
        }
    }
это будет происходить каждый удар, когда здоровье упадет <300
 
Вот вам усложненный вариант. То что было на видосе. При любой силе дамага, зомбяра соспавнит все этапы миньенов.
Java:
    @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));
        }
    }
 
Последнее редактирование:
Вот вам усложненный вариант. То что было на видосе. При любой силе дамага, зомбяра соспавнит все этапы миньенов.
Java:
    @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));
        }
    }
Почему бы не сделать вот так?
Java:
    @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ы?
 
Java:
    @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);
            }
        }
    }
Вот вам усложненный вариант. То что было на видосе. При любой силе дамага, зомбяра соспавнит все этапы миньенов.
Java:
    @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));
        }
    }
Фу-фу-фу. Entity же Metadatable. Кидаешь мету в энтитю, и все дела. И игрок не видит разницы, и работа выполняется.
 
Назад
Верх