package io.gitlab.jfronny.combit.mixin; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import io.gitlab.jfronny.combit.MiningToolItemExt; import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.item.MiningToolItem; import net.minecraft.item.ToolItem; import net.minecraft.item.ToolMaterial; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; @Mixin(MiningToolItem.class) public abstract class MiningToolItemMixin extends ToolItem implements MiningToolItemExt { @Mutable @Shadow @Final private Multimap attributeModifiers; @Mutable @Shadow @Final private float attackDamage; public MiningToolItemMixin(ToolMaterial material, Settings settings) { super(material, settings); } @Override public void setDamage(float damage) { this.attackDamage = damage; ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); this.attributeModifiers.forEach((k, v) -> { if (!k.getTranslationKey().equals(EntityAttributes.GENERIC_ATTACK_DAMAGE.getTranslationKey())) { builder.put(k, v); } }); this.attributeModifiers = builder.build(); } @Override public float getDamage() { return attackDamage; } }