@Override
	public void tick()
	{
		xo = x;
		yo = y;
		zo = z;

		yd -= 0.04F;

		move(xd, yd, zd);

		xd *= 0.98F;
		yd *= 0.98F;
		zd *= 0.98F;

		if(onGround)
		{
			xd *= 0.7F;
			zd *= 0.7F;
			yd *= -0.5F;
		}

		if(!defused)
		{
			if(life-- > 0)
			{
				SmokeParticle smokeParticle = new SmokeParticle(level, x, y + 0.6F, z);

				level.particleEngine.spawnParticle(smokeParticle);
			} else {
				remove();

				Random random = new Random();
				float radius = 4.0F;

				level.explode(null, x, y, z, radius);

				for(int i = 0; i < 100; i++)
				{
					float unknown0 = (float)random.nextGaussian() * radius / 4.0F;
					float unknown1 = (float)random.nextGaussian() * radius / 4.0F;
					float unknown2 = (float)random.nextGaussian() * radius / 4.0F;
					float unknown3 = MathHelper.sqrt(unknown0 * unknown0 + unknown1 * unknown1 + unknown2 * unknown2);
					float unknown4 = unknown0 / unknown3 / unknown3;
					float unknown5 = unknown1 / unknown3 / unknown3;

					unknown3 = unknown2 / unknown3 / unknown3;

					TerrainParticle terrainParticle = new TerrainParticle(level, x + unknown0, y + unknown1, z + unknown2, unknown4, unknown5, unknown3, Block.TNT);

					level.particleEngine.spawnParticle(terrainParticle);
				}

			}
		}
	}