package net.minecraft.item; import com.google.common.collect.Multimap; import java.util.Set; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.util.BlockPos; import net.minecraft.world.World; public class ItemTool extends Item { private Set effectiveBlocksTool; protected float efficiencyOnProperMaterial = 4.0F; /** Damage versus entities. */ private float damageVsEntity; /** The material this tool is made from. */ protected Item.ToolMaterial toolMaterial; private static final String __OBFID = "CL_00000019"; protected ItemTool(float p_i45333_1_, Item.ToolMaterial p_i45333_2_, Set p_i45333_3_) { this.toolMaterial = p_i45333_2_; this.effectiveBlocksTool = p_i45333_3_; this.maxStackSize = 1; this.setMaxDamage(p_i45333_2_.getMaxUses()); this.efficiencyOnProperMaterial = p_i45333_2_.getEfficiencyOnProperMaterial(); this.damageVsEntity = p_i45333_1_ + p_i45333_2_.getDamageVsEntity(); this.setCreativeTab(CreativeTabs.tabTools); } public float getStrVsBlock(ItemStack stack, Block p_150893_2_) { return this.effectiveBlocksTool.contains(p_150893_2_) ? this.efficiencyOnProperMaterial : 1.0F; } /** * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise * the damage on the stack. * * @param target The Entity being hit * @param attacker the attacking entity */ public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { stack.damageItem(2, attacker); return true; } /** * Called when a Block is destroyed using this Item. Return true to trigger the "Use Item" statistic. */ public boolean onBlockDestroyed(ItemStack stack, World worldIn, Block blockIn, BlockPos pos, EntityLivingBase playerIn) { if ((double)blockIn.getBlockHardness(worldIn, pos) != 0.0D) { stack.damageItem(1, playerIn); } return true; } public Item.ToolMaterial getToolMaterial() { return this.toolMaterial; } /** * Return the enchantability factor of the item, most of the time is based on material. */ public int getItemEnchantability() { return this.toolMaterial.getEnchantability(); } /** * Return the name for this tool's material. */ public String getToolMaterialName() { return this.toolMaterial.toString(); } /** * Return whether this item is repairable in an anvil. * * @param toRepair The ItemStack to be repaired * @param repair The ItemStack that should repair this Item (leather for leather armor, etc.) */ public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { return this.toolMaterial.getBaseItemForRepair() == repair.getItem() ? true : super.getIsRepairable(toRepair, repair); } /** * Gets a map of item attribute modifiers, used by ItemSword to increase hit damage. */ public Multimap getItemAttributeModifiers() { Multimap var1 = super.getItemAttributeModifiers(); var1.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Tool modifier", (double)this.damageVsEntity, 0)); return var1; } }