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

Они были всегда. Да даже сейчас любая сущность имеет два id - uuid (постоянный, не меняется), и entityId (порядковый номер загрузки энтити).У мобов нету UUID карл, или...
Так мой вариант и был с конфигом uuid. Но остальным индивидуумам это не понравилось.В принципе он нахер не нужен, если мы его спауним. Просто можно брать его UUID и хранить/сверяться по нему.
Проглатывай
if (mob.contains(uuid)) {Они были всегда. Да даже сейчас любая сущность имеет два id - uuid (постоянный, не меняется), и entityId (порядковый номер загрузки энтити).
А вообще я так и не понимаю, зачем вы ему это разжевываете. У него зубки вроде есть, челюсть не отвалилась - жевать умеет.
Кому? ТС?В принципе он нахер не нужен, если мы его спауним. Просто можно брать его UUID и хранить/сверяться по нему.
Проглатывай
if (mob.contains(uuid)) {Они были всегда. Да даже сейчас любая сущность имеет два id - uuid (постоянный, не меняется), и entityId (порядковый номер загрузки энтити).
А вообще я так и не понимаю, зачем вы ему это разжевываете. У него зубки вроде есть, челюсть не отвалилась - жевать умеет.
Ребят, сделать-то сделал, но меня волнует одно - миньон моба спаунится на КАЖДЫЙ удар. Мне нужно, чтобы как только его здоровье упало меньше, чем на 300 - выпрыгивает толпа... Паучков скажем. Сразу
@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);
}
}
}
это будет происходить каждый удар, когда здоровье упадет <300Java:@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
После первой итерации кастомное имя изменяется, соотв. при след. итерации этого не произойдёт.это будет происходить каждый удар, когда здоровье упадет <300
Не заметил, простите. Был не правПосле первой итерации кастомное имя изменяется, соотв. при след. итерации этого не произойдёт.

@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)); } }
@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);
}
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); } } }
Фу-фу-фу. Entity же Metadatable. Кидаешь мету в энтитю, и все дела. И игрок не видит разницы, и работа выполняется.Вот вам усложненный вариант. То что было на видосе. При любой силе дамага, зомбяра соспавнит все этапы миньенов.
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)); } }
Можно ещё через нбт попробовать.Через API PowerNBT или напрямую.Фу-фу-фу. Entity же Metadatable. Кидаешь мету в энтитю, и все дела. И игрок не видит разницы, и работа выполняется.