Created
June 25, 2014 08:26
-
-
Save marchermans/5c43c63854d0e0eec3fb to your computer and use it in GitHub Desktop.
IItemRenderer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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