I fixed my use of periods to be honest that post was going to say something totally different but when i went to look up what the error was it was fixed. therefore the whole post got a bit jumbled up but i fixed it just for you. <3 Anyways my EntityExplosiveArrow class was just a copy of the EntityArrow class changed to use a different texture. Pluss a few areas where when the arrow hits the ground or a mob it blows up. In my ExplosiveBow class instead of entityarrow i have entityexplosivearrow.
package BetterBows;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBow;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
import net.minecraftforge.event.entity.player.ArrowNockEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import BetterBows.EntityExplosiveArrow;
public class ExplosiveBow extends ItemBow
{
public ExplosiveBow(int par1)
{
super(par1);
this.maxStackSize = 1;
this.setMaxDamage(384);
this.setCreativeTab(CreativeTabs.tabCombat);
}
/**
* called when the player releases the use item button. Args: itemstack, world, entityplayer, itemInUseCount
*/
public void onPlayerStoppedUsing(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, int par4)
{
int j = this.getMaxItemUseDuration(par1ItemStack) - par4;
ArrowLooseEvent event = new ArrowLooseEvent(par3EntityPlayer, par1ItemStack, j);
MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled())
{
return;
}
j = event.charge;
boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0;
if (flag || par3EntityPlayer.inventory.hasItem(mod_BetterBows.explosiveArrow.itemID))
{
float f = (float)j / 20.0F;
f = (f * f + f * 2.0F) / 3.0F;
if ((double)f < 0.1D)
{
return;
}
if (f > 1.0F)
{
f = 1.0F;
}
EntityExplosiveArrow entityExplosiveArrow = new EntityExplosiveArrow(par2World, par3EntityPlayer, f * 2.0F);
if (f == 1.0F)
{
entityExplosiveArrow.setIsCritical(true);
}
int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, par1ItemStack);
if (k > 0)
{
entityExplosiveArrow.setDamage(entityExplosiveArrow.getDamage() + (double)k * 0.5D + 0.5D);
}
int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, par1ItemStack);
if (l > 0)
{
entityExplosiveArrow.setKnockbackStrength(l);
}
if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, par1ItemStack) > 0)
{
entityExplosiveArrow.setFire(100);
}
par1ItemStack.damageItem(1, par3EntityPlayer);
par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
if (flag)
{
entityExplosiveArrow.canBePickedUp = 2;
}
else
{
par3EntityPlayer.inventory.consumeInventoryItem(mod_BetterBows.explosiveArrow.itemID);
}
if (!par2World.isRemote)
{
par2World.spawnEntityInWorld(entityExplosiveArrow);
}
}
}
public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
{
return par1ItemStack;
}
/**
* How long it takes to use or consume an item
*/
public int getMaxItemUseDuration(ItemStack par1ItemStack)
{
return 72000;
}
/**
* returns the action that specifies what animation to play when the items is being used
*/
public EnumAction getItemUseAction(ItemStack par1ItemStack)
{
return EnumAction.bow;
}
/**
* Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
*/
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
{
ArrowNockEvent event = new ArrowNockEvent(par3EntityPlayer, par1ItemStack);
MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled())
{
return event.result;
}
if (par3EntityPlayer.capabilities.isCreativeMode || par3EntityPlayer.inventory.hasItem(mod_BetterBows.explosiveArrow.itemID))
{
par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
}
return par1ItemStack;
}
/**
* Return the enchantability factor of the item, most of the time is based on material.
*/
public int getItemEnchantability()
{
return 1;
}
@SideOnly(Side.CLIENT)
private Icon[] bowIcon;
private Icon[] bowIcon1 = new Icon[4];
public void registerIcons(IconRegister iconreg)
{
itemIcon = iconreg.registerIcon("BetterBows:ExplosiveBow");
for (int N = 0; N < 3; N++)
{
this.bowIcon1[N] = iconreg.registerIcon("BetterBows:ExplosiveBow_pull_" + N);
}
}
public Icon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining)
{
if(player.getItemInUse() == null) return this.itemIcon;
int time = stack.getMaxItemUseDuration() - useRemaining;
if (time >= 18)
{
return bowIcon1[2];
}
else if (time > 13)
{
return bowIcon1[1];
}
else if (time > 0)
{
return bowIcon1[0];
}
return bowIcon1[0];
}
}