package com.insane.simplelabels.client; import java.awt.Color; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.world.EnumSkyBlock; import com.insane.simplelabels.tile.TileLabel; import static org.lwjgl.opengl.GL11.*; public class RenderLabel extends TileEntitySpecialRenderer<TileLabel> { //private static RenderItem renderItem = new RenderItem(Minecraft.getMinecraft().getTextureManager(), Minecraft.getMinecraft().getRenderItem()); @Override public void renderTileEntityAt(TileLabel te, double x, double y, double z, float f, int stage) { ItemStack stack = te.getLabelStack(false); if (stack!= null) { GlStateManager.pushMatrix(); glPushAttrib(GL_LIGHTING_BIT); // Enable flags needed for item renders GlStateManager.disableBlend(); GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GlStateManager.disableLighting(); GlStateManager.enableCull(); float inset = 0.5f - 0.0101f; EnumFacing side = te.getDsuDirection(); int ambientLight = te.getWorld().getLightFor(EnumSkyBlock.BLOCK, te.getPos().add(side.getFrontOffsetX(), side.getFrontOffsetY(), side.getFrontOffsetZ())); int lightX = ambientLight % 65536; int lightY = ambientLight / 65536; float mult = 1.0F; //OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lightX * mult, lightY * mult); // Move to the block glTranslated(x + 0.5, y + 0.5, z + 0.5); glRotatef(180, 1, 0, 0); glRotatef(180, 0, 1, 0); // Rotate it for the face we are rendering on rotateToDir(te.getDsuDirection()); if (te.getDsuDirection() == EnumFacing.DOWN || te.getDsuDirection() == EnumFacing.UP) rotateText(te.getPlacedDirection()); GlStateManager.translate(-0.2f, -0.15f, inset); // Flatten and invert it GlStateManager.scale(0.025f, 0.025f, -0.0001f); // Render the item Minecraft.getMinecraft().getRenderItem().renderItemIntoGUI(te.getLabelStack(true), 0, 0); // Clean up GlStateManager.popMatrix(); GlStateManager.pushMatrix(); GlStateManager.translate(x + 0.5, y + 0.5, z + 0.5); GlStateManager.rotate(180, 0, 0, 1); rotateToDir(te.getDsuDirection()); if (te.getDsuDirection() == EnumFacing.DOWN || te.getDsuDirection() == EnumFacing.UP) rotateText(te.getPlacedDirection()); GlStateManager.translate(0.0075f, -0.25f, inset); GlStateManager.scale(0.011f, 0.011f, 0.11f); int overflow = 0; if (stack.stackSize < 0) { overflow = Integer.MAX_VALUE + stack.stackSize + 1; } int maxStack = stack.getMaxStackSize(); int stacks = (stack.stackSize < 0 ? Integer.MAX_VALUE : stack.stackSize) / maxStack; String stacksStr = "" + stacks; if (stacks >= 10000000) { stacksStr = (stacks / 1000000) + "M"; } else if (stacks >= 1000000) { int num = stacks / 100000; float dec = ((float) num) / 10; stacksStr = dec + "M"; } else if (stacks >= 10000) { stacksStr = (stacks / 1000) + "K"; } int leftover = (stack.stackSize - (stacks * maxStack)) + overflow; String str = stacksStr + "*" + maxStack + " + " + leftover; int stringWidth = this.getFontRenderer().getStringWidth(str); this.getFontRenderer().drawString(str, -(stringWidth / 2), 0, Color.BLACK.getRGB()); GlStateManager.translate(-0.75f, -0.5f, -0.023f); this.getFontRenderer().drawString(str, -(stringWidth / 2), 0, Color.WHITE.getRGB()); GlStateManager.popMatrix(); GlStateManager.popAttrib(); } } private void rotateToDir(EnumFacing dsuDirection) { switch (dsuDirection) { case EAST: GlStateManager.rotate(90, 0, 1, 0); break; case SOUTH: GlStateManager.rotate(180, 0, 1, 0); break; case WEST: GlStateManager.rotate(-90, 0, 1, 0); break; case UP: GlStateManager.rotate(-90, 1, 0, 0); break; case DOWN: GlStateManager.rotate(90, 1, 0, 0); break; default: break; } } private void rotateText(int direction) { switch (direction) { case 0: GlStateManager.rotate(180, 0, 0, 1); break; case 1: GlStateManager.rotate(-90, 0, 0, 1); break; case 2: break; case 3: GlStateManager.rotate(90, 0, 0, 1); break; default: break; } } /*@Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { Tessellator tes = Tessellator.instance; IIcon icon = item.getIconIndex(); float uDiff = icon.getMaxU() - icon.getMinU(); float vDiff = icon.getMaxV() - icon.getMinV(); float uStart = icon.getMinU() + (uDiff * BlockLabel.BOUNDS_MIN); float vStart = icon.getMinV() + (vDiff * BlockLabel.BOUNDS_MIN); float uEnd = icon.getMinU() + (uDiff * BlockLabel.BOUNDS_MAX); float vEnd = icon.getMinV() + (vDiff * BlockLabel.BOUNDS_MAX); glPushMatrix(); glScalef(16, 16, 16); tes.startDrawingQuads(); tes.addVertexWithUV(BlockLabel.BOUNDS_MIN, BlockLabel.BOUNDS_MIN, 0, uStart, vStart); tes.addVertexWithUV(BlockLabel.BOUNDS_MIN, BlockLabel.BOUNDS_MAX, 0, uStart, vEnd); tes.addVertexWithUV(BlockLabel.BOUNDS_MAX, BlockLabel.BOUNDS_MAX, 0, uEnd, vEnd); tes.addVertexWithUV(BlockLabel.BOUNDS_MAX, BlockLabel.BOUNDS_MIN, 0, uEnd, vStart); tes.draw(); glPopMatrix(); }*/ }