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

.

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

Статус темы:
Закрыта.
  1. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    .
     
    Последнее редактирование: 27 янв 2020
  2. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    То что на скрине можно назвать иерархией вызова вашего метода. Самой ошибки нет.
     
  3. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    event.getLocation()? разве нужно не event.getEntity().getLocation()?
    И как ты вообще спавнишь энтити из евента? У тебя идёт бесконечный спавн мобов, который ты отменяешь.
    Код:
        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());
        }
    
    пробуй.
     
  4. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Упс, да, до меня дошло..
    Типо когда я спавню энтити, метод вызывается заново и так до бесконочности...
    Ладно, я тогда напишу чего я хотел сделать этим методом..
    Я хотел что-бы в аду, всегда спавнились хардкорные мобы!
    Но проблема в том что там спавняться только свино-зомби, гасты. и пару других мобов...
    В общем можно ли сделать это как-то менее костыльно чем делаю я?
    P.S. Код выше сейчас протестирую, но так как я понял свою ошибку, почти уверен что он будет работать, поэтому вопрос только в том, можно ли сделать это менее костыльно..
     
  5. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Ну а разве мой код очень костыльный? У меня даже идей нету как по другому сделать.
    И скорее всего нужно сначала проверить находитьсч ли моб в аду, а потом уже отменять евент и спавнить мобов.
     
  6. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Не очень костыльно, но так по моему лучше)
    Код:
        @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);
    

    А впрочем не важно, это тоже не работает :D
    Хотя сейчас я не понимаю, ведь метод не должен вызыватся овер мильйон раз?
    Я же устанавливаю ему ник, а потом если ник такой - то 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);
    
     
  7. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Потому что поидее сначало энтити спавниться, а потом ее изменяет. Попробуй в System.out выводить ее харки во время спавна моба.
     
  8. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Проблема в том, что ошибка сыпется раз 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 и мое имя не успевает присвоится?
     
  9. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Я же так и написал. Что сначало спавнится моб, а потом изменяется
     
  10. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    А тьху, не понял сразу...
    Блин, так это очень плохо...
     
  11. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    В чём проблема юзать лист с локацией, которую всёравно удаляешь оттуда сразу?
     
  12. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Да я вообще не люблю хранить локацию энтитей..
    У меня можно так сказать фобия этого))
    Но ладно, как я вижу, других вариантов нет...
    Ну да ладно, сделал с локацией, все зароботало!
     
  13. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Не локацию лучше в лист, а UUID энтити. Это куда лучше.
     
  14. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Так её не получить ДО спавна ведь. А если получить после спавна моба, то тупо опять пойдёт бесконечный спавн мобов.
     
  15. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Вполне таки можно получить, ибо сначала создаётся Entity, а потом только вызывается эвент.
     
  16. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Да ладно, работает и работает...
    У меня теперь другой вопрос (дабы не плодить темы) как загрузить мир с именем String name;
    при условии что он находится там же где и все остальные миры (т.е. в папке сервера).
    Именно не сгенерировать и т.д., мир полностью готов, надо только загрузить!
     
  17. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Не получается. Там моментально кастуется спавн евент. Тоесть не успевает добавиться uuid в лист, чтобы проверить потом.
    http://pastebin.com/DrXZi9kb

    Код:
        @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());
        }
    Ниодного "AA" нету.
    Код:
    WorldCreator wc = new WorldCreator("asd");
    World w = Bukkit.createWorld(wc);
    Если мир есть, то его поидее должно тупо загрузить.
     
  18. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    asd - имя мира?
     
  19. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    da
     
  20. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А это странно. Хотя, хрен его знает как оно будет работать.
     
Статус темы:
Закрыта.

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