Lazy coder's "Xray"
This technically isn't an "xray" per say, but it accomplishes the same thing.
To start this off you'll need to make a hook for your render call.
Now that that's set up, make a new module called "Search" or "BlockESP".
If you can manage to find the missing code bits through the obfuscated names in the 1.7.2 code you'll have yourself a working block ESP.


No super long modifications to dozens of classes.
To start this off you'll need to make a hook for your render call.
Code:
//In EntityRenderer.java
public void fireRenderer(float renderPartialTicks, int position)
{ enableGL3D();//note the call
boolean oldViewBobbing = this.mc.gameSettings.viewBobbing;
this.mc.gameSettings.viewBobbing = false;
GL11.glPushMatrix();
setupCameraTransform(renderPartialTicks, position);
for (HackBase h : Obsidian.getHackHandler().getHacks()) //This should loop though your arraylist of hacks
{
if (h.getEnabled() == true) //if the hack is enabled we will call the onRenderWorld (which is in your base class which you extend for each hack)
{
t.onRenderWorld();
}
}
this.mc.gameSettings.viewBobbing = oldViewBobbing;
GL11.glPopMatrix();
disableGL3D();//note the call
}
}
Code:
public static void enableGL3D()
{
GL11.glDisable(3008);
GL11.glEnable(3042);
GL11.glBlendFunc(770, 771);
GL11.glDisable(3553);
GL11.glDisable(2929);
GL11.glDepthMask(false);
GL11.glEnable(2884);
mc.entityRenderer.disableLightmap(0.0D);
GL11.glLineWidth(1.0f);
}
public static void disableGL3D()
{
GL11.glEnable(3553);
GL11.glEnable(2929);
GL11.glDisable(3042);
GL11.glEnable(3008);
GL11.glDepthMask(true);
GL11.glCullFace(1029);
}
Code:
@override public void onRenderWorld() { final BlockRenderUtil util = <spoiler> for (int x = range; x > -range; x--) { for (int y = range; y > -range; y--) { for (int z = range; z > -range; z--) { final double d1 = mc.thePlayer.posX + (double) x; final double d3 = mc.thePlayer.posY + (double) y; final double d5 = mc.thePlayer.posZ + (double) z; final int xx = (int) d1 - 2; final int yy = (int) d3; final int zz = (int) d5 - 2; //Find a function which will allow you to get a block from coordinates, then use this code to get the material of that block, then check if it's not air. if (util.getBlockFromCoords(xx, yy, zz).func_149688_o() != Material.air) { //Personally this makes it a bit less bulky. Plus this is important for some code I use that is not pasted here SearchBlock block = new SearchBlock(xx,yy,zz,util.getBlockFromCoords(xx, yy, zz).blockName); if (block.name == "diamond_block") { // R G B Transperency util .drawBlockESP(block.x, block.y, block.z, 0.1F, 0.5F, 1.0F, 0.1F); } } } } } } class SearchBlock { private int x; private int y; private int z; private String name; public SearchBlock(int x, int y, int z, String name) { this.x = x; this.y = y; this.z = z; this.name = name; } }


No super long modifications to dozens of classes.