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

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

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

Статус темы:
Закрыта.
  1. Автор темы
    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);
                
    CraftItemStack.asBukkitCopy(nmsStack);
    Это рабочий код, устанавливающий на предмет 20 дамага.

    Теперь мне нужно сделать метод, который по айтемстаку будет получать кол-во дамага по тому, что я написал выше. Я не понимаю, голова кипит. Помогите пожалуйста
     
  2. alexandrage

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

    Баллы:
    173
  3. dimkaS

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

    Баллы:
    76
    Имя в Minecraft:
    dimkaS
    Версия ядра какая?
     
  4. alexandrage

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

    Баллы:
    173
    Короче как то так.
    Код:
        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;
        }
     
  5. Автор темы
    reZero

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

    Баллы:
    76
    1.12.2
    Тут нет такого
     
  6. Автор темы
    reZero

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

    Баллы:
    76
    1.12.2 бумага
     
  7. alexandrage

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

    Баллы:
    173
    Обновляйся тогда и будет тебе счастье.
     
  8. Автор темы
    reZero

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

    Баллы:
    76
    мог бы обновиться, не писал бы сообщения выше.
    Это нужно сделать на 1.12
     
  9. dimkaS

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

    Баллы:
    76
    Имя в Minecraft:
    dimkaS
    Держи либу для работы с атрибутами ТЫК (просто в свой проект закинь)
    Код:
    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);
          }
    }
    
    Тоже как то голову давно ломал с этим, если бы не ломал, не стал бы писать все это :)
     
    Последнее редактирование: 6 мар 2020
  10. Автор темы
    reZero

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

    Баллы:
    76
    Это все прикольно, конечно, но мне бы через мавен...
     
Статус темы:
Закрыта.

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