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

kompozitor

Ньюби
Баллы
1
Имя в Minecraft
Kompozitor
Итак. Мне нужно узнать какой урон наносит предмет в ведущей руке при взаимодействии с блоком на лкм.
Собственно сам процесс взаимодействия уже реализован при помощи interact'a.
Но интересует механизм получения урона от данного предмета с учетом зачарки. Возможно ли получить без каких-либо костылей, типа записи урона каждого предмета в конфиг? (Пока только такой вариант придумал)
Или же стоит использовать другой ивент? Или я просто слепой и за несколько часов не нашел нужный метод/ответ...
 
EntityDamageEvent?
 
Нужно получить урон, который наносит эта экипировка монстру или блоку?
 
Есть 1 способ, если найду, скину. Проверяем предмет в руке, если алмазный меч, то в переменную число 7 записываем, если зачарование острота, то еще урон, потом переменную в чат например
А ивент PlayerInteractEvent
 
Есть 1 способ, если найду, скину. Проверяем предмет в руке, если алмазный меч, то в переменную число 7 записываем, если зачарование острота, то еще урон, потом переменную в чат например
А ивент PlayerInteractEvent
Да, так можно, достаточно простой способ, но... Хотелось бы достать из атрибутов айтема цифру (при наведении на предмет под Lore есть "+7 Attack damage").
Уже пробовал создать CraftItemStack.asNMSCopy(player.getItemInHand()) и достать Tag, но ничерта не получилось, так как выдает null для всех ванильных предметов.
 
Там вроде в 1.8, либо в 1.9 добавили Attribute api для LivingEntity. Попробуй через него получать урон игрока, когда у него меч в руке.
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/attribute/Attribute.html

Гдето на Spigotmc вроде есть плагин от md5, который показывает как использовать это.
 
Там вроде в 1.8, либо в 1.9 добавили Attribute api для LivingEntity. Попробуй через него получать урон игрока, когда у него меч в руке.
В 1.8 нет, сейчас попробую в 1.9 и отпишусь
Там вроде в 1.8, либо в 1.9 добавили Attribute api для LivingEntity. Попробуй через него получать урон игрока, когда у него меч в руке.
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/attribute/Attribute.html

Гдето на Spigotmc вроде есть плагин от md5, который показывает как использовать это.
Уже разбираюсь. Закину код, как только закончу. Большое спасибо
 
Да, так можно, достаточно простой способ, но... Хотелось бы достать из атрибутов айтема цифру (при наведении на предмет под Lore есть "+7 Attack damage").
Уже пробовал создать CraftItemStack.asNMSCopy(player.getItemInHand()) и достать Tag, но ничерта не получилось, так как выдает null для всех ванильных предметов.
Ещё раз задам вопрос:
Нужно получить урон, который наносит эта экипировка монстру или блоку?
"+7 Attack damage" -- это урон монстру и ничего общего с уроном по блоку не имеет.
Урон блоку зависит от блока и инструмента, выражается дробным числом, вытащить весьма проблемотично, но реально.
Урон монстру зависит от базовых атрибутов предмета, дополнительных атрибутов носимых вещей и предмета, зачарования предмета, крита, брони монстра.
Так какой из уронов вам нужен?
 
По-моему урон это ошибочное название. Из предмета вроде берется только его скорость "копания" для вычисления прочности блока с тем или иным предметом перед игроком.

Java:
// Из 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;
    }

Java:
// Из 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);
    }
 
Назад
Верх