I've made a weapon that buffs your damage when held in offhand, using the getAttributeModifiers method, but it isn't constant, and is overriden if an item is present in the mainhand. my code is:
private final Multimap<EntityAttribute, EntityAttributeModifier> attributeModifiers;
public KnifeItem(Settings settings) {
super(settings);
ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(
EntityAttributes.GENERIC_ATTACK_DAMAGE,
new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 90.0, EntityAttributeModifier.Operation.ADDITION)
);
this.attributeModifiers = builder.build();
}
public Multimap<EntityAttribute, EntityAttributeModifier> getAttributeModifiers(EquipmentSlot slot) {
return slot == EquipmentSlot.OFFHAND ? this.attributeModifiers : super.getAttributeModifiers(slot);
} ```