- Баллы
- 123
.
Последнее редактирование:
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
public ArrayList<Location> loc = new ArrayList<Location>();
public ArrayList<EntityType> entities = new ArrayList<EntityType>(){{
add(EntityType.CAVE_SPIDER);
add(EntityType.SPIDER);
add(EntityType.ENDERMAN);
add(EntityType.CREEPER);
add(EntityType.BLAZE);
add(EntityType.SKELETON);
add(EntityType.ZOMBIE);
add(EntityType.PIG_ZOMBIE);
add(EntityType.MAGMA_CUBE);
add(EntityType.SLIME);
add(EntityType.WITCH);
}};
public ArrayList<EntityType> entities2 = new ArrayList<EntityType>(){{
add(EntityType.SKELETON);
add(EntityType.ZOMBIE);
add(EntityType.PIG_ZOMBIE);
}};
@EventHandler
public void HARDCORIZE(CreatureSpawnEvent event) {
if (loc.contains(event.getLocation())) return;
event.setCancelled(true);
loc.add(event.getLocation());
LivingEntity entity = (LivingEntity)event.getLocation().getWorld().spawnEntity(event.getLocation(),entities.get(new Random().nextInt(entities.size())));
if (event.getLocation().getBlock().getBiome() == Biome.HELL) {
entity.setCustomName(ChatColor.translateAlternateColorCodes('&', "&cHARDCORE &2MOB"));
entity.setCustomNameVisible(true);
entity.setMaxHealth(60);
if (entities2.contains(entity.getType())) {
entity.getEquipment().setHelmet(new ItemStack(Material.DIAMOND_HELMET));
entity.getEquipment().setChestplate(new ItemStack(Material.DIAMOND_CHESTPLATE));
entity.getEquipment().setLeggings(new ItemStack(Material.DIAMOND_LEGGINGS));
entity.getEquipment().setBoots(new ItemStack(Material.DIAMOND_BOOTS));
entity.getEquipment().setItemInMainHand(new ItemStack(Material.DIAMOND_SWORD));
}
}
loc.remove(event.getLocation());
}
Ну а разве мой код очень костыльный? У меня даже идей нету как по другому сделать.Упс, да, до меня дошло..
Типо когда я спавню энтити, метод вызывается заново и так до бесконочности...
Ладно, я тогда напишу чего я хотел сделать этим методом..
Я хотел что-бы в аду, всегда спавнились хардкорные мобы!
Но проблема в том что там спавняться только свино-зомби, гасты. и пару других мобов...
В общем можно ли сделать это как-то менее костыльно чем делаю я?
P.S. Код выше сейчас протестирую, но так как я понял свою ошибку, почти уверен что он будет работать, поэтому вопрос только в том, можно ли сделать это менее костыльно..
Не очень костыльно, но так по моему лучше)Ну а разве мой код очень костыльный? У меня даже идей нету как по другому сделать.
И скорее всего нужно сначала проверить находитьсч ли моб в аду, а потом уже отменять евент и спавнить мобов.
@EventHandler
public void HARDCORIZE(CreatureSpawnEvent event) {
if (event.getEntity().getCustomName() != null && event.getEntity().getCustomName().equalsIgnoreCase(CUSTOM_NAME)) return;
if (event.getEntity().getLocation().getBlock().getBiome() == Biome.HELL) {
event.setCancelled(true);

@EventHandler
public void HARDCORIZE(CreatureSpawnEvent event) {
if (event.getEntity().getCustomName() != null && event.getEntity().getCustomName().equals(CUSTOM_NAME)) return;
if (event.getEntity().getLocation().getBlock().getBiome() == Biome.HELL) {
event.setCancelled(true);
LivingEntity entity = (LivingEntity)
event.getLocation().getWorld().spawnEntity(event.getLocation(), entities.get(new Random().nextInt(entities.size())));
entity.setCustomName(CUSTOM_NAME);
entity.setCustomNameVisible(true);
Потому что поидее сначало энтити спавниться, а потом ее изменяет. Попробуй в System.out выводить ее харки во время спавна моба.Не очень костыльно, но так по моему лучше)
Код:@EventHandler public void HARDCORIZE(CreatureSpawnEvent event) { if (event.getEntity().getCustomName() != null && event.getEntity().getCustomName().equalsIgnoreCase(CUSTOM_NAME)) return; if (event.getEntity().getLocation().getBlock().getBiome() == Biome.HELL) { event.setCancelled(true);
А впрочем не важно, это тоже не работает
Хотя сейчас я не понимаю, ведь метод не должен вызыватся овер мильйон раз?
Я же устанавливаю ему ник, а потом если ник такой - то return делаю..
Код:@EventHandler public void HARDCORIZE(CreatureSpawnEvent event) { if (event.getEntity().getCustomName() != null && event.getEntity().getCustomName().equals(CUSTOM_NAME)) return; if (event.getEntity().getLocation().getBlock().getBiome() == Biome.HELL) { event.setCancelled(true); LivingEntity entity = (LivingEntity) event.getLocation().getWorld().spawnEntity(event.getLocation(), entities.get(new Random().nextInt(entities.size()))); entity.setCustomName(CUSTOM_NAME); entity.setCustomNameVisible(true);
Проблема в том, что ошибка сыпется раз 100 в секунду, поэтому выводить чет в консоль - бессмысленно, я это врядли вижу...Потому что поидее сначало энтити спавниться, а потом ее изменяет. Попробуй в System.out выводить ее харки во время спавна моба.
@EventHandler
public void HARDCORIZE(CreatureSpawnEvent event) {
if (event.getEntity().getCustomName() != null && event.getEntity().getCustomName().equals(CUSTOM_NAME)) return;
if (event.getEntity().getLocation().getBlock().getBiome() == Biome.HELL) {
System.out.println("name=" + event.getEntity().getCustomName());
event.setCancelled(true);
LivingEntity entity = (LivingEntity)
event.getLocation().getWorld().spawnEntity(event.getLocation(), entities.get(new Random().nextInt(entities.size())));
entity.setCustomName(CUSTOM_NAME);
entity.setCustomNameVisible(true);
entity.setMaxHealth(60);
entity.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 40, 1));
if (entities2.contains(entity.getType())) {
entity.getEquipment().setHelmet(HELMET);
entity.getEquipment().setChestplate(CHESTPLATE);
entity.getEquipment().setLeggings(LEGGINGS);
entity.getEquipment().setBoots(BOOTS);
entity.getEquipment().setItemInMainHand(SWORD);
}
if (entities3.contains(entity.getType())) {
entity.getEquipment().setItemInMainHand(BOW);
}
}
}
Я же так и написал. Что сначало спавнится моб, а потом изменяетсяПроблема в том, что ошибка сыпется раз 100 в секунду, поэтому выводить чет в консоль - бессмысленно, я это врядли вижу...
Но попытаюсь..
И я не совсем понял какие именно характеристики выводить..
Попробовал выводить имя, получаю кучу строк name=null
Код:@EventHandler public void HARDCORIZE(CreatureSpawnEvent event) { if (event.getEntity().getCustomName() != null && event.getEntity().getCustomName().equals(CUSTOM_NAME)) return; if (event.getEntity().getLocation().getBlock().getBiome() == Biome.HELL) { System.out.println("name=" + event.getEntity().getCustomName()); event.setCancelled(true); LivingEntity entity = (LivingEntity) event.getLocation().getWorld().spawnEntity(event.getLocation(), entities.get(new Random().nextInt(entities.size()))); entity.setCustomName(CUSTOM_NAME); entity.setCustomNameVisible(true); entity.setMaxHealth(60); entity.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 40, 1)); if (entities2.contains(entity.getType())) { entity.getEquipment().setHelmet(HELMET); entity.getEquipment().setChestplate(CHESTPLATE); entity.getEquipment().setLeggings(LEGGINGS); entity.getEquipment().setBoots(BOOTS); entity.getEquipment().setItemInMainHand(SWORD); } if (entities3.contains(entity.getType())) { entity.getEquipment().setItemInMainHand(BOW); } } }
Стоп я тут подумал...
А что если, когда я вызываю метод spawnEntity моментально создается новый CreatureSpawnEvent и мое имя не успевает присвоится?
А тьху, не понял сразу...Я же так и написал. Что сначало спавнится моб, а потом изменяется
Да я вообще не люблю хранить локацию энтитей..В чём проблема юзать лист с локацией, которую всёравно удаляешь оттуда сразу?
Так её не получить ДО спавна ведь. А если получить после спавна моба, то тупо опять пойдёт бесконечный спавн мобов.Не локацию лучше в лист, а UUID энтити. Это куда лучше.
Вполне таки можно получить, ибо сначала создаётся Entity, а потом только вызывается эвент.Так её не получить ДО спавна ведь. А если получить после спавна моба, то тупо опять пойдёт бесконечный спавн мобов.
Не получается. Там моментально кастуется спавн евент. Тоесть не успевает добавиться uuid в лист, чтобы проверить потом.Вполне таки можно получить, ибо сначала создаётся Entity, а потом только вызывается эвент.
@EventHandler
public void HARDCORIZE(CreatureSpawnEvent event) {
event.setCancelled(true);
System.out.print("Event: " + event.getEntity().getUniqueId());
if (loc.contains(event.getEntity().getUniqueId())) {
System.out.print("AA");
return;
}
LivingEntity entity = (LivingEntity)event.getLocation().getWorld().spawnEntity(event.getLocation(),entities.get(new Random().nextInt(entities.size())));
System.out.print("Entity: "+entity.getUniqueId());
loc.add(entity.getUniqueId());
}
Да ладно, работает и работает...
У меня теперь другой вопрос (дабы не плодить темы) как загрузить мир с именем String name;
при условии что он находится там же где и все остальные миры (т.е. в папке сервера).
Именно не сгенерировать и т.д., мир полностью готов, надо только загрузить!
WorldCreator wc = new WorldCreator("asd");
World w = Bukkit.createWorld(wc);
asd - имя мира?Не получается. Там моментально кастуется спавн евент. Тоесть не успевает добавиться uuid в лист, чтобы проверить потом.
http://pastebin.com/DrXZi9kb
Ниодного "AA" нету.Java:@EventHandler public void HARDCORIZE(CreatureSpawnEvent event) { event.setCancelled(true); System.out.print("Event: " + event.getEntity().getUniqueId()); if (loc.contains(event.getEntity().getUniqueId())) { System.out.print("AA"); return; } LivingEntity entity = (LivingEntity)event.getLocation().getWorld().spawnEntity(event.getLocation(),entities.get(new Random().nextInt(entities.size()))); System.out.print("Entity: "+entity.getUniqueId()); loc.add(entity.getUniqueId()); }
Если мир есть, то его поидее должно тупо загрузить.Код:WorldCreator wc = new WorldCreator("asd"); World w = Bukkit.createWorld(wc);
daasd - имя мира?
А это странно. Хотя, хрен его знает как оно будет работать.Не получается. Там моментально кастуется спавн евент. Тоесть не успевает добавиться uuid в лист, чтобы проверить потом.
http://pastebin.com/DrXZi9kb
Ниодного "AA" нету.