Вопрос Проблема с добавлением аттрибутов на предмет.

Версия Minecraft
1.16.X

ProGiple

Пользователь
Сообщения
83
Решения
1
Привет, разработчики! Начал писать плагин, в котором должна была быть функция изменения аттрибутов у предмета. Всё добавляется, но проблема в том, что если предмет ванильный то он не имеет свойства getAttributeModifiers(attribute), оно равно null, из-за этого всё работает не так как надо. Вот ласт код, на котором я остановился после некоторых попыток исправить это:
Java:
private void addParam(ItemStack item, Attribute attribute, double amount) {
    ItemMeta meta = item.getItemMeta();
 double totalAmount = amount;

if (meta != null) {
        Collection<AttributeModifier> modifierMap = meta.getAttributeModifiers(attribute);
if (modifierMap != null) {
 for (AttributeModifier modifier : modifierMap) {
                AttributeModifier.Operation operation = modifier.getOperation();

if (operation.equals(AttributeModifier.Operation.ADD_NUMBER)) {
                    totalAmount += modifier.getAmount();
                }

if (operation.equals(AttributeModifier.Operation.ADD_SCALAR)) {
                    totalAmount += totalAmount * modifier.getAmount();
                }
                meta.removeAttributeModifier(attribute, modifier);
            }
        }

AttributeModifier modifier = new AttributeModifier(attribute.name(), totalAmount, AttributeModifier.Operation.ADD_NUMBER);
        meta.addAttributeModifier(attribute, modifier);
        item.setItemMeta(meta);
    }
}

Прошу помочь мне с этим!
Уточнение: мне необходимо чтобы после применения метода на предмет у него считался аттрибут определённый, если он есть (не важно, предмет ванильный или уже изменённый), то к новому числу добавиться число уже текущее и именно оно должно примениться.

Если кому-то легче читать на фото:
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Весьма точно объяснил, в чем проблема.
Ах да, новые аттрибуты полностью заменяют ванильные. Например, было на мече +7 урона, а после прибавления аттрибута на +1 - стало совсем не +8, а просто +1. При этом, если предмет не ванильный, а изменён в плане атрибутов, то всё работает как надо
 
Ах да, новые аттрибуты полностью заменяют ванильные. Например, было на мече +7 урона, а после прибавления аттрибута на +1 - стало совсем не +8, а просто +1. При этом, если предмет не ванильный, а изменён в плане атрибутов, то всё работает как надо
Можешь попробовать что-то вроде:
Java:
private void addParam(ItemStack item, Attribute attribute, EquipmentSlot slot, double amount) {
  // ...
  if (meta != null) {
    Collection<AttributeModifier> modifierMap = meta.hasAttributeModifiers() ?
        meta.getAttributeModifiers(attribute) :
        item.getType().getItemAttributes(slot).get(attribute);
    // ...
  }
  // ...
}

Во-первых, по всей видимости нужно знать, к какому слоту по умолчанию у предмета применен атрибут.
Во-вторых, не уверен, как в этой ситуации ведет себя ItemMeta#hasAttributeModifiers(), поэтому, возможно, его нужно будет заменить на meta.getAttributeModifiers(attribute) != null;

1.16.5:
1.21.4:
 
Последнее редактирование:
Назад
Сверху Снизу