Combit/src/main/java/io/gitlab/jfronny/combit/mixin/MiningToolItemMixin.java

72 lines
3.3 KiB
Java
Raw Normal View History

2020-10-27 20:13:31 +01:00
package io.gitlab.jfronny.combit.mixin;
2021-12-29 23:36:10 +01:00
import io.gitlab.jfronny.combit.CombitConfig;
2022-02-28 19:24:15 +01:00
import net.minecraft.block.Block;
2024-04-25 22:20:18 +02:00
import net.minecraft.component.ComponentMap;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.AttributeModifierSlot;
import net.minecraft.component.type.AttributeModifiersComponent;
2020-10-27 20:13:31 +01:00
import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes;
2021-12-29 23:36:10 +01:00
import net.minecraft.item.*;
2022-12-07 22:40:06 +01:00
import net.minecraft.registry.tag.TagKey;
2020-10-27 20:13:31 +01:00
import org.spongepowered.asm.mixin.Mixin;
2021-12-29 23:36:10 +01:00
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2020-10-27 20:13:31 +01:00
2024-04-25 22:20:18 +02:00
import java.util.ArrayList;
import java.util.List;
2020-10-27 20:13:31 +01:00
@Mixin(MiningToolItem.class)
2021-12-29 23:36:10 +01:00
public abstract class MiningToolItemMixin extends ToolItem {
2020-10-27 20:13:31 +01:00
public MiningToolItemMixin(ToolMaterial material, Settings settings) {
super(material, settings);
}
2024-04-25 22:20:18 +02:00
@Inject(at = @At("RETURN"), method = "<init>(Lnet/minecraft/item/ToolMaterial;Lnet/minecraft/registry/tag/TagKey;Lnet/minecraft/item/Item$Settings;)V")
private void modifyAttackDamage(ToolMaterial material, TagKey<Block> effectiveBlocks, Settings settings, CallbackInfo ci) {
2021-12-29 23:36:10 +01:00
double factor = ((MiningToolItem)(Object)this) instanceof AxeItem ? CombitConfig.axeAttackDamageFactor : CombitConfig.weaponAttackDamageFactor;
if (factor >= 0) {
2024-04-25 22:20:18 +02:00
ItemSettingsAccessor isa = (ItemSettingsAccessor) settings;
ComponentMap.Builder cb = isa.combit$getComponents();
if (cb == null) {
cb = ComponentMap.builder().addAll(DataComponentTypes.DEFAULT_ITEM_COMPONENTS);
isa.combit$setComponents(cb);
}
ComponentMapBuilderAccessor cbi = (ComponentMapBuilderAccessor) cb;
List<AttributeModifiersComponent.Entry> entries = new ArrayList<>();
boolean showInTooltip = false;
AttributeModifiersComponent amcOrig = (AttributeModifiersComponent) cbi.combit$getComponents().get(DataComponentTypes.ATTRIBUTE_MODIFIERS);
if (amcOrig != null) {
entries.addAll(amcOrig.modifiers());
showInTooltip = amcOrig.showInTooltip();
}
AttributeModifiersComponent.Entry damageEntry = null;
for (AttributeModifiersComponent.Entry entry : entries) {
if (entry.attribute().equals(EntityAttributes.GENERIC_ATTACK_DAMAGE)) {
damageEntry = entry;
2021-12-29 23:36:10 +01:00
}
2024-04-25 22:20:18 +02:00
}
double damage = 5;
if (damageEntry != null) {
entries.remove(damageEntry);
damage = damageEntry.modifier().value();
}
damageEntry = new AttributeModifiersComponent.Entry(
EntityAttributes.GENERIC_ATTACK_DAMAGE,
new EntityAttributeModifier(
ATTACK_DAMAGE_MODIFIER_ID,
"Tool modifier",
damage * factor,
EntityAttributeModifier.Operation.ADD_VALUE),
AttributeModifierSlot.MAINHAND);
entries.add(damageEntry);
cb.add(DataComponentTypes.ATTRIBUTE_MODIFIERS, new AttributeModifiersComponent(entries, showInTooltip));
2021-12-29 23:36:10 +01:00
}
2020-10-27 20:13:31 +01:00
}
}