001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005
006 public class EntityWitherSkull extends EntityFireball
007 {
008 public EntityWitherSkull(World par1World)
009 {
010 super(par1World);
011 this.setSize(0.3125F, 0.3125F);
012 }
013
014 public EntityWitherSkull(World par1World, EntityLiving par2EntityLiving, double par3, double par5, double par7)
015 {
016 super(par1World, par2EntityLiving, par3, par5, par7);
017 this.setSize(0.3125F, 0.3125F);
018 }
019
020 protected float func_82341_c()
021 {
022 return this.func_82342_d() ? 0.73F : super.func_82341_c();
023 }
024
025 @SideOnly(Side.CLIENT)
026 public EntityWitherSkull(World par1World, double par2, double par4, double par6, double par8, double par10, double par12)
027 {
028 super(par1World, par2, par4, par6, par8, par10, par12);
029 this.setSize(0.3125F, 0.3125F);
030 }
031
032 /**
033 * Returns true if the entity is on fire. Used by render to add the fire effect on rendering.
034 */
035 public boolean isBurning()
036 {
037 return false;
038 }
039
040 public float func_82146_a(Explosion par1Explosion, Block par2Block, int par3, int par4, int par5)
041 {
042 float var6 = super.func_82146_a(par1Explosion, par2Block, par3, par4, par5);
043
044 if (this.func_82342_d() && par2Block != Block.bedrock)
045 {
046 var6 = Math.min(0.8F, var6);
047 }
048
049 return var6;
050 }
051
052 /**
053 * Called when this EntityFireball hits a block or entity.
054 */
055 protected void onImpact(MovingObjectPosition par1MovingObjectPosition)
056 {
057 if (!this.worldObj.isRemote)
058 {
059 if (par1MovingObjectPosition.entityHit != null)
060 {
061 if (this.shootingEntity != null)
062 {
063 if (par1MovingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeMobDamage(this.shootingEntity), 8) && !par1MovingObjectPosition.entityHit.isEntityAlive())
064 {
065 this.shootingEntity.heal(5);
066 }
067 }
068 else
069 {
070 par1MovingObjectPosition.entityHit.attackEntityFrom(DamageSource.magic, 5);
071 }
072
073 if (par1MovingObjectPosition.entityHit instanceof EntityLiving)
074 {
075 byte var2 = 0;
076
077 if (this.worldObj.difficultySetting > 1)
078 {
079 if (this.worldObj.difficultySetting == 2)
080 {
081 var2 = 10;
082 }
083 else if (this.worldObj.difficultySetting == 3)
084 {
085 var2 = 40;
086 }
087 }
088
089 if (var2 > 0)
090 {
091 ((EntityLiving)par1MovingObjectPosition.entityHit).addPotionEffect(new PotionEffect(Potion.field_82731_v.id, 20 * var2, 1));
092 }
093 }
094 }
095
096 this.worldObj.newExplosion(this, this.posX, this.posY, this.posZ, 1.0F, false, this.worldObj.func_82736_K().func_82766_b("mobGriefing"));
097 this.setDead();
098 }
099 }
100
101 /**
102 * Returns true if other Entities should be prevented from moving through this Entity.
103 */
104 public boolean canBeCollidedWith()
105 {
106 return false;
107 }
108
109 /**
110 * Called when the entity is attacked.
111 */
112 public boolean attackEntityFrom(DamageSource par1DamageSource, int par2)
113 {
114 return false;
115 }
116
117 protected void entityInit()
118 {
119 this.dataWatcher.addObject(10, Byte.valueOf((byte)0));
120 }
121
122 public boolean func_82342_d()
123 {
124 return this.dataWatcher.getWatchableObjectByte(10) == 1;
125 }
126
127 public void func_82343_e(boolean par1)
128 {
129 this.dataWatcher.updateObject(10, Byte.valueOf((byte)(par1 ? 1 : 0)));
130 }
131 }