Войти или зарегистрироваться

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

  • Автор темы Автор темы 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);
        }
    }
 
Код:
           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;
            }
Что?
 
Ничего не понял из вашего кода.
 
ок щас добавлю поеснение
Ничего не понял из вашего кода.

Код:
    @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 идет цифра которую я даю командой
это вообще решаемо?
 
Не знаю. Вот по этому:
Ничего не понятно.

/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
 
Определяйте уровень по нику. (getCustomName)
 
Определяйте уровень по нику. (getCustomName)

У меня зомби спавнится ему присваивается ник и эквип из EntityExplodeEvent затем присваивается имя из команды
мне хватит того чтобы хоть как то изменить порядок этих действий
 
А, ну да. Тогда выдавайте экипировку сразу при спавне, какие проблемы?
 
А, ну да. Тогда выдавайте экипировку сразу при спавне, какие проблемы?

лол у меня 100 уровней ну быть точнее 10 и я пропишу дважды эту махину? да и в добавок через команду это будет не так просто...
есть все же какой то способ передать значения аргумента в другой метод
 
Не понял, в чем проблема. У нас же при spawnCreature возвращается LivingEntity, так сохраняйте его и одевайте броню.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх