that code you posted makes me think you didn't take a look at the torch code.. anyway, here's an example. just two random faces. hopefully, you'll be able to figure out how to use icons from that as well
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int rId, RenderBlocks rb)
{
Tessellator t = Tessellator.instance;
Icon icon = Block.pumpkin.getIcon(3, 0);
double minU = icon.getMinU();
double maxU = icon.getMaxU();
double minV = icon.getMinV();
double maxV = icon.getMaxV();
double p = 0.0625D;
//first side
t.setColorOpaque_F(1F, 1F, 1F);
t.setBrightness(150);
t.addVertexWithUV(x + (p * 14D), y + 1D, z + 1D, minU, minV);
t.addVertexWithUV(x + (p * 14D), y + 0D, z + 1D, minU, maxV);
t.addVertexWithUV(x + (p * 14D), y + 0D, z + 0D, maxU, maxV);
t.addVertexWithUV(x + (p * 14D), y + 1D, z + 0D, maxU, minV);
//second side. just messing around a bit here
double u8 = icon.getInterpolatedU(8D);
t.setBrightness(block.getMixedBrightnessForBlock(world, x - 1, y, z));
t.addVertexWithUV(x - (p * 0D), y + 2D, z + 0D, minU, minV);
t.addVertexWithUV(x - (p * 0D), y + 0D, z + 0D, minU, maxV);
t.addVertexWithUV(x - (p * 8D), y + 0D, z + 1D, u8, maxV);
t.addVertexWithUV(x - (p * 8D), y + 2D, z + 1D, u8, minV);
return true;
}