package cofh.lib.render;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.opengl.GL11;
/**
* Contains various helper functions to assist with rendering.
*
* @author King Lemming
*
*/
public final class RenderHelper {
public static final double RENDER_OFFSET = 1.0D / 1024.0D;
public static final ResourceLocation MC_BLOCK_SHEET = new ResourceLocation("textures/atlas/blocks.png");
public static final ResourceLocation MC_ITEM_SHEET = new ResourceLocation("textures/atlas/items.png");
public static final ResourceLocation MC_FONT_DEFAULT = new ResourceLocation("textures/font/ascii.png");
public static final ResourceLocation MC_FONT_ALTERNATE = new ResourceLocation("textures/font/ascii_sga.png");
public static final ResourceLocation MC_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png");
private RenderHelper() {
}
public static final TextureManager engine() {
return Minecraft.getMinecraft().renderEngine;
}
public static final Tessellator tessellator() {
return Tessellator.instance;
}
public static void setColor3ub(int color) {
GL11.glColor3ub((byte) (color >> 16 & 0xFF), (byte) (color >> 8 & 0xFF), (byte) (color & 0xFF));
}
public static void setColor4ub(int color) {
GL11.glColor4ub((byte) (color >> 24 & 0xFF), (byte) (color >> 16 & 0xFF), (byte) (color >> 8 & 0xFF), (byte) (color & 0xFF));
}
public static void resetColor() {
GL11.glColor4f(1F, 1F, 1F, 1F);
}
public static void renderItemAsBlock(RenderBlocks renderer, ItemStack item, double translateX, double translateY, double translateZ) {
renderTextureAsBlock(renderer, item.getIconIndex(), translateX, translateY, translateZ);
}
public static void renderTextureAsBlock(RenderBlocks renderer, IIcon texture, double translateX, double translateY, double translateZ) {
Tessellator tessellator = Tessellator.instance;
Block block = Blocks.stone;
if (texture == null) {
return;
}
renderer.setRenderBoundsFromBlock(block);
GL11.glTranslated(translateX, translateY, translateZ);
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, -1.0F, 0.0F);
renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, texture);
tessellator.setNormal(0.0F, 1.0F, 0.0F);
renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, texture);
tessellator.setNormal(0.0F, 0.0F, -1.0F);
renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, texture);
tessellator.setNormal(0.0F, 0.0F, 1.0F);
renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, texture);
tessellator.setNormal(-1.0F, 0.0F, 0.0F);
renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, texture);
tessellator.setNormal(1.0F, 0.0F, 0.0F);
renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, texture);
tessellator.draw();
}
public static void renderItemIn2D(IIcon icon) {
ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(),
icon.getIconHeight(), 0.0625F);
}
public static void renderIcon(IIcon icon, double z) {
Tessellator.instance.startDrawingQuads();
Tessellator.instance.addVertexWithUV(0, 16, z, icon.getMinU(), icon.getMaxV());
Tessellator.instance.addVertexWithUV(16, 16, z, icon.getMaxU(), icon.getMaxV());
Tessellator.instance.addVertexWithUV(16, 0, z, icon.getMaxU(), icon.getMinV());
Tessellator.instance.addVertexWithUV(0, 0, z, icon.getMinU(), icon.getMinV());
Tessellator.instance.draw();
}
public static void renderIcon(double x, double y, double z, IIcon icon, int width, int height) {
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(x, y + height, z, icon.getMinU(), icon.getMaxV());
tessellator.addVertexWithUV(x + width, y + height, z, icon.getMaxU(), icon.getMaxV());
tessellator.addVertexWithUV(x + width, y, z, icon.getMaxU(), icon.getMinV());
tessellator.addVertexWithUV(x, y, z, icon.getMinU(), icon.getMinV());
tessellator.draw();
}
public static final IIcon getFluidTexture(Fluid fluid) {
if (fluid == null) {
return FluidRegistry.LAVA.getIcon();
}
return fluid.getIcon();
}
public static final IIcon getFluidTexture(FluidStack fluid) {
if (fluid == null || fluid.getFluid() == null || fluid.getFluid().getIcon(fluid) == null) {
return FluidRegistry.LAVA.getIcon();
}
return fluid.getFluid().getIcon(fluid);
}
public static final void bindItemTexture(ItemStack stack) {
engine().bindTexture(stack.getItemSpriteNumber() == 0 ? MC_BLOCK_SHEET : MC_ITEM_SHEET);
}
public static final void bindTexture(ResourceLocation texture) {
engine().bindTexture(texture);
}
public static final void setBlockTextureSheet() {
bindTexture(MC_BLOCK_SHEET);
}
public static final void setItemTextureSheet() {
bindTexture(MC_ITEM_SHEET);
}
public static final void setDefaultFontTextureSheet() {
bindTexture(MC_FONT_DEFAULT);
}
public static final void setSGAFontTextureSheet() {
bindTexture(MC_FONT_ALTERNATE);
}
public static final void enableGUIStandardItemLighting() {
net.minecraft.client.renderer.RenderHelper.enableGUIStandardItemLighting();
}
}