Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите С выполнением действий для босса.

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

  1. Автор темы
    Puchkoff

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

    Баллы:
    66
    Имя в Minecraft:
    ThePuchk0ff
    Всем привет:)
    Как сделать так, чтобы, когда у "босса" оставалось допустим меньше 4.000 ХП, выполнялось какое-либо действие.

    Код:
    @EventHandler
        public void onBlockIgnite(BlockIgniteEvent event)
        {
            if(!(event.getCause() == IgniteCause.FLINT_AND_STEEL)) return;
            if(!(event.getBlock().getRelative(0,-1,0).getType() == Material.QUARTZ_BLOCK)) return;
            if(!(event.getBlock().getRelative(0,-1,1).getType() == Material.DIAMOND_BLOCK)) return;
            if(!(event.getBlock().getRelative(0,-1,-1).getType() == Material.DIAMOND_BLOCK)) return;
            if(!(event.getBlock().getRelative(1,-1,0).getType() == Material.DIAMOND_BLOCK)) return;
            if(!(event.getBlock().getRelative(-1,-1,0).getType() == Material.DIAMOND_BLOCK)) return;
            if(!(event.getBlock().getRelative(-1,-1,-1).getType() == Material.GLOWSTONE)) return;
            if(!(event.getBlock().getRelative(1,-1,1).getType() == Material.GLOWSTONE)) return;
            if(!(event.getBlock().getRelative(-1,-1,1).getType() == Material.GLOWSTONE)) return;
            if(!(event.getBlock().getRelative(1,-1,-1).getType() == Material.GLOWSTONE)) return;
            Player player = event.getPlayer();
            Block block = event.getBlock();
            Location loc = block.getLocation();
            World world = block.getWorld();
            LivingEntity spawnEntity = (LivingEntity) world.spawnEntity(loc.add(0, 1, 0), EntityType.ZOMBIE);
            ItemStack hand = new ItemStack(Material.DIAMOND_SWORD);
            ItemMeta handMeta = hand.getItemMeta();
            handMeta.setDisplayName(Chat.msg(this.plugin.getConfig().getString("Excallibur.name")));
            handMeta.addEnchant(Enchantment.DAMAGE_ALL, 4, true);
            handMeta.addEnchant(Enchantment.FIRE_ASPECT, 1, true);
            handMeta.setLore(Arrays.asList(new String[] {Chat.msg(this.plugin.getConfig().getString("Excallibur.lore"))}));
            hand.setItemMeta(handMeta);
            spawnEntity.setCustomNameVisible(true);
            spawnEntity.getEquipment().setItemInHand(hand);
            spawnEntity.getEquipment().setItemInHandDropChance(1.0F);
            spawnEntity.getEquipment().setHelmet( new ItemStack(Material.DIAMOND_HELMET) );
            spawnEntity.getEquipment().setChestplate( new ItemStack(Material.DIAMOND_CHESTPLATE) );
            spawnEntity.getEquipment().setLeggings( new ItemStack(Material.DIAMOND_LEGGINGS) );
            spawnEntity.getEquipment().setBoots( new ItemStack(Material.DIAMOND_BOOTS) );
            spawnEntity.setCustomName(Chat.msg(this.plugin.getConfig().getString("Excallibur.boss-name")));
            spawnEntity.setCustomNameVisible(true);
            spawnEntity.setMaxHealth(7500);
            spawnEntity.setHealth(7500);
            player.sendMessage(Chat.msg(this.plugin.getConfig().getString("messages.prefix") + this.plugin.getConfig().getString("messages.boss-spawned") + " &f&kDDD&r " + this.plugin.getConfig().getString("Excallibur.boss-name") + " &f&kDDD"));
        }
    Пробовал:
    Код:
    if(spawnEntity.getHealth() <= 4000)
            {
                //Происходит действие
            }
    Но оно не работает ибо я типичный говно-кодер:rolleyes:
    З.Ы. Я гуглил, но гугл не помог :(
     
  2. Хостинг MineCraft
    <
  3. Freeos

    Freeos Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    freeos
    Тебе нужен EntityDamageByEntityEvent или EntityDamageEvent. Вот если для EntityDamageByEntityEvent: проверяй является ли e.getEntity() зомби (если ты спавнишь зомби). Вот пример:

    Код:
    //Псевдо код
    
    if (e.getEntity().getType() == EntityType.ZOMBIE && e.getEntity().getMaxHealth() == 7500D && e.getEntity().getHealth() <= 4500D) {
    
    //Тут пиши то что тебе нужно
    // 7500D и 4500D - значения типа double, если тебе нужно просто int, то убери в конце D
    
    }
     
  4. Автор темы
    Puchkoff

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

    Баллы:
    66
    Имя в Minecraft:
    ThePuchk0ff
    Теперь это действие выполняется при каждом ударе моба :D
     
  5. TheMrQuake

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

    Баллы:
    66
    Имя в Minecraft:
    TheMrQuake
    Чёт все RPG Стали делать ;D Я вот тоже стал пилить RPG.. бывает...
    Вообщем, попробуй добавлять в хеш инфу.


    Код:
    public static HashMap<String, Integer> Boss = new HashMap<>();
    
    @Override
    public void onEnable(){
    Boss.put("Босс", 0);
    }
    
    
    @EventHandler
    public void BossEvent(EntityDamageByEntityEvent event){
    if (event.getDamager() instanceof Player) {
    final Player p = (Player)event.getDamager();
    LivingEntity entity = (LivingEntity) e.getEntity();
    if (entity.getCustomName().equals("Босс") && entity.getHeath() <=4000 && Boss.get("Босс").equals(0)) {
    Boss.put("Босс", 1);
    
    //Действие
    
    }
    }
    }
    @EventHandler
    public void BossEvent2(EntityDeathEvent event){
    LivingEntity entity = (LivingEntity) e.getEntity();
    if (entity.getCustomName().equals("Босс") && Boss.get("Босс").equals(1)) {
    Boss.put("Босс", 0);
    
    
    }
    }
    }
    }
     
  6. Автор темы
    Puchkoff

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

    Баллы:
    66
    Имя в Minecraft:
    ThePuchk0ff
    Спасибо, сейчас попробую :)
     
  7. Freeos

    Freeos Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    freeos
    Куда ты дел регистрацию эвентов? И в основном, с большой буквы пишутся названия классов, а не переменных.

    Ну и к @Puchkoff. Возможно ты забыл зарегестрировать эвент, в котором ты используешь код, который я тебе давал, то есть это:
     
    Последнее редактирование: 16 фев 2016
  8. Автор темы
    Puchkoff

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

    Баллы:
    66
    Имя в Minecraft:
    ThePuchk0ff
    Не забыл. Просто это действие выполняется при каждом ударе если у этого моба меньше 4к ХП.
    А мне нужно, чтобы это действие выполнялось единожды:)
     
  9. Freeos

    Freeos Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    freeos
    А тогда я немного ошибся. Все такие HashMap тут нужен.
     
  10. TheMrQuake

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

    Баллы:
    66
    Имя в Minecraft:
    TheMrQuake
     

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