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 EntityTNTPrimed extends Entity
007    {
008        /** How long the fuse is */
009        public int fuse;
010    
011        public EntityTNTPrimed(World par1World)
012        {
013            super(par1World);
014            this.fuse = 0;
015            this.preventEntitySpawning = true;
016            this.setSize(0.98F, 0.98F);
017            this.yOffset = this.height / 2.0F;
018        }
019    
020        public EntityTNTPrimed(World par1World, double par2, double par4, double par6)
021        {
022            this(par1World);
023            this.setPosition(par2, par4, par6);
024            float var8 = (float)(Math.random() * Math.PI * 2.0D);
025            this.motionX = (double)(-((float)Math.sin((double)var8)) * 0.02F);
026            this.motionY = 0.20000000298023224D;
027            this.motionZ = (double)(-((float)Math.cos((double)var8)) * 0.02F);
028            this.fuse = 80;
029            this.prevPosX = par2;
030            this.prevPosY = par4;
031            this.prevPosZ = par6;
032        }
033    
034        protected void entityInit() {}
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        /**
046         * Returns true if other Entities should be prevented from moving through this Entity.
047         */
048        public boolean canBeCollidedWith()
049        {
050            return !this.isDead;
051        }
052    
053        /**
054         * Called to update the entity's position/logic.
055         */
056        public void onUpdate()
057        {
058            this.prevPosX = this.posX;
059            this.prevPosY = this.posY;
060            this.prevPosZ = this.posZ;
061            this.motionY -= 0.03999999910593033D;
062            this.moveEntity(this.motionX, this.motionY, this.motionZ);
063            this.motionX *= 0.9800000190734863D;
064            this.motionY *= 0.9800000190734863D;
065            this.motionZ *= 0.9800000190734863D;
066    
067            if (this.onGround)
068            {
069                this.motionX *= 0.699999988079071D;
070                this.motionZ *= 0.699999988079071D;
071                this.motionY *= -0.5D;
072            }
073    
074            if (this.fuse-- <= 0)
075            {
076                this.setDead();
077    
078                if (!this.worldObj.isRemote)
079                {
080                    this.explode();
081                }
082            }
083            else
084            {
085                this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D);
086            }
087        }
088    
089        private void explode()
090        {
091            float var1 = 4.0F;
092            this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, var1, true);
093        }
094    
095        /**
096         * (abstract) Protected helper method to write subclass entity data to NBT.
097         */
098        protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound)
099        {
100            par1NBTTagCompound.setByte("Fuse", (byte)this.fuse);
101        }
102    
103        /**
104         * (abstract) Protected helper method to read subclass entity data from NBT.
105         */
106        protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound)
107        {
108            this.fuse = par1NBTTagCompound.getByte("Fuse");
109        }
110    
111        @SideOnly(Side.CLIENT)
112        public float getShadowSize()
113        {
114            return 0.0F;
115        }
116    }