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