mods.railcraft.client.render.RenderTools.java Source code

Java tutorial

Introduction

Here is the source code for mods.railcraft.client.render.RenderTools.java

Source

/* 
 * Copyright (c) CovertJaguar, 2014 http://railcraft.info
 * 
 * This code is the property of CovertJaguar
 * and may only be used with explicit written
 * permission unless otherwise specified on the
 * license page at http://railcraft.info/wiki/info:license.
 */
package mods.railcraft.client.render;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import org.lwjgl.opengl.GL11;

public class RenderTools {

    public static final int BOX_BRIGHTNESS = 165;
    public static final float PIXEL = 0.0625f;

    public static void setColor(int color) {
        float red = (float) (color >> 16 & 255) / 255.0F;
        float green = (float) (color >> 8 & 255) / 255.0F;
        float blue = (float) (color & 255) / 255.0F;
        GL11.glColor4f(red, green, blue, 1);
    }

    public static boolean renderStandardBlock(RenderBlocks renderblocks, Block block, int x, int y, int z) {
        renderblocks.setRenderBoundsFromBlock(block);
        return renderblocks.renderStandardBlock(block, x, y, z);
    }

    public static boolean renderStandardBlockWithColorMultiplier(RenderBlocks renderblocks, Block block, int x,
            int y, int z) {
        renderblocks.setRenderBoundsFromBlock(block);
        int mult = block.colorMultiplier(renderblocks.blockAccess, x, y, z);
        float r = (float) (mult >> 16 & 255) / 255.0F;
        float g = (float) (mult >> 8 & 255) / 255.0F;
        float b = (float) (mult & 255) / 255.0F;

        if (EntityRenderer.anaglyphEnable) {
            float var9 = (r * 30.0F + g * 59.0F + b * 11.0F) / 100.0F;
            float var10 = (r * 30.0F + g * 70.0F) / 100.0F;
            float var11 = (r * 30.0F + b * 70.0F) / 100.0F;
            r = var9;
            g = var10;
            b = var11;
        }

        return renderblocks.renderStandardBlockWithColorMultiplier(block, x, y, z, r, g, b);
    }

    public static void renderBlockSideWithBrightness(RenderBlocks renderblocks, IBlockAccess world, Block block,
            int i, int j, int k, int side, int brightness) {
        renderblocks.setRenderBoundsFromBlock(block);
        renderblocks.enableAO = false;
        Tessellator tessellator = Tessellator.instance;
        tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
        tessellator.setBrightness(brightness);
        if (side == 0)
            renderblocks.renderFaceYNeg(block, i, j, k, block.getIcon(world, i, j, k, 0));
        else if (side == 1)
            renderblocks.renderFaceYPos(block, i, j, k, block.getIcon(world, i, j, k, 1));
        else if (side == 2)
            renderblocks.renderFaceZNeg(block, i, j, k, block.getIcon(world, i, j, k, 2));
        else if (side == 3)
            renderblocks.renderFaceZPos(block, i, j, k, block.getIcon(world, i, j, k, 3));
        else if (side == 4)
            renderblocks.renderFaceXNeg(block, i, j, k, block.getIcon(world, i, j, k, 4));
        else if (side == 5)
            renderblocks.renderFaceXPos(block, i, j, k, block.getIcon(world, i, j, k, 5));
    }

    public static void renderBlockOnInventory(RenderBlocks renderblocks, Block block, int meta, float light) {
        renderBlockOnInventory(renderblocks, block, meta, light, -1);
    }

    public static void renderBlockOnInventory(RenderBlocks renderblocks, Block block, int meta, float light,
            int side) {
        renderBlockOnInventory(renderblocks, block, meta, light, side, null);
    }

    public static void renderBlockOnInventory(RenderBlocks renderblocks, Block block, int meta, float light,
            int side, IIcon iconOveride) {
        Tessellator tessellator = Tessellator.instance;
        //        boolean flag = block.blockID == Block.grass.blockID;
        //        if (renderblocks.useInventoryTint) {
        //            int j = block.getRenderColor(meta);
        //            if (flag) {
        //                j = 0xffffff;
        //            }
        //            float red = (float) (j >> 16 & 0xff) / 255F;
        //            float green = (float) (j >> 8 & 0xff) / 255F;
        //            float blue = (float) (j & 0xff) / 255F;
        //            GL11.glColor4f(red * light, green * light, blue * light, 1.0F);
        //        }
        block.setBlockBoundsForItemRender();
        renderblocks.setRenderBoundsFromBlock(block);
        GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
        if (side == 0 || side == -1) {
            tessellator.startDrawingQuads();
            tessellator.setNormal(0.0F, -1F, 0.0F);
            IIcon icon = iconOveride == null ? block.getIcon(0, meta) : iconOveride;
            if (icon != null)
                renderblocks.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, icon);
            tessellator.draw();
        }
        //        if (flag && renderblocks.useInventoryTint) {
        //            int k1 = block.getRenderColor(meta);
        //            float f6 = (float) (k1 >> 16 & 0xff) / 255F;
        //            float f8 = (float) (k1 >> 8 & 0xff) / 255F;
        //            float f9 = (float) (k1 & 0xff) / 255F;
        //            GL11.glColor4f(f6 * light, f8 * light, f9 * light, 1.0F);
        //        }
        if (side == 1 || side == -1) {
            tessellator.startDrawingQuads();
            tessellator.setNormal(0.0F, 1.0F, 0.0F);
            IIcon icon = iconOveride == null ? block.getIcon(1, meta) : iconOveride;
            if (icon != null)
                renderblocks.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, icon);
            tessellator.draw();
        }
        //        if (flag && renderblocks.useInventoryTint) {
        //            GL11.glColor4f(light, light, light, 1.0F);
        //        }
        if (side == 2 || side == -1) {
            tessellator.startDrawingQuads();
            tessellator.setNormal(0.0F, 0.0F, -1F);
            IIcon icon = iconOveride == null ? block.getIcon(2, meta) : iconOveride;
            if (icon != null)
                renderblocks.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, icon);
            tessellator.draw();
        }
        if (side == 3 || side == -1) {
            tessellator.startDrawingQuads();
            tessellator.setNormal(0.0F, 0.0F, 1.0F);
            IIcon icon = iconOveride == null ? block.getIcon(3, meta) : iconOveride;
            if (icon != null)
                renderblocks.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, icon);
            tessellator.draw();
        }
        if (side == 4 || side == -1) {
            tessellator.startDrawingQuads();
            tessellator.setNormal(-1F, 0.0F, 0.0F);
            IIcon icon = iconOveride == null ? block.getIcon(4, meta) : iconOveride;
            if (icon != null)
                renderblocks.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, icon);
            tessellator.draw();
        }
        if (side == 5 || side == -1) {
            tessellator.startDrawingQuads();
            tessellator.setNormal(1.0F, 0.0F, 0.0F);
            IIcon icon = iconOveride == null ? block.getIcon(5, meta) : iconOveride;
            if (icon != null)
                renderblocks.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, icon);
            tessellator.draw();
        }
        GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    }

    public static IIcon getSafeIcon(IIcon icon) {
        if (icon == null)
            return getMissingIcon();
        return icon;
    }

    public static IIcon getMissingIcon() {
        return ((TextureMap) Minecraft.getMinecraft().getTextureManager()
                .getTexture(TextureMap.locationBlocksTexture)).getAtlasSprite("missingno");
    }

    public static void renderString(String name, double xOffset, double yOffset, double zOffset) {
        RenderManager rm = RenderManager.instance;
        FontRenderer fontrenderer = rm.getFontRenderer();
        float f = 1.6F;
        float f1 = 1 / 60F * f;
        GL11.glPushMatrix();
        GL11.glTranslatef((float) xOffset, (float) yOffset, (float) zOffset);
        GL11.glNormal3f(0.0F, 1.0F, 0.0F);
        GL11.glRotatef(-rm.playerViewY, 0.0F, 1.0F, 0.0F);
        GL11.glRotatef(rm.playerViewX, 1.0F, 0.0F, 0.0F);
        GL11.glScalef(-f1, -f1, f1);
        GL11.glDisable(GL11.GL_LIGHTING);
        GL11.glDepthMask(false);
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glEnable(GL11.GL_BLEND);
        OpenGlHelper.glBlendFunc(770, 771, 1, 0);
        Tessellator tessellator = Tessellator.instance;

        GL11.glDisable(GL11.GL_TEXTURE_2D);
        tessellator.startDrawingQuads();
        int j = fontrenderer.getStringWidth(name) / 2;
        tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F);
        tessellator.addVertex((double) (-j - 1), (double) -1, 0.0D);
        tessellator.addVertex((double) (-j - 1), (double) 8, 0.0D);
        tessellator.addVertex((double) (j + 1), (double) 8, 0.0D);
        tessellator.addVertex((double) (j + 1), (double) -1, 0.0D);
        tessellator.draw();
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        fontrenderer.drawString(name, -fontrenderer.getStringWidth(name) / 2, 0, 553648127);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glDepthMask(true);
        fontrenderer.drawString(name, -fontrenderer.getStringWidth(name) / 2, 0, -1);
        GL11.glEnable(GL11.GL_LIGHTING);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        GL11.glPopMatrix();
    }

}