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

Помогите Урон предмета

Discussion in 'Разработка плагинов для новичков' started by kompozitor, Nov 8, 2016.

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

    kompozitor Ньюби

    Trophy Points:
    1
    Имя в Minecraft:
    Kompozitor
    Итак. Мне нужно узнать какой урон наносит предмет в ведущей руке при взаимодействии с блоком на лкм.
    Собственно сам процесс взаимодействия уже реализован при помощи interact'a.
    Но интересует механизм получения урона от данного предмета с учетом зачарки. Возможно ли получить без каких-либо костылей, типа записи урона каждого предмета в конфиг? (Пока только такой вариант придумал)
    Или же стоит использовать другой ивент? Или я просто слепой и за несколько часов не нашел нужный метод/ответ...
     
  2. Хостинг MineCraft
    <
  3. _MediaNik_

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

    Trophy Points:
    46
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    EntityDamageEvent?
     
  4. Автор темы
    kompozitor

    kompozitor Ньюби

    Trophy Points:
    1
    Имя в Minecraft:
    Kompozitor
    Прекрасно работает на мобах. Но при ударе по блоку - ноль реакции.[DOUBLEPOST=1478614797,1478614171][/DOUBLEPOST]Как я уже понял, с ItemStack не возможно вытащить урон. Другое дело может с Player, но тогда возникает вопрос как?
     
  5. Ission

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

    Trophy Points:
    173
    Skype:
    lokivava
    Нужно получить урон, который наносит эта экипировка монстру или блоку?
     
  6. Автор темы
    kompozitor

    kompozitor Ньюби

    Trophy Points:
    1
    Имя в Minecraft:
    Kompozitor
    Блоку. Именно блоку... в получении урона, наносимого монстру нет ничего сверхъестественного
     
  7. Lilian_solo

    Lilian_solo Новичок Пользователь Заблокирован

    Trophy Points:
    21
    Имя в Minecraft:
    CoreKolas
    Есть 1 способ, если найду, скину. Проверяем предмет в руке, если алмазный меч, то в переменную число 7 записываем, если зачарование острота, то еще урон, потом переменную в чат например[DOUBLEPOST=1478690329,1478690202][/DOUBLEPOST]А ивент PlayerInteractEvent
     
  8. Автор темы
    kompozitor

    kompozitor Ньюби

    Trophy Points:
    1
    Имя в Minecraft:
    Kompozitor
    Да, так можно, достаточно простой способ, но... Хотелось бы достать из атрибутов айтема цифру (при наведении на предмет под Lore есть "+7 Attack damage").
    Уже пробовал создать CraftItemStack.asNMSCopy(player.getItemInHand()) и достать Tag, но ничерта не получилось, так как выдает null для всех ванильных предметов.
     
  9. slavik123123123

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

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Там вроде в 1.8, либо в 1.9 добавили Attribute api для LivingEntity. Попробуй через него получать урон игрока, когда у него меч в руке.[DOUBLEPOST=1478717107,1478716978][/DOUBLEPOST]https://hub.spigotmc.org/javadocs/spigot/org/bukkit/attribute/Attribute.html

    Гдето на Spigotmc вроде есть плагин от md5, который показывает как использовать это.
     
  10. Автор темы
    kompozitor

    kompozitor Ньюби

    Trophy Points:
    1
    Имя в Minecraft:
    Kompozitor
    В 1.8 нет, сейчас попробую в 1.9 и отпишусь[DOUBLEPOST=1478718174,1478717110][/DOUBLEPOST]
    Уже разбираюсь. Закину код, как только закончу. Большое спасибо
     
  11. Ission

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

    Trophy Points:
    173
    Skype:
    lokivava
    Ещё раз задам вопрос:
    Нужно получить урон, который наносит эта экипировка монстру или блоку?
    "+7 Attack damage" -- это урон монстру и ничего общего с уроном по блоку не имеет.
    Урон блоку зависит от блока и инструмента, выражается дробным числом, вытащить весьма проблемотично, но реально.
    Урон монстру зависит от базовых атрибутов предмета, дополнительных атрибутов носимых вещей и предмета, зачарования предмета, крита, брони монстра.
    Так какой из уронов вам нужен?
     
  12. BeYkeR

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

    Trophy Points:
    173
    По-моему урон это ошибочное название. Из предмета вроде берется только его скорость "копания" для вычисления прочности блока с тем или иным предметом перед игроком.

    Code:
    // Из MCP: EntityPlayer.java
        public float getDigSpeed(IBlockState state)
        {
            float f = this.inventory.getStrVsBlock(state);
    
            if (f > 1.0F)
            {
                int i = EnchantmentHelper.getEfficiencyModifier(this);
                ItemStack itemstack = this.getHeldItemMainhand();
    
                if (i > 0 && itemstack != null)
                {
                    f += (float)(i * i + 1);
                }
            }
    
            if (this.isPotionActive(MobEffects.HASTE))
            {
                f *= 1.0F + (float)(this.getActivePotionEffect(MobEffects.HASTE).getAmplifier() + 1) * 0.2F;
            }
    
            if (this.isPotionActive(MobEffects.MINING_FATIGUE))
            {
                float f1;
    
                switch (this.getActivePotionEffect(MobEffects.MINING_FATIGUE).getAmplifier())
                {
                    case 0:
                        f1 = 0.3F;
                        break;
    
                    case 1:
                        f1 = 0.09F;
                        break;
    
                    case 2:
                        f1 = 0.0027F;
                        break;
    
                    case 3:
                    default:
                        f1 = 8.1E-4F;
                }
    
                f *= f1;
            }
    
            if (this.isInsideOfMaterial(Material.WATER) && !EnchantmentHelper.getAquaAffinityModifier(this))
            {
                f /= 5.0F;
            }
    
            if (!this.onGround)
            {
                f /= 5.0F;
            }
    
            return f;
        }
    Code:
    // Из MCP: Block.java
        @Deprecated
    
        /**
         * Get the hardness of this Block relative to the ability of the given player
         */
        public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World worldIn, BlockPos pos)
        {
            float f = state.getBlockHardness(worldIn, pos);
            return f < 0.0F ? 0.0F : (!player.canHarvestBlock(state) ? player.getDigSpeed(state) / f / 100.0F : player.getDigSpeed(state) / f / 30.0F);
        }
     

Share This Page