Помогите Получить дамаг с nbt тега

  • Автор темы Автор темы reZero
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

reZero

Активный участник
Пользователь
Баллы
76
Есть у меня метод с этим
PHP:
NBTTagList modifiers = new NBTTagList();
            NBTTagCompound damage = new NBTTagCompound();
            damage.set("AttributeName", new NBTTagString("generic.attackDamage"));
            damage.set("Name", new NBTTagString("generic.attackDamage"));
            damage.set("Amount", new NBTTagInt(20));
            damage.set("Operation", new NBTTagInt(0));
            damage.set("UUIDLeast", new NBTTagInt(894654));
            damage.set("UUIDMost", new NBTTagInt(2872));
            modifiers.add(damage);
            compound.set("AttributeModifiers", modifiers);
            nmsStack.setTag(compound);
            i = CraftItemStack.asBukkitCopy(nmsStack);
Это рабочий код, устанавливающий на предмет 20 дамага.

Теперь мне нужно сделать метод, который по айтемстаку будет получать кол-во дамага по тому, что я написал выше. Я не понимаю, голова кипит. Помогите пожалуйста
 
Короче как то так.
Код:
    public void addAttributeDamage(ItemStack stack, int damage, String name) {
        ItemMeta meta = stack.getItemMeta();
        AttributeModifier at = new AttributeModifier(UUID.fromString(name), name, damage, Operation.ADD_NUMBER,
                EquipmentSlot.HAND);
        meta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, at);
        stack.setItemMeta(meta);
    }

    public double getAttributeDamage(ItemStack stack, String name) {
        ItemMeta meta = stack.getItemMeta();
        for(Entry<Attribute, AttributeModifier> entry : meta.getAttributeModifiers().entries()) {
            if(entry.getValue().getName().equals(name)) {
                return entry.getValue().getAmount();
            }
        }
        return 0;
    }
 
Короче как то так.
Код:
    public void addAttributeDamage(ItemStack stack, int damage, String name) {
        ItemMeta meta = stack.getItemMeta();
        AttributeModifier at = new AttributeModifier(UUID.fromString(name), name, damage, Operation.ADD_NUMBER,
                EquipmentSlot.HAND);
        meta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, at);
        stack.setItemMeta(meta);
    }

    public double getAttributeDamage(ItemStack stack, String name) {
        ItemMeta meta = stack.getItemMeta();
        for(Entry<Attribute, AttributeModifier> entry : meta.getAttributeModifiers().entries()) {
            if(entry.getValue().getName().equals(name)) {
                return entry.getValue().getAmount();
            }
        }
        return 0;
    }
1.12.2
Тут нет такого
 
мог бы обновиться, не писал бы сообщения выше.
Это нужно сделать на 1.12
Держи либу для работы с атрибутами ТЫК (просто в свой проект закинь)
Код:
ItemStack stack = //Тут твой айтем стак
// Создаешь обьект для работы а атрибутами
ItemAttributes itemAttributeModifiers = new ItemAttributes();
// Устанавливаешь с каким стаком будет работа
itemAttributeModifiers.getFromStack(stack);
// Проходишься по атрибутам
for (AttributeModifier modifireObj : itemAttributeModifiers.getModifiers()) {
      // Проверяешь твой ли атрибут это
      if (modifireObj.getAttributeName().equals(Attribute.ATTACK_DAMAGE.getName())) {
            // ну и получаешь свой дамаг
            final int damage = (int)modifireObj.getAmount();
            // Можешь удалить атрибут если тебе надо
            itemAttributeModifiers.removeModifier(modifireObj);
            // так же можешь добавить какой нибуть модифаер к стаку
            final AttributeModifier damageModifier = new AttributeModifier(Attribute.ATTACK_DAMAGE, "Damage", Slot.MAIN_HAND, 0, 10, UUID.randomUUID());
            // добавляешь текущему стеку модефаеров еще один
            itemAttributeModifiers.addModifier(damageModifier);
            // применяешь изменения к стаку (если что то удалил или добавил)
            stack = itemAttributeModifiers.apply(stack);
      }
}
Тоже как то голову давно ломал с этим, если бы не ломал, не стал бы писать все это 🙂
 
Последнее редактирование:
Держи либу для работы с атрибутами ТЫК (просто в свой проект закинь)
Код:
ItemStack stack = //Тут твой айтем стак
// Создаешь обьект для работы а атрибутами
ItemAttributes itemAttributeModifiers = new ItemAttributes();
// Устанавливаешь с каким стаком будет работа
itemAttributeModifiers.getFromStack(stack);
// Проходишься по атрибутам
for (AttributeModifier modifireObj : itemAttributeModifiers.getModifiers()) {
      // Проверяешь твой ли атрибут это
      if (modifireObj.getAttributeName().equals(Attribute.ATTACK_DAMAGE.getName())) {
            // ну и получаешь свой дамаг
            final int damage = (int)modifireObj.getAmount();
            // Можешь удалить атрибут если тебе надо
            itemAttributeModifiers.removeModifier(modifireObj);
            // так же можешь добавить какой нибуть модифаер к стаку
            final AttributeModifier damageModifier = new AttributeModifier(Attribute.ATTACK_DAMAGE, "Damage", Slot.MAIN_HAND, 0, 10, UUID.randomUUID());
            // добавляешь текущему стеку модефаеров еще один
            itemAttributeModifiers.addModifier(damageModifier);
            // применяешь изменения к стаку (если что то удалил или добавил)
            stack = itemAttributeModifiers.apply(stack);
      }
}
Тоже как то голову давно ломал с этим, если бы не ломал, не стал бы писать все это 🙂
Это все прикольно, конечно, но мне бы через мавен...
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх