001 package net.minecraft.entity.item;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.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 }