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

Проблема с кодом

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    хотя предполагаю что он спавнится получает имя эквип затем переименовывается на мой выбранный уровень
     
  2. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
  3. Автор темы
    dnebik

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    Код:
        @EventHandler
        public void onCreatureSpawn(CreatureSpawnEvent event){
            Random rand = new Random();
            LivingEntity ent = event.getEntity();
            if (event.getEntityType() == EntityType.ZOMBIE) {
                int i = 1;
                int p = 90;
                int level = 0;
                int chans = rand.nextInt(100) + 1;
                while(chans >= i){
                    chans = rand.nextInt(100) + 1;
                    if(i < 5)
                        i = i+1;
                    else
                        if(i < 17)
                            i = i+4;                 
                        else
                            if(i == 17)                      
                                i = 100;
                    p = p-10;
                }
                level = rand.nextInt(10) + 1 + p;
                ent.setCustomName("Goblin " + ChatColor.GREEN + "[" + ChatColor.GOLD + level + " LVL" + ChatColor.GREEN + "]" );
                ((Zombie)ent).setVillager(true);
                ((Zombie)ent).setBaby(false);
                ent.getEquipment().clear();
                if (level < 10){
                    chans = rand.nextInt(100) + 1;
                    if(chans >= 80){
                        ent.getEquipment().setChestplate(new ItemStack(Material.LEATHER_CHESTPLATE));
                    }
                    ent.getEquipment().setBoots(new ItemStack(Material.LEATHER_BOOTS));
                    ent.getEquipment().setItemInHand(new ItemStack(Material.WOOD_SWORD));
                }else.....  //и т.п.
             
                int number = rand.nextInt(100) + 1;
                ent.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 48384000, 2));
                if(number >= 40)
                {
                    ent.removePotionEffect(PotionEffectType.SLOW);
                    ent.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 48384000, 3));
                }
                ent.setCanPickupItems(false);
            }
        }
     
  4. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Код:
               while(chans >= i){
                    chans = rand.nextInt(100) + 1;
                    if(i < 5)
                        i = i+1;
                    else
                        if(i < 17)
                            i = i+4;                
                        else
                            if(i == 17)                    
                                i = 100;
                    p = p-10;
                }
    Что?
     
  5. Автор темы
    dnebik

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    лал.. это рандом уровня с шансом в порядке возрастания
    главное работает xD
     
  6. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Ничего не понял из вашего кода.
     
  7. Автор темы
    dnebik

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    ок щас добавлю поеснение
    Код:
        @EventHandler
        public void onCreatureSpawn(CreatureSpawnEvent event){
            Random rand = new Random();
            LivingEntity ent = event.getEntity();
            if (event.getEntityType() == EntityType.ZOMBIE) {
                int i = 1;
                int p = 90;
                int level = 0;
                int chans = rand.nextInt(100) + 1;
              //начало генирации рандомного уровня
                while(chans >= i){                  
                    chans = rand.nextInt(100) + 1;
                    if(i < 5)
                        i = i+1;
                    else
                        if(i < 17)
                            i = i+4;               
                        else
                            if(i == 17)                     
                                i = 100;
                    p = p-10;
                }                                
                level = rand.nextInt(10) + 1 + p;
                //конец генирации
                //дальше даем имя с уровнем
                ent.setCustomName("Goblin " + ChatColor.GREEN + "[" + ChatColor.GOLD + level + " LVL" + ChatColor.GREEN + "]" );
                //спавн только жителя зомби и не даем спавн мини зомби ,и не даем чтобы зомби подбирал вещи
                ((Zombie)ent).setVillager(true);
                ((Zombie)ent).setBaby(false);
                ent.setCanPickupItems(false);
                //если спавнится зомби с эквипом убрать эквип
                ent.getEquipment().clear();
                //даем эквип каждому 10 уровню
                if (level < 10){
                    chans = rand.nextInt(100) + 1;
                    if(chans >= 80){
                        ent.getEquipment().setChestplate(new ItemStack(Material.LEATHER_CHESTPLATE));
                    }
                    ent.getEquipment().setBoots(new ItemStack(Material.LEATHER_BOOTS));
                    ent.getEquipment().setItemInHand(new ItemStack(Material.WOOD_SWORD));
                }else.....  //и т.п.
                //даю зомюи поушен на его замедление
                int number = rand.nextInt(100) + 1;
                ent.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 48384000, 2));
                if(number >= 40)
                {
                    ent.removePotionEffect(PotionEffectType.SLOW);
                    ent.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 48384000, 3));
                }
            }
        }

    я уже понял в чем ошибка...
    но не знаю как это решается...
    мне надо если команда вводится то генирация не сробатывает и в переменную level идет цифра которую я даю командой
    это вообще решаемо?
     
  8. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Не знаю. Вот по этому:
    Ничего не понятно.
     
  9. Автор темы
    dnebik

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    /command player level
    где player - игрок у которого заспавнится зомби
    level - уровень зомби
    например /sz dneb 56
    тогда спавнится зомби с именем Goblin[56 LVL]
    и в зависимости от уровня дается эквип
    там у него будет металлический сет и алмазный мечь к примеру ну позже добавлю жизни и наносимый урон

    так вот мне надо как то сделать чтобы при вводе /sz dneb 56
    вот эта часть кода отменялась:
    Код:
                int i = 1;
                int p = 90;
                int level = 0;
                int chans = rand.nextInt(100) + 1;
                while(chans >= i){
                    chans = rand.nextInt(100) + 1;
                    if(i < 5)
                        i = i+1;
                    else
                        if(i < 17)
                            i = i+4;               
                        else
                            if(i == 17)                     
                                i = 100;
                    p = p-10;
                }
                level = rand.nextInt(10) + 1 + p;
    и вместо этого всего level присваивался значению в команде в данном случае 56
     
  10. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Определяйте уровень по нику. (getCustomName)
     
  11. Автор темы
    dnebik

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    У меня зомби спавнится ему присваивается ник и эквип из EntityExplodeEvent затем присваивается имя из команды
    мне хватит того чтобы хоть как то изменить порядок этих действий
     
  12. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    А, ну да. Тогда выдавайте экипировку сразу при спавне, какие проблемы?
     
  13. Автор темы
    dnebik

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

    Баллы:
    66
    Имя в Minecraft:
    dnebik
    лол у меня 100 уровней ну быть точнее 10 и я пропишу дважды эту махину? да и в добавок через команду это будет не так просто...
    есть все же какой то способ передать значения аргумента в другой метод
     
  14. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Не понял, в чем проблема. У нас же при spawnCreature возвращается LivingEntity, так сохраняйте его и одевайте броню.
     
  15. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Причем скорее всего метод getPlayer останется, это просто временная мера, чтобы все были в курсе перехода на UUID.
     
Статус темы:
Закрыта.

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