package minefantasy.item.weapon; import java.util.List; import minefantasy.api.weapon.*; import minefantasy.entity.EntityThrownSpear; import minefantasy.item.ToolMaterialMedieval; import minefantasy.system.data_minefantasy; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import net.minecraft.world.World; /** * Spear: * long, slow, damaging, can joust */ public class ItemSpearMF extends ItemWeaponMF implements IWeaponMobility, IWeaponCustomSpeed, IExtendedReachItem { public ItemSpearMF(int id, EnumToolMaterial material) { super(id, material); } public ItemSpearMF(int id, EnumToolMaterial material, float dam, int uses) { this(id, material); } @Override public float getDamageModifier() { return 1.2F; } @Override public int getHitTime(ItemStack weapon, EntityLivingBase target) { if(isPrimitive()) { return 6; } return 8; } @Override public float getReachModifierInBlocks(ItemStack mainhand) { if(isPrimitive()) { return 2.0F; } return 3.0F; } @Override public float getExaustion() { if(isPrimitive()) { return 0.0F; } return 0.1F; } @Override public float getSpeedWhenEquipped() { if(isPrimitive()) { return 1.0F; } float degrade = 0.10F; if(this.getMaterial() == ToolMaterialMedieval.MITHRIL) { degrade /= 2; } return 1.0F - degrade; } public int getMaxItemUseDuration(ItemStack item) { return 8; } /** * returns the action that specifies what animation to play when the items is being used */ public EnumAction getItemUseAction(ItemStack item) { return EnumAction.bow; } /** * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer */ @Override public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) { player.setItemInUse(item, this.getMaxItemUseDuration(item)); return item; } @Override public float getKnockback() { if(isPrimitive()) { return 2.0F; } return 5.5F; } @Override public ItemStack onEaten(ItemStack item, World world, EntityPlayer player) { if(item.itemID != itemID)return item ; if(!world.isRemote) { float d = (float)player.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); float var7 = 1.0F; if(this.getMaterial() == ToolMaterialMedieval.MITHRIL) var7 += 1.05F; EntityThrownSpear spear = new EntityThrownSpear(world, player, var7).setSpear(item.copy()); spear.canBePickedUp = 1; spear.setDamage(d); world.playSoundAtEntity(player, data_minefantasy.sound("spearThrow"), 1.2F, 0.5F / (itemRand.nextFloat() * 0.5F + 1F)); world.spawnEntityInWorld(spear); spear.syncSpear(); } --item.stackSize; if(item.stackSize <= 0) player.destroyCurrentEquippedItem(); player.swingItem(); return item; } @Override public boolean canJoust() { if(isPrimitive()) { return false; } return true; } @Override public float getDurability() { if(isPrimitive()) { return 1.0F; } return 1.5F; } @Override public int getHandsUsed() { return 2; } @Override public float getBalance() { return 0.5F; } }