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

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

Puchkoff

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

JavaScript:
@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:
З.Ы. Я гуглил, но гугл не помог :(
 
Тебе нужен EntityDamageByEntityEvent или EntityDamageEvent. Вот если для EntityDamageByEntityEvent: проверяй является ли e.getEntity() зомби (если ты спавнишь зомби). Вот пример:

Код:
//Псевдо код

if (e.getEntity().getType() == EntityType.ZOMBIE && e.getEntity().getMaxHealth() == 7500D && e.getEntity().getHealth() <= 4500D) {

//Тут пиши то что тебе нужно
// 7500D и 4500D - значения типа double, если тебе нужно просто int, то убери в конце D

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

Код:
//Псевдо код

if (e.getEntity().getType() == EntityType.ZOMBIE && e.getEntity().getMaxHealth() == 7500D && e.getEntity().getHealth() <= 4500D) {

//Тут пиши то что тебе нужно
// 7500D и 4500D - значения типа double, если тебе нужно просто int, то убери в конце D

}
Теперь это действие выполняется при каждом ударе моба :D
 
Чёт все 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);


}
}
}
}
 
Чёт все 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);


}
}
}
}
Спасибо, сейчас попробую :)
 
Чёт все 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);


}
}
}
}

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

Ну и к @Puchkoff. Возможно ты забыл зарегестрировать эвент, в котором ты используешь код, который я тебе давал, то есть это:
Тебе нужен EntityDamageByEntityEvent или EntityDamageEvent. Вот если для EntityDamageByEntityEvent: проверяй является ли e.getEntity() зомби (если ты спавнишь зомби). Вот пример:

Код:
//Псевдо код

if (e.getEntity().getType() == EntityType.ZOMBIE && e.getEntity().getMaxHealth() == 7500D && e.getEntity().getHealth() <= 4500D) {

//Тут пиши то что тебе нужно
// 7500D и 4500D - значения типа double, если тебе нужно просто int, то убери в конце D

}
 
Последнее редактирование:
Мои глаза... Первое. Куда ты дел регистрацию эвентов? Второе. Зачем HashMap<> Boss? - Это костыль, который не нужен. Третье. В основном, с большой буквы пишутся названия классов, а не переменных. Четвертое. Твой код почти ничем не отличается от того что дал я (а именно, твой костыль, и еще некие подробности).

Ну и к @Puchkoff. Возможно ты забыл зарегестрировать эвент, в котором ты используешь код, который я тебе давал, то есть это:
Не забыл. Просто это действие выполняется при каждом ударе если у этого моба меньше 4к ХП.
А мне нужно, чтобы это действие выполнялось единожды:)
 
Не забыл. Просто это действие выполняется при каждом ударе если у этого моба меньше 4к ХП.
А мне нужно, чтобы это действие выполнялось единожды:)
А тогда я немного ошибся. Все такие HashMap тут нужен.
 
Куда ты дел регистрацию эвентов? И в основном, с большой буквы пишутся названия классов, а не переменных.

Я просто написал пример, а не целый код. Можно было и догадаться добавить регистрацию и т.п.
 
Назад
Верх