Skip to content

Instantly share code, notes, and snippets.

@marchermans
Created June 25, 2014 08:26
Show Gist options
  • Save marchermans/5c43c63854d0e0eec3fb to your computer and use it in GitHub Desktop.
Save marchermans/5c43c63854d0e0eec3fb to your computer and use it in GitHub Desktop.
IItemRenderer
package com.Orion.OrionsBelt.Client.Render;
/*
* RendererItemMultiLayeredArmor
* Created by: Orion
* Created on: 21-6-2014
*/
import com.Orion.OrionsBelt.Client.CustomResource;
import com.Orion.OrionsBelt.Common.Util.Armor.MultiLayeredArmor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
public class RendererItemMultiLayeredArmor implements IItemRenderer {
@Override
public boolean handleRenderType(ItemStack pItemStack, ItemRenderType pRenderType) {
return (pRenderType == ItemRenderType.INVENTORY || pRenderType == ItemRenderType.EQUIPPED_FIRST_PERSON || pRenderType == ItemRenderType.ENTITY);
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType pRenderType, ItemStack pItemStack, ItemRendererHelper pRenderHelper) {
return false;
}
@Override
public void renderItem(ItemRenderType pRenderType, ItemStack pItemStack, Object... pRenderData) {
switch (pRenderType)
{
case INVENTORY:
this.renderItemInInventory(pItemStack, pRenderData);
break;
case ENTITY:
this.renderItemAsEntity(pItemStack, pRenderData);
break;
case EQUIPPED_FIRST_PERSON:
this.renderItemAsEquipped(pItemStack, pRenderData);
}
}
private void renderItemInInventory(ItemStack pItemStack, Object... pRenderData)
{
Tessellator tTess = Tessellator.instance;
MultiLayeredArmor tArmor = (MultiLayeredArmor) pItemStack.getItem();
int tTotalRenderPasses = tArmor.getRenderPasses(pItemStack);
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glScalef(16F, 16F, 16F);
for (int lRenderPass = 0; lRenderPass <= tTotalRenderPasses; lRenderPass++) {
tTess.startDrawingQuads();
CustomResource tResource = tArmor.getResource(pItemStack, lRenderPass);
//Split the string so that the Icon Location can be modified for the RenderEngine.
String tIconLocation = tResource.getIconLocation();
String[] tIconLocations = tIconLocation.split(":");
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(tIconLocations[0] + ":" + "textures/items/" + tIconLocations[1] + ".png"));
float tRed = tResource.getColor(0) / 255.0F;
float tGreen = tResource.getColor(1) / 255.0F;
float tBlue = tResource.getColor(2) / 255.0F;
tTess.setColorRGBA_F(tRed, tGreen, tBlue, 1.0F);
tTess.addVertexWithUV(0, 0, 0, 0, 0);//bottom left texture
tTess.addVertexWithUV(0, 1, 0, 0, 1);//top left
tTess.addVertexWithUV(1, 1, 0, 1, 1);//top right
tTess.addVertexWithUV(1, 0, 0, 1, 0);//bottom right
tTess.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
tTess.draw();
}
GL11.glPopMatrix();
}
private void renderItemAsEntity(ItemStack pItemStack, Object... pRenderData)
{
GL11.glPopMatrix(); // prevents Forge from pre-translating the item
this.doRender(pItemStack);
GL11.glPushMatrix(); // prevents GL Underflow errors
}
private void renderItemAsEquipped(ItemStack pItemStack, Object... pRenderData)
{
GL11.glPopMatrix(); // prevents Forge from pre-translating the item
GL11.glPushMatrix();
float f2 = 3F - (1F/3F);
GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(-60.0F, 0.0F, 0.0F, 1.0F);
GL11.glScalef(f2, f2, f2);
GL11.glTranslatef(-0.25F, -0.1875F, 0.1875F);
float f3 = 0.625F;
GL11.glTranslatef(0.0F, 0.125F, 0.3125F);
GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F);
GL11.glScalef(f3, -f3, f3);
GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F);
this.doRender(pItemStack);
GL11.glPopMatrix();
GL11.glPushMatrix(); // prevents GL Underflow error
}
private void doRender(ItemStack pItemStack)
{
int tRenderPasses = ((MultiLayeredArmor) pItemStack.getItem()).getRenderPasses(pItemStack);
GL11.glEnable(GL11.GL_BLEND);
for(int tIter = 0; tIter <= tRenderPasses; tIter++) {
IIcon icon = ((MultiLayeredArmor) pItemStack.getItem()).getIcon(pItemStack, tIter);
if (icon == null) {
GL11.glPopMatrix();
return;
}
Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation(((MultiLayeredArmor) pItemStack.getItem()).getResource(pItemStack, tIter).getIconLocation()));
Tessellator tessellator = Tessellator.instance;
float f = icon.getMinU();
float f1 = icon.getMaxU();
float f2 = icon.getMinV();
float f3 = icon.getMaxV();
float f4 = 0.0F;
float f5 = 0.3F;
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glTranslatef(-f4, -f5, 0.0F);
float f6 = 1.5F;
GL11.glScalef(f6, f6, f6);
GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F);
ItemRenderer.renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
}
GL11.glDisable(GL11.GL_BLEND);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment