package minefantasy.mf2.client.render;
/**
*
* @author Anonymous Productions
*
* Sources are provided for educational reasons.
* though small bits of code, or methods can be used in your own creations.
*
* Code based off Battlegear Spears by Nerd Boy.
*/
import minefantasy.mf2.api.helpers.TextureHelperMF;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.client.FMLClientHandler;
public class RenderSpear implements IItemRenderer
{
private Minecraft mc;
private RenderItem itemRenderer;
private boolean isHalbeard;
public RenderSpear()
{
this(false);
}
public RenderSpear(boolean halbeard)
{
isHalbeard = halbeard;
}
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type)
{
return type.equals(ItemRenderType.EQUIPPED) || type.equals(ItemRenderType.EQUIPPED_FIRST_PERSON);
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
{
return false;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data)
{
GL11.glPushMatrix();
if (mc == null)
{
mc = FMLClientHandler.instance().getClient();
itemRenderer = new RenderItem();
}
this.mc.renderEngine.bindTexture(TextureMap.locationItemsTexture);
Tessellator tessellator = Tessellator.instance;
boolean rotate = getRotationFor(type == ItemRenderType.EQUIPPED_FIRST_PERSON, data);
GL11.glTranslatef(-1.0F, -1.0F, 0);
GL11.glScalef(3,3,1);
GL11.glPushMatrix();
for(int layer = 0; layer < item.getItem().getRenderPasses(item.getItemDamage()); layer ++)
{
int colour = item.getItem().getColorFromItemStack(item, layer);
float red = (float)(colour >> 16 & 255) / 255.0F;
float green = (float)(colour >> 8 & 255) / 255.0F;
float blue = (float)(colour & 255) / 255.0F;
GL11.glColor4f(red, green, blue, 1.0F);
IIcon icon = item.getItem().getIcon(item, layer);
float x = icon.getMaxU();
float x2 = icon.getMinU();
if(rotate)
{
x2 = icon.getMaxU();
x = icon.getMinU();
}
ItemRenderer.renderItemIn2D(tessellator,
x,
icon.getMinV(),
x2,
icon.getMaxV(),
icon.getIconWidth(),
icon.getIconHeight(), 1F/16F);
}
if (item != null && item.hasEffect(0))
{
TextureHelperMF.renderEnchantmentEffects(tessellator);
}
GL11.glPopMatrix();
GL11.glPopMatrix();
}
private boolean getRotationFor(boolean FP, Object... data)
{
boolean charge = false;
for(int a = 0; a < data.length; a ++)
{
if(data[a] instanceof EntityLivingBase)
{
if(((EntityLivingBase)data[a]).isSwingInProgress && !isHalbeard)
{
return true;
}
if(((EntityLivingBase)data[a]).isSprinting() && FP)
{
charge = true;
}
}
if(data[a] instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer)data[a];
if(player.isUsingItem())
{
charge = false;
}
}
}
return charge;
}
}