package appeng.helpers; import appeng.client.render.BlockPosHighlighter; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.math.BlockPos; import net.minecraftforge.client.event.RenderWorldLastEvent; import org.lwjgl.opengl.GL11; // taken from McJty's McJtyLib public class HighlighterHandler { public static void tick( RenderWorldLastEvent event ) { renderHilightedBlock(event); } private static void renderHilightedBlock( RenderWorldLastEvent event ) { BlockPos c = BlockPosHighlighter.getHilightedBlock(); if (c == null) { return; } Minecraft mc = Minecraft.getMinecraft(); int dimension = mc.world.provider.getDimension(); long time = System.currentTimeMillis(); if (time > BlockPosHighlighter.getExpireHilight() || dimension != BlockPosHighlighter.getDimension()) { BlockPosHighlighter.hilightBlock(null, -1, BlockPosHighlighter.getDimension() ); return; } if (((time / 500) & 1) == 0) { return; } EntityPlayerSP p = mc.player; double doubleX = p.lastTickPosX + (p.posX - p.lastTickPosX) * event.getPartialTicks(); double doubleY = p.lastTickPosY + (p.posY - p.lastTickPosY) * event.getPartialTicks(); double doubleZ = p.lastTickPosZ + (p.posZ - p.lastTickPosZ) * event.getPartialTicks(); GlStateManager.pushMatrix(); GlStateManager.color(1.0f, 0, 0); GlStateManager.glLineWidth(3); GlStateManager.translate(-doubleX, -doubleY, -doubleZ); GlStateManager.disableDepth(); GlStateManager.disableTexture2D(); Tessellator tessellator = Tessellator.getInstance(); BufferBuilder buffer = tessellator.getBuffer(); float mx = c.getX(); float my = c.getY(); float mz = c.getZ(); buffer.begin( GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR); renderHighLightedBlocksOutline(buffer, mx, my, mz, 1.0f, 0.0f, 0.0f, 1.0f); tessellator.draw(); GlStateManager.enableTexture2D(); GlStateManager.popMatrix(); } public static void renderHighLightedBlocksOutline(BufferBuilder buffer, float mx, float my, float mz, float r, float g, float b, float a) { buffer.pos(mx, my, mz).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my, mz).color(r, g, b, a).endVertex(); buffer.pos(mx, my, mz).color(r, g, b, a).endVertex(); buffer.pos(mx, my + 1, mz).color(r, g, b, a).endVertex(); buffer.pos(mx, my, mz).color(r, g, b, a).endVertex(); buffer.pos(mx, my, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my + 1, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx, my + 1, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my + 1, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my + 1, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my + 1, mz).color(r, g, b, a).endVertex(); buffer.pos(mx, my + 1, mz).color(r, g, b, a).endVertex(); buffer.pos(mx, my + 1, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx, my + 1, mz).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my + 1, mz).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my, mz).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my, mz).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my + 1, mz).color(r, g, b, a).endVertex(); buffer.pos(mx, my, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx + 1, my, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx, my, mz + 1).color(r, g, b, a).endVertex(); buffer.pos(mx, my + 1, mz + 1).color(r, g, b, a).endVertex(); } }