48 lines
2.3 KiB
Java
48 lines
2.3 KiB
Java
package io.gitlab.jfronny.combit.mixin;
|
|
|
|
import com.google.common.collect.ImmutableMultimap;
|
|
import com.google.common.collect.Multimap;
|
|
import io.gitlab.jfronny.combit.CombitConfig;
|
|
import net.minecraft.entity.attribute.EntityAttribute;
|
|
import net.minecraft.entity.attribute.EntityAttributeModifier;
|
|
import net.minecraft.entity.attribute.EntityAttributes;
|
|
import net.minecraft.item.*;
|
|
import net.minecraft.tag.Tag;
|
|
import org.spongepowered.asm.mixin.Final;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.Mutable;
|
|
import org.spongepowered.asm.mixin.Shadow;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
|
|
@Mixin(MiningToolItem.class)
|
|
public abstract class MiningToolItemMixin extends ToolItem {
|
|
@Shadow @Final @Mutable private Multimap<EntityAttribute, EntityAttributeModifier> attributeModifiers;
|
|
@Shadow @Final @Mutable private float attackDamage;
|
|
|
|
public MiningToolItemMixin(ToolMaterial material, Settings settings) {
|
|
super(material, settings);
|
|
}
|
|
|
|
@Inject(at = @At("RETURN"), method = "<init>(FFLnet/minecraft/item/ToolMaterial;Lnet/minecraft/tag/Tag;Lnet/minecraft/item/Item$Settings;)V")
|
|
private void modifyAttackDamage(float attackDamage, float attackSpeed, ToolMaterial material, Tag<?> effectiveBlocks, Settings settings, CallbackInfo ci) {
|
|
double factor = ((MiningToolItem)(Object)this) instanceof AxeItem ? CombitConfig.axeAttackDamageFactor : CombitConfig.weaponAttackDamageFactor;
|
|
if (factor >= 0) {
|
|
this.attackDamage *= factor;
|
|
ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> 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();
|
|
}
|
|
}
|
|
}
|