You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.0 KiB
Java
156 lines
5.0 KiB
Java
package net.minecraft.item;
|
|
|
|
import com.google.common.collect.ImmutableSet;
|
|
import com.google.common.collect.Multimap;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
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.world.World;
|
|
import net.minecraftforge.common.ForgeHooks;
|
|
|
|
public class ItemTool extends Item
|
|
{
|
|
private Set field_150914_c;
|
|
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.field_150914_c = 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);
|
|
if (this instanceof ItemPickaxe)
|
|
{
|
|
toolClass = "pickaxe";
|
|
}
|
|
else if (this instanceof ItemAxe)
|
|
{
|
|
toolClass = "axe";
|
|
}
|
|
else if (this instanceof ItemSpade)
|
|
{
|
|
toolClass = "shovel";
|
|
}
|
|
}
|
|
|
|
public float func_150893_a(ItemStack p_150893_1_, Block p_150893_2_)
|
|
{
|
|
return this.field_150914_c.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.
|
|
*/
|
|
public boolean hitEntity(ItemStack stack, EntityLivingBase p_77644_2_, EntityLivingBase p_77644_3_)
|
|
{
|
|
stack.damageItem(2, p_77644_3_);
|
|
return true;
|
|
}
|
|
|
|
public boolean onBlockDestroyed(ItemStack stack, World worldIn, Block blockIn, int p_150894_4_, int p_150894_5_, int p_150894_6_, EntityLivingBase p_150894_7_)
|
|
{
|
|
if ((double)blockIn.getBlockHardness(worldIn, p_150894_4_, p_150894_5_, p_150894_6_) != 0.0D)
|
|
{
|
|
stack.damageItem(1, p_150894_7_);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns True is the item is renderer in full 3D when hold.
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
public boolean isFull3D()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public Item.ToolMaterial func_150913_i()
|
|
{
|
|
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.
|
|
*/
|
|
public boolean getIsRepairable(ItemStack p_82789_1_, ItemStack p_82789_2_)
|
|
{
|
|
ItemStack mat = this.toolMaterial.getRepairItemStack();
|
|
if (mat != null && net.minecraftforge.oredict.OreDictionary.itemMatches(mat, p_82789_2_, false)) return true;
|
|
return super.getIsRepairable(p_82789_1_, p_82789_2_);
|
|
}
|
|
|
|
/**
|
|
* Gets a map of item attribute modifiers, used by ItemSword to increase hit damage.
|
|
*/
|
|
public Multimap getItemAttributeModifiers()
|
|
{
|
|
Multimap multimap = super.getItemAttributeModifiers();
|
|
multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Tool modifier", (double)this.damageVsEntity, 0));
|
|
return multimap;
|
|
}
|
|
|
|
/*===================================== FORGE START =================================*/
|
|
private String toolClass;
|
|
@Override
|
|
public int getHarvestLevel(ItemStack stack, String toolClass)
|
|
{
|
|
int level = super.getHarvestLevel(stack, toolClass);
|
|
if (level == -1 && toolClass != null && toolClass.equals(this.toolClass))
|
|
{
|
|
return this.toolMaterial.getHarvestLevel();
|
|
}
|
|
else
|
|
{
|
|
return level;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Set<String> getToolClasses(ItemStack stack)
|
|
{
|
|
return toolClass != null ? ImmutableSet.of(toolClass) : super.getToolClasses(stack);
|
|
}
|
|
|
|
@Override
|
|
public float getDigSpeed(ItemStack stack, Block block, int meta)
|
|
{
|
|
if (ForgeHooks.isToolEffective(stack, block, meta))
|
|
{
|
|
return efficiencyOnProperMaterial;
|
|
}
|
|
return super.getDigSpeed(stack, block, meta);
|
|
}
|
|
/*===================================== FORGE END =================================*/
|
|
} |