001 package net.minecraft.src;
002
003 import java.util.Iterator;
004 import java.util.List;
005
006 public class EntityPotion extends EntityThrowable
007 {
008 /**
009 * The damage value of the thrown potion that this EntityPotion represents.
010 */
011 private int potionDamage;
012
013 public EntityPotion(World par1World)
014 {
015 super(par1World);
016 }
017
018 public EntityPotion(World par1World, EntityLiving par2EntityLiving, int par3)
019 {
020 super(par1World, par2EntityLiving);
021 this.potionDamage = par3;
022 }
023
024 public EntityPotion(World par1World, double par2, double par4, double par6, int par8)
025 {
026 super(par1World, par2, par4, par6);
027 this.potionDamage = par8;
028 }
029
030 /**
031 * Gets the amount of gravity to apply to the thrown entity with each tick.
032 */
033 protected float getGravityVelocity()
034 {
035 return 0.05F;
036 }
037
038 protected float func_70182_d()
039 {
040 return 0.5F;
041 }
042
043 protected float func_70183_g()
044 {
045 return -20.0F;
046 }
047
048 /**
049 * Returns the damage value of the thrown potion that this EntityPotion represents.
050 */
051 public int getPotionDamage()
052 {
053 return this.potionDamage;
054 }
055
056 /**
057 * Called when this EntityThrowable hits a block or entity.
058 */
059 protected void onImpact(MovingObjectPosition par1MovingObjectPosition)
060 {
061 if (!this.worldObj.isRemote)
062 {
063 List var2 = Item.potion.getEffects(this.potionDamage);
064
065 if (var2 != null && !var2.isEmpty())
066 {
067 AxisAlignedBB var3 = this.boundingBox.expand(4.0D, 2.0D, 4.0D);
068 List var4 = this.worldObj.getEntitiesWithinAABB(EntityLiving.class, var3);
069
070 if (var4 != null && !var4.isEmpty())
071 {
072 Iterator var5 = var4.iterator();
073
074 while (var5.hasNext())
075 {
076 EntityLiving var6 = (EntityLiving)var5.next();
077 double var7 = this.getDistanceSqToEntity(var6);
078
079 if (var7 < 16.0D)
080 {
081 double var9 = 1.0D - Math.sqrt(var7) / 4.0D;
082
083 if (var6 == par1MovingObjectPosition.entityHit)
084 {
085 var9 = 1.0D;
086 }
087
088 Iterator var11 = var2.iterator();
089
090 while (var11.hasNext())
091 {
092 PotionEffect var12 = (PotionEffect)var11.next();
093 int var13 = var12.getPotionID();
094
095 if (Potion.potionTypes[var13].isInstant())
096 {
097 Potion.potionTypes[var13].affectEntity(this.thrower, var6, var12.getAmplifier(), var9);
098 }
099 else
100 {
101 int var14 = (int)(var9 * (double)var12.getDuration() + 0.5D);
102
103 if (var14 > 20)
104 {
105 var6.addPotionEffect(new PotionEffect(var13, var14, var12.getAmplifier()));
106 }
107 }
108 }
109 }
110 }
111 }
112 }
113
114 this.worldObj.playAuxSFX(2002, (int)Math.round(this.posX), (int)Math.round(this.posY), (int)Math.round(this.posZ), this.potionDamage);
115 this.setDead();
116 }
117 }
118
119 /**
120 * (abstract) Protected helper method to read subclass entity data from NBT.
121 */
122 public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound)
123 {
124 super.readEntityFromNBT(par1NBTTagCompound);
125 this.potionDamage = par1NBTTagCompound.getInteger("potionValue");
126 }
127
128 /**
129 * (abstract) Protected helper method to write subclass entity data to NBT.
130 */
131 public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound)
132 {
133 super.writeEntityToNBT(par1NBTTagCompound);
134 par1NBTTagCompound.setInteger("potionValue", this.potionDamage);
135 }
136 }