Files
TinkersConstruct/src/main/java/tconstruct/tools/entity/LaunchedPotion.java
T

199 lines
6.1 KiB
Java
Raw Normal View History

2014-06-04 21:44:48 -08:00
package tconstruct.tools.entity;
import java.util.Iterator;
import java.util.List;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.projectile.EntityThrowable;
2014-01-21 18:01:00 -05:00
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class LaunchedPotion extends EntityThrowable
{
/**
* The damage value of the thrown potion that this EntityPotion represents.
*/
private ItemStack potionDamage;
public LaunchedPotion(World par1World)
{
super(par1World);
}
public LaunchedPotion(World par1World, EntityLivingBase par2EntityLiving, int par3)
{
2014-01-21 18:01:00 -05:00
this(par1World, par2EntityLiving, new ItemStack(Items.potionitem, 1, par3));
}
public LaunchedPotion(World par1World, EntityLivingBase par2EntityLiving, ItemStack par3ItemStack)
{
super(par1World, par2EntityLiving);
this.potionDamage = par3ItemStack;
}
@SideOnly(Side.CLIENT)
public LaunchedPotion(World par1World, double par2, double par4, double par6, int par8)
{
2014-01-21 18:01:00 -05:00
this(par1World, par2, par4, par6, new ItemStack(Items.potionitem, 1, par8));
}
public LaunchedPotion(World par1World, double par2, double par4, double par6, ItemStack par8ItemStack)
{
super(par1World, par2, par4, par6);
this.potionDamage = par8ItemStack;
}
/**
* Gets the amount of gravity to apply to the thrown entity with each tick.
*/
2014-02-17 00:31:43 -05:00
@Override
protected float getGravityVelocity ()
{
return 0.05F;
}
2014-02-17 00:31:43 -05:00
@Override
protected float func_70182_d ()
{
return 1.0F;
}
2014-02-17 00:31:43 -05:00
@Override
protected float func_70183_g ()
{
return -10.0F;
}
public void setPotionDamage (int par1)
{
if (this.potionDamage == null)
{
2014-01-21 18:01:00 -05:00
this.potionDamage = new ItemStack(Items.potionitem, 1, 0);
}
this.potionDamage.setItemDamage(par1);
}
/**
2014-02-16 14:23:50 -05:00
* Returns the damage value of the thrown potion that this EntityPotion
* represents.
*/
public int getPotionDamage ()
{
if (this.potionDamage == null)
{
2014-01-21 18:01:00 -05:00
this.potionDamage = new ItemStack(Items.potionitem, 1, 0);
}
return this.potionDamage.getItemDamage();
}
/**
* Called when this EntityThrowable hits a block or entity.
*/
2014-02-17 00:31:43 -05:00
@Override
protected void onImpact (MovingObjectPosition par1MovingObjectPosition)
{
if (!this.worldObj.isRemote)
{
2014-01-21 18:01:00 -05:00
List list = Items.potionitem.getEffects(this.potionDamage);
if (list != null && !list.isEmpty())
{
AxisAlignedBB axisalignedbb = this.boundingBox.expand(4.0D, 2.0D, 4.0D);
List list1 = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb);
if (list1 != null && !list1.isEmpty())
{
Iterator iterator = list1.iterator();
while (iterator.hasNext())
{
EntityLivingBase entityliving = (EntityLivingBase) iterator.next();
double d0 = this.getDistanceSqToEntity(entityliving);
if (d0 < 16.0D)
{
double d1 = 1.0D - Math.sqrt(d0) / 4.0D;
if (entityliving == par1MovingObjectPosition.entityHit)
{
d1 = 1.0D;
}
Iterator iterator1 = list.iterator();
while (iterator1.hasNext())
{
PotionEffect potioneffect = (PotionEffect) iterator1.next();
int i = potioneffect.getPotionID();
if (Potion.potionTypes[i].isInstant())
{
Potion.potionTypes[i].affectEntity(this.getThrower(), entityliving, potioneffect.getAmplifier(), d1);
}
else
{
int j = (int) (d1 * (double) potioneffect.getDuration() + 0.5D);
if (j > 20)
{
entityliving.addPotionEffect(new PotionEffect(i, j, potioneffect.getAmplifier()));
}
}
}
}
}
}
}
this.worldObj.playAuxSFX(2002, (int) Math.round(this.posX), (int) Math.round(this.posY), (int) Math.round(this.posZ), this.getPotionDamage());
this.setDead();
}
}
/**
* (abstract) Protected helper method to read subclass entity data from NBT.
*/
2014-02-17 00:31:43 -05:00
@Override
public void readEntityFromNBT (NBTTagCompound par1NBTTagCompound)
{
super.readEntityFromNBT(par1NBTTagCompound);
if (par1NBTTagCompound.hasKey("Potion"))
{
this.potionDamage = ItemStack.loadItemStackFromNBT(par1NBTTagCompound.getCompoundTag("Potion"));
}
else
{
this.setPotionDamage(par1NBTTagCompound.getInteger("potionValue"));
}
if (this.potionDamage == null)
{
this.setDead();
}
}
/**
* (abstract) Protected helper method to write subclass entity data to NBT.
*/
2014-02-17 00:31:43 -05:00
@Override
public void writeEntityToNBT (NBTTagCompound par1NBTTagCompound)
{
super.writeEntityToNBT(par1NBTTagCompound);
if (this.potionDamage != null)
{
2014-01-16 01:36:18 -05:00
par1NBTTagCompound.setTag("Potion", this.potionDamage.writeToNBT(new NBTTagCompound()));
}
}
}