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

Помогите Double EntityDamageByEntityEvent

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

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

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Почему, когда зомби бьет игрока, то EntityDamageByEntityEvent срабатывает дважды? Я делаю нестандартную броню и за 1 удар отнимается 2 прочности, а еще нету таймаута ударов, короче щя залью видео.
    Вот моя броня:
    Вот обычная:
     
    Последнее редактирование: 19 авг 2014
  2. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Спасибо за то что не потрудились грамотно составить тему, но ответить, мне кажется тут можно только взглянув на код
    Ваша "Durability" я так понимаю храниться в Lore?
     
  3. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Вот код:
    Код:
    @EventHandler
        public void onDamage(EntityDamageByEntityEvent event)
        {     
         
    if ((event.getEntity() instanceof Player)) {
                Player p = (Player) event.getEntity();
                int finalLvl = 0;
                int finalPoint = 0;
                if (p.getEquipment().getHelmet() != null){
                    ItemStack Helmet = p.getEquipment().getHelmet();
                    Material type = Helmet.getType();
                    if (type == Material.LEATHER_HELMET || type == Material.CHAINMAIL_HELMET || type == Material.IRON_HELMET){
                        finalPoint = finalPoint + 2;
                    }
                    if (type == Material.GOLD_HELMET || type == Material.DIAMOND_HELMET){
                        finalPoint = finalPoint + 3;
                    }
                    if (Helmet.containsEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL)){
                        finalLvl = finalLvl + Helmet.getEnchantmentLevel(Enchantment.PROTECTION_ENVIRONMENTAL);
                    }
                    if (Helmet.hasItemMeta() && Helmet.getItemMeta().hasLore() && 
                            Helmet.getItemMeta().getLore().get(0).equals(ChatColor.DARK_GRAY + "Armor")){
                        ItemMeta meta = Helmet.getItemMeta();
                        List<String> Lore = Helmet.getItemMeta().getLore();
                        String durability = ChatColor.stripColor(Lore.get(1));
                        Integer dur = Integer.valueOf(durability.split("/")[0]);
                       Integer maxdur = Integer.valueOf(durability.split("/")[1]);
                       if (dur <= 0) {
                          p.getEquipment().setHelmet(null);
                       } 
                       else{
                       Random rand = new Random();
                          int r = rand.nextInt(100) + 1;                      
                            if (Helmet.getEnchantments().containsKey(Enchantment.DURABILITY)){                 
                              float chance = 100/(Helmet.getEnchantmentLevel(Enchantment.DURABILITY) + 1);
                                  if (r > 0 && r < (int) chance){
                                      dur = dur - 1;
                                  }
                           }
                           else {
                                  dur = dur - 1;
                              }
                              durability = ChatColor.WHITE + Integer.toString(dur) + "/" + Integer.toString(maxdur);
                              Lore.set(1, durability);
                              meta.setLore(Lore);
                              Helmet.setItemMeta(meta);
                           Helmet.setDurability((short) 1);
                       }
                    }
                }
                if (p.getEquipment().getChestplate() != null){
                    ItemStack Chestplate = p.getEquipment().getChestplate();
                    Material type = Chestplate.getType();
                    if (type == Material.LEATHER_CHESTPLATE){
                        finalPoint = finalPoint + 5;
                    }
                    if (type == Material.CHAINMAIL_CHESTPLATE || type == Material.IRON_CHESTPLATE){
                        finalPoint = finalPoint + 6;
                    }
                    if (type == Material.GOLD_CHESTPLATE || type == Material.DIAMOND_CHESTPLATE){
                        finalPoint = finalPoint + 8;
                    }
                    if (Chestplate.containsEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL)){
                        finalLvl = finalLvl + Chestplate.getEnchantmentLevel(Enchantment.PROTECTION_ENVIRONMENTAL);
                    }
                    if (Chestplate.hasItemMeta() && Chestplate.getItemMeta().hasLore() && 
                            Chestplate.getItemMeta().getLore().get(0).equals(ChatColor.DARK_GRAY + "Armor")){
                        ItemMeta meta = Chestplate.getItemMeta();
                        List<String> Lore = Chestplate.getItemMeta().getLore();
                        String durability = ChatColor.stripColor(Lore.get(1));
                        Integer dur = Integer.valueOf(durability.split("/")[0]);
                       Integer maxdur = Integer.valueOf(durability.split("/")[1]);
                       if (dur <= 0) {
                          p.getEquipment().setChestplate(null);
                       } 
                       else{
                       Random rand = new Random();
                          int r = rand.nextInt(100) + 1;                      
                            if (Chestplate.getEnchantments().containsKey(Enchantment.DURABILITY)){                 
                              float chance = 100/(Chestplate.getEnchantmentLevel(Enchantment.DURABILITY) + 1);
                                  if (r > 0 && r < (int) chance){
                                      dur = dur - 1;
                                  }
                           }
                           else {
                                  dur = dur - 1;
                              }
                              durability = ChatColor.WHITE + Integer.toString(dur) + "/" + Integer.toString(maxdur);
                              Lore.set(1, durability);
                              meta.setLore(Lore);
                              Chestplate.setItemMeta(meta);
                           Chestplate.setDurability((short) 1);
                       }
                    }
                }
                if (p.getEquipment().getLeggings() != null){
                    ItemStack Leggings = p.getEquipment().getLeggings();
                    Material type = Leggings.getType();
                    if (type == Material.LEATHER_LEGGINGS){
                        finalPoint = finalPoint + 4;
                    }
                    if (type == Material.CHAINMAIL_LEGGINGS || type == Material.IRON_LEGGINGS){
                        finalPoint = finalPoint + 5;
                    }
                    if (type == Material.GOLD_LEGGINGS || type == Material.DIAMOND_LEGGINGS){
                        finalPoint = finalPoint + 6;
                    }
                    if (Leggings.containsEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL)){
                        finalLvl = finalLvl +  Leggings.getEnchantmentLevel(Enchantment.PROTECTION_ENVIRONMENTAL);
                    }
                    if (Leggings.hasItemMeta() && Leggings.getItemMeta().hasLore() && 
                            Leggings.getItemMeta().getLore().get(0).equals(ChatColor.DARK_GRAY + "Armor")){
                        ItemMeta meta = Leggings.getItemMeta();
                        List<String> Lore = Leggings.getItemMeta().getLore();
                        String durability = ChatColor.stripColor(Lore.get(1));
                        Integer dur = Integer.valueOf(durability.split("/")[0]);
                       Integer maxdur = Integer.valueOf(durability.split("/")[1]);
                       if (dur <= 0) {
                          p.getEquipment().setLeggings(null);
                       } 
                       else{
                       Random rand = new Random();
                          int r = rand.nextInt(100) + 1;                      
                            if (Leggings.getEnchantments().containsKey(Enchantment.DURABILITY)){                 
                              float chance = 100/(Leggings.getEnchantmentLevel(Enchantment.DURABILITY) + 1);
                                  if (r > 0 && r < (int) chance){
                                      dur = dur - 1;
                                  }
                           }
                           else {
                                  dur = dur - 1;
                              }
                              durability = ChatColor.WHITE + Integer.toString(dur) + "/" + Integer.toString(maxdur);
                              Lore.set(1, durability);
                              meta.setLore(Lore);
                              Leggings.setItemMeta(meta);
                           Leggings.setDurability((short) 1);
                       }
                    }
                }
                if (p.getEquipment().getBoots() != null){
                    ItemStack Boots = p.getEquipment().getBoots();
                    Material type = Boots.getType();
                    if (type == Material.LEATHER_BOOTS){
                        finalPoint = finalPoint + 1;
                    }
                    if (type == Material.CHAINMAIL_BOOTS || type == Material.IRON_BOOTS){
                        finalPoint = finalPoint + 2;
                    }
                    if (type == Material.GOLD_BOOTS || type == Material.DIAMOND_BOOTS){
                        finalPoint = finalPoint + 3;
                    }
                    if (Boots.containsEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL)){
                        finalLvl = finalLvl + Boots.getEnchantmentLevel(Enchantment.PROTECTION_ENVIRONMENTAL);
                    }
                    if (Boots.hasItemMeta() && Boots.getItemMeta().hasLore() && 
                            Boots.getItemMeta().getLore().get(0).equals(ChatColor.DARK_GRAY + "Armor")){
                        ItemMeta meta = Boots.getItemMeta();
                        List<String> Lore = Boots.getItemMeta().getLore();
                        String durability = ChatColor.stripColor(Lore.get(1));
                        Integer dur = Integer.valueOf(durability.split("/")[0]);
                       Integer maxdur = Integer.valueOf(durability.split("/")[1]);
                       if (dur <= 0) {
                          p.getEquipment().setBoots(null);
                       } 
                       else{
                       Random rand = new Random();
                          int r = rand.nextInt(100) + 1;                      
                            if (Boots.getEnchantments().containsKey(Enchantment.DURABILITY)){                 
                              float chance = 100/(Boots.getEnchantmentLevel(Enchantment.DURABILITY) + 1);
                                  if (r > 0 && r < (int) chance){
                                      dur = dur - 1;
                                  }
                           }
                           else {
                                  dur = dur - 1;
                              }
                              durability = ChatColor.WHITE + Integer.toString(dur) + "/" + Integer.toString(maxdur);
                              Lore.set(1, durability);
                              meta.setLore(Lore);
                              Boots.setItemMeta(meta);
                           Boots.setDurability((short) 1);
                       }
                    }
                }
                double health = p.getHealth();
                double defence = finalLvl / 2 + finalPoint / 1.5;
                //getLogger().info("defence: " + Double.toString(defence));
                //getLogger().info("damage: " + Double.toString(damage));
                if ((defence > damage || defence == damage) & damage != 0){
                    Random rand = new Random();
                    int r = rand.nextInt(100) + 1;
                    if (r > 0 && r < 15 - (int) finalLvl / 4){
                        health = p.getHealth() - 1;
                    }
                    damage = 0;
                } 
                //getLogger().info("bound: " + Double.toString(damage - defence));
                if ((damage > defence) & defence != 0) {
                    if (finalLvl != 0){
                        health = p.getHealth() - (damage - defence) / (finalLvl / 4);
                    } else 
                    if (finalPoint >= 10){
                        health = p.getHealth() - (damage - defence) / (finalPoint / 10);
                        getLogger().info("point = " + Double.toString(finalPoint / 10) + "; final = " + Integer.toString(finalPoint));
                        getLogger().info("HelthD = " +  Double.toString((damage - defence) / (finalPoint / 10)));
                    } 
                    else {
                        health = p.getHealth() - damage;
                    }
                    getLogger().info("level: " + Double.toString(finalLvl / 4));
                    damage = 0;
                }
                if (health >= 0){ p.setHealth(health);}
                else {p.setHealth(0);}
            }
            event.setDamage(damage);
            }
         }
    

    Up!
     
  4. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Попробуй это:
    Код:
    Entity target = event.getEntity()
    if(target instanceof LivingEntity){
        if(target.getNoDamageTicks() > (target.getMaximumNoDamageTicks()/2.0F)){
            return
        }
    }
     
  5. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    А что возвращают методы getNoDamageTicks() и getMaximumNoDamageTicks()? А то я с английским не очень дружу.
    Разобрался, сделал так
    Код:
    if (player.getNoDamageTicks <= 10) {
    //do something
    }
    
    , работает, правда все равно ломается быстрее чем стандартная, но совсем на чуть-чуть.
    @DPOH-VAR, спасибо.
     

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