package ttftcuts.physis.common.helper; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import ttftcuts.physis.Physis; import ttftcuts.physis.client.ClientProxy; public class PhysisRenderHelper { public static final ResourceLocation largeGlyphs = new ResourceLocation(Physis.MOD_ID, "textures/gui/glyphs_large.png"); public static final int largeGlyphCount = 64; private static Minecraft mc = Minecraft.getMinecraft(); public static void renderStandardBlockAsItem(Block block, int metadata, RenderBlocks renderer) { Tessellator tess = Tessellator.instance; block.setBlockBoundsForItemRender(); renderer.setRenderBoundsFromBlock(block); GL11.glPushMatrix(); GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(-0.5F, -0.5F, -0.5F); // bottom tess.startDrawingQuads(); tess.setNormal(0.0F, -1.0F, 0.0F); renderer.renderFaceYNeg(block, 0.0F, 0.0F, 0.0F, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata)); tess.draw(); // top tess.startDrawingQuads(); tess.setNormal(0.0F, 1.0F, 0.0F); renderer.renderFaceYPos(block, 0.0F, 0.0F, 0.0F, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata)); tess.draw(); // east tess.startDrawingQuads(); tess.setNormal(0.0F, 0.0F, -1.0F); renderer.renderFaceZNeg(block, 0.0F, 0.0F, 0.0F, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata)); tess.draw(); // west tess.startDrawingQuads(); tess.setNormal(0.0F, 0.0F, 1.0F); renderer.renderFaceZPos(block, 0.0F, 0.0F, 0.0F, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata)); tess.draw(); // north tess.startDrawingQuads(); tess.setNormal(-1.0F, 0.0F, 0.0F); renderer.renderFaceXNeg(block, 0.0F, 0.0F, 0.0F, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata)); tess.draw(); // south tess.startDrawingQuads(); tess.setNormal(1.0F, 0.0F, 0.0F); renderer.renderFaceXPos(block, 0.0F, 0.0F, 0.0F, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); tess.draw(); GL11.glPopMatrix(); } //private static RenderItem renderItem = new RenderItem(); public static void renderItemStack(ItemStack stack, int x, int y) { renderItemStack(stack,x,y,true, true, false); } public static void renderItemStack(ItemStack stack, int x, int y, boolean useCustomRenderers, boolean overlay) { renderItemStack(stack,x,y, useCustomRenderers, overlay, false); } private static RenderItem renderItem = new RenderItem(); public static void renderItemStack(ItemStack stack, int x, int y, boolean useCustomRenderers, boolean overlay, boolean encrypt) { GL11.glPushMatrix(); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); RenderHelper.enableGUIStandardItemLighting(); GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL11.GL_DEPTH_TEST); FontRenderer font = encrypt ? ClientProxy.runeFontRenderer : mc.fontRenderer; if (encrypt) { int glyph = Math.abs(stack.getDisplayName().hashCode()) % largeGlyphCount; int gx = glyph % 8; int gy = (int)Math.floor(glyph / 8); mc.renderEngine.bindTexture(largeGlyphs); drawTexturedModalRect(x,y, renderItem.zLevel+50, gx*16, gy*16, 16, 16, 0.5f); } else { if (useCustomRenderers) { renderItem.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), stack, x, y); } else { renderItem.renderItemIntoGUI(mc.fontRenderer, mc.getTextureManager(), stack, x, y, true); } } if (overlay) { renderItem.renderItemOverlayIntoGUI(font, mc.getTextureManager(), stack, x, y); } renderItem.renderWithColor = true; RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL11.GL_BLEND); GL11.glPopMatrix(); } public static void drawColouredTexturedModalRect(int x, int y, float z, int u, int v, int w, int h, int colour, float scale) { if (scale <= 0f) { return; } float f = 0.00390625F / scale; float f1 = 0.00390625F / scale; Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); if (colour >= 0) { tessellator.setColorOpaque_I(colour); } tessellator.addVertexWithUV((double)(x + 0), (double)(y + h), (double)z, (double)((float)(u + 0) * f), (double)((float)(v + h) * f1)); tessellator.addVertexWithUV((double)(x + w), (double)(y + h), (double)z, (double)((float)(u + w) * f), (double)((float)(v + h) * f1)); tessellator.addVertexWithUV((double)(x + w), (double)(y + 0), (double)z, (double)((float)(u + w) * f), (double)((float)(v + 0) * f1)); tessellator.addVertexWithUV((double)(x + 0), (double)(y + 0), (double)z, (double)((float)(u + 0) * f), (double)((float)(v + 0) * f1)); tessellator.draw(); } public static void drawColouredTexturedModalRect(int x, int y, float z, int u, int v, int w, int h, int colour) { drawColouredTexturedModalRect(x,y,z,u,v,w,h,colour, 1f); } public static void drawTexturedModalRect(int x, int y, float z, int u, int v, int w, int h, float scale) { drawColouredTexturedModalRect(x,y,z,u,v,w,h,-1, scale); } public static void drawTexturedModalRect(int x, int y, float z, int u, int v, int w, int h) { drawColouredTexturedModalRect(x,y,z,u,v,w,h,-1, 1f); } }