multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.4000000953674316D, 0))
getItemAttributeModifiers
в своем мече, установив для SharedMonsterAttributes.ATTACK_SPEED
нужное значение скорости@Override
public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) {
Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(equipmentSlot);
multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", 0.000000001D, 1));
return multimap;
}
multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.4000000953674316D, 0))
Дак проверку сделай, у тебя в аргументах есть эквипмент слот.Вообще это мечь.... Это к тому что написано если на ногах, если на голове и т.д.
@Override
public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot)
{
if (equipmentSlot == EntityEquipmentSlot.MAINHAND)
{
Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(EntityEquipmentSlot.MAINHAND);
multimap.removeAll(SharedMonsterAttributes.ATTACK_SPEED.getName());
multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", 10D, 0));
return multimap;
}
return super.getItemAttributeModifiers(equipmentSlot);
}
Ну да...if (equipmentSlot == EntityEquipmentSlot.MAINHAND)
добавь проверку equipmentSlot
А можно ничего не удалить, а просто создавать новую мапу, а не брать из родительского методаОказалось что для начала надо удалить старую скорость атаки
@Override
public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) {
final Multimap<String, AttributeModifier> modifiers = super.getAttributeModifiers(slot, stack);
if (slot == EntityEquipmentSlot.MAINHAND) {
replaceModifier(modifiers, SharedMonsterAttributes.ATTACK_DAMAGE, ATTACK_DAMAGE_MODIFIER, attackDamage);
replaceModifier(modifiers, SharedMonsterAttributes.ATTACK_SPEED, ATTACK_SPEED_MODIFIER, attackSpeed);
}
return modifiers;
}
private void replaceModifier(Multimap<String, AttributeModifier> modifierMultimap, IAttribute attribute, UUID id, double multiplier) {
// Get the modifiers for the specified attribute
final Collection<AttributeModifier> modifiers = modifierMultimap.get(attribute.getName());
// Find the modifier with the specified ID, if any
final Optional<AttributeModifier> modifierOptional = modifiers.stream().filter(attributeModifier -> attributeModifier.getID().equals(id)).findFirst();
if (modifierOptional.isPresent()) { // If it exists,
final AttributeModifier modifier = modifierOptional.get();
modifiers.remove(modifier); // Remove it
modifiers.add(new AttributeModifier(modifier.getID(), modifier.getName(), modifier.getAmount() * multiplier, modifier.getOperation())); // Add the new modifier
}
}
public static final Item Valik= new SwordWeap("Vitalik1", Putin_Tool , 7.0F , -3.5F);
нашел эту реализацию на англ. форуме , не стал переделывать за незнанием.Что за дибилизм? Господи, зачем брать заполненную мапу из супера и удалять так костыльно из нее элементы, если можно СОЗДАТЬ НОВУЮ МАПУ И СРАЗУ ЗАПОЛНИТЬ НУЖНЫМИ ЗНАЧЕНИЯМИ?