minecraft-source/src/net/minecraft/world/item/DiggerItem.java

58 lines
2.5 KiB
Java

package net.minecraft.world.item;
import net.minecraft.world.entity.monster.SharedMonsterAttributes;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import com.google.common.collect.Multimap;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.Block;
import java.util.Set;
public class DiggerItem extends TieredItem {
private final Set<Block> blocks;
protected final float speed;
protected final float attackDamage;
protected final float attackSpeed;
protected DiggerItem(final float float1, final float float2, final Tier bfp, final Set<Block> set, final Properties a) {
super(bfp, a);
this.blocks = set;
this.speed = bfp.getSpeed();
this.attackDamage = float1 + bfp.getAttackDamageBonus();
this.attackSpeed = float2;
}
@Override
public float getDestroySpeed(final ItemStack bek, final BlockState byg) {
return this.blocks.contains(byg.getBlock()) ? this.speed : 1.0f;
}
@Override
public boolean hurtEnemy(final ItemStack bek, final LivingEntity akw2, final LivingEntity akw3) {
bek.<LivingEntity>hurtAndBreak(2, akw3, akw -> akw.broadcastBreakEvent(EquipmentSlot.MAINHAND));
return true;
}
@Override
public boolean mineBlock(final ItemStack bek, final Level bjt, final BlockState byg, final BlockPos fk, final LivingEntity akw) {
if (!bjt.isClientSide && byg.getDestroySpeed(bjt, fk) != 0.0f) {
bek.<LivingEntity>hurtAndBreak(1, akw, akw -> akw.broadcastBreakEvent(EquipmentSlot.MAINHAND));
}
return true;
}
@Override
public Multimap<String, AttributeModifier> getDefaultAttributeModifiers(final EquipmentSlot aks) {
final Multimap<String, AttributeModifier> multimap3 = super.getDefaultAttributeModifiers(aks);
if (aks == EquipmentSlot.MAINHAND) {
multimap3.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(DiggerItem.BASE_ATTACK_DAMAGE_UUID, "Tool modifier", this.attackDamage, AttributeModifier.Operation.ADDITION));
multimap3.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(DiggerItem.BASE_ATTACK_SPEED_UUID, "Tool modifier", this.attackSpeed, AttributeModifier.Operation.ADDITION));
}
return multimap3;
}
}