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 EntityEnderCrystal extends Entity
007 {
008 /** Used to create the rotation animation when rendering the crystal. */
009 public int innerRotation;
010 public int health;
011
012 public EntityEnderCrystal(World par1World)
013 {
014 super(par1World);
015 this.innerRotation = 0;
016 this.preventEntitySpawning = true;
017 this.setSize(2.0F, 2.0F);
018 this.yOffset = this.height / 2.0F;
019 this.health = 5;
020 this.innerRotation = this.rand.nextInt(100000);
021 }
022
023 @SideOnly(Side.CLIENT)
024 public EntityEnderCrystal(World par1World, double par2, double par4, double par6)
025 {
026 this(par1World);
027 this.setPosition(par2, par4, par6);
028 }
029
030 /**
031 * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to
032 * prevent them from trampling crops
033 */
034 protected boolean canTriggerWalking()
035 {
036 return false;
037 }
038
039 protected void entityInit()
040 {
041 this.dataWatcher.addObject(8, Integer.valueOf(this.health));
042 }
043
044 /**
045 * Called to update the entity's position/logic.
046 */
047 public void onUpdate()
048 {
049 this.prevPosX = this.posX;
050 this.prevPosY = this.posY;
051 this.prevPosZ = this.posZ;
052 ++this.innerRotation;
053 this.dataWatcher.updateObject(8, Integer.valueOf(this.health));
054 int var1 = MathHelper.floor_double(this.posX);
055 int var2 = MathHelper.floor_double(this.posY);
056 int var3 = MathHelper.floor_double(this.posZ);
057
058 if (this.worldObj.getBlockId(var1, var2, var3) != Block.fire.blockID)
059 {
060 this.worldObj.setBlockWithNotify(var1, var2, var3, Block.fire.blockID);
061 }
062 }
063
064 /**
065 * (abstract) Protected helper method to write subclass entity data to NBT.
066 */
067 protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) {}
068
069 /**
070 * (abstract) Protected helper method to read subclass entity data from NBT.
071 */
072 protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) {}
073
074 @SideOnly(Side.CLIENT)
075 public float getShadowSize()
076 {
077 return 0.0F;
078 }
079
080 /**
081 * Returns true if other Entities should be prevented from moving through this Entity.
082 */
083 public boolean canBeCollidedWith()
084 {
085 return true;
086 }
087
088 /**
089 * Called when the entity is attacked.
090 */
091 public boolean attackEntityFrom(DamageSource par1DamageSource, int par2)
092 {
093 if (this.func_85032_ar())
094 {
095 return false;
096 }
097 else
098 {
099 if (!this.isDead && !this.worldObj.isRemote)
100 {
101 this.health = 0;
102
103 if (this.health <= 0)
104 {
105 this.setDead();
106
107 if (!this.worldObj.isRemote)
108 {
109 this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, 6.0F, true);
110 }
111 }
112 }
113
114 return true;
115 }
116 }
117 }