package shedar.mods.ic2.nuclearcontrol.renderers; import net.minecraft.block.Block; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Facing; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityRemoteThermo; public class TileEntityRemoteThermoRenderer extends TileEntitySpecialRenderer { private static final String TEXTURE_FILE = "nuclearcontrol:textures/blocks/remoteThermo/scale.png"; private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation( TEXTURE_FILE); @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { boolean isThermo = tileEntity instanceof TileEntityRemoteThermo; if (isThermo) { GL11.glPushMatrix(); GL11.glPolygonOffset(-10, -10); GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); TileEntityRemoteThermo thermo = (TileEntityRemoteThermo) tileEntity; short side = (short) Facing.oppositeSide[thermo.getFacing()]; float var12 = 0.016666668F; int heat = thermo.getHeatLevel(); String text = Integer.toString(heat); GL11.glTranslatef((float) x, (float) y, (float) z); bindTexture(TEXTURE_LOCATION); switch (side) { case 0: break; case 1: GL11.glTranslatef(1, 1, 0); GL11.glRotatef(180, 1, 0, 0); GL11.glRotatef(180, 0, 1, 0); break; case 2: GL11.glTranslatef(0, 1f, 0); GL11.glRotatef(0, 0, 1, 0); GL11.glRotatef(90, 1, 0, 0); break; case 3: GL11.glTranslatef(1, 1, 1); GL11.glRotatef(180, 0, 1, 0); GL11.glRotatef(90, 1, 0, 0); break; case 4: GL11.glTranslatef(0, 1, 1f); GL11.glRotatef(90, 0, 1, 0); GL11.glRotatef(90, 1, 0, 0); break; case 5: GL11.glTranslatef(1, 1, 0); GL11.glRotatef(-90, 0, 1, 0); GL11.glRotatef(90, 1, 0, 0); break; } GL11.glTranslatef(0.5F, 1F, 0.5F); GL11.glRotatef(-90, 1, 0, 0); switch (thermo.rotation) { case 0: break; case 1: GL11.glRotatef(-90, 0, 0, 1); break; case 2: GL11.glRotatef(90, 0, 0, 1); break; case 3: GL11.glRotatef(180, 0, 0, 1); break; } Block block = thermo.getWorldObj().getBlock(thermo.xCoord, thermo.yCoord, thermo.zCoord); if (block == null) { block = Blocks.stone; } int fire = thermo.getOnFire(); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.setNormal(0, 0, 1); if (fire > -2) { tessellator.setBrightness(block.getMixedBrightnessForBlock( thermo.getWorldObj(), thermo.xCoord, thermo.yCoord, thermo.zCoord)); tessellator.setColorOpaque_F(1, 1, 1); double left = -0.4375; double top = -0.3125; double width = 0.875; double height = 0.25; double deltaU = 1; double deltaV = 1; double u = 1D / 16; double v; double middle; if (fire == -1) { v = 0; middle = width; } else { double heatLevel = ((double) thermo.getOnFire()) / thermo.getHeatLevel(); if (heatLevel > 1) heatLevel = 1; middle = heatLevel * width; v = 4D / 16; } tessellator.addVertexWithUV(left, top, 0, u, v); tessellator.addVertexWithUV(left + middle, top, 0, u + middle * deltaU, v); tessellator.addVertexWithUV(left + middle, top + height, 0, u + middle * deltaU, v + height * deltaV); tessellator.addVertexWithUV(left, top + height, 0, u, v + height * deltaV); if (middle != width) { v = 0.5; tessellator.addVertexWithUV(left + middle, top, 0, u, v); tessellator.addVertexWithUV(left + width, top, 0, u + width * deltaU, v); tessellator.addVertexWithUV(left + width, top + height, 0, u + width * deltaU, v + height * deltaV); tessellator.addVertexWithUV(left + middle, top + height, 0, u, v + height * deltaV); } } tessellator.draw(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); FontRenderer fontRenderer = this.func_147498_b(); GL11.glDepthMask(false); GL11.glScalef(var12, -var12, var12); fontRenderer.drawString(text, -fontRenderer.getStringWidth(text) / 2, -fontRenderer.FONT_HEIGHT, 0); GL11.glDepthMask(true); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); GL11.glPopMatrix(); } } }