minecraft-src/net/minecraft/world/item/SwordItem.java
2025-07-04 01:41:11 +03:00

53 lines
2.1 KiB
Java

package net.minecraft.world.item;
import java.util.List;
import net.minecraft.core.BlockPos;
import net.minecraft.core.component.DataComponents;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.EquipmentSlotGroup;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.component.ItemAttributeModifiers;
import net.minecraft.world.item.component.Tool;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
public class SwordItem extends TieredItem {
public SwordItem(Tier tier, Item.Properties properties) {
super(tier, properties.component(DataComponents.TOOL, createToolProperties()));
}
private static Tool createToolProperties() {
return new Tool(List.of(Tool.Rule.minesAndDrops(List.of(Blocks.COBWEB), 15.0F), Tool.Rule.overrideSpeed(BlockTags.SWORD_EFFICIENT, 1.5F)), 1.0F, 2);
}
public static ItemAttributeModifiers createAttributes(Tier tier, int attackDamage, float attackSpeed) {
return ItemAttributeModifiers.builder()
.add(
Attributes.ATTACK_DAMAGE,
new AttributeModifier(BASE_ATTACK_DAMAGE_ID, attackDamage + tier.getAttackDamageBonus(), AttributeModifier.Operation.ADD_VALUE),
EquipmentSlotGroup.MAINHAND
)
.add(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_ID, attackSpeed, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
.build();
}
@Override
public boolean canAttackBlock(BlockState state, Level level, BlockPos pos, Player player) {
return !player.isCreative();
}
@Override
public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
return true;
}
@Override
public void postHurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
stack.hurtAndBreak(1, attacker, EquipmentSlot.MAINHAND);
}
}