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