53 lines
2.1 KiB
Java
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);
|
|
}
|
|
}
|