package minefantasy.client;
/**
*
* @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.item.I2HWeapon;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiInventory;
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.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import cpw.mods.fml.client.FMLClientHandler;
public class RenderLance implements IItemRenderer {
private Minecraft mc;
private RenderItem itemRenderer;
private boolean rotate;
public RenderLance()
{
this(true);
}
public RenderLance(boolean rot)
{
rotate = rot;
}
@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;
if (type == ItemRenderType.EQUIPPED_FIRST_PERSON || type == ItemRenderType.EQUIPPED)
{
GL11.glTranslatef(0.8F, 0.2F, 0);
Icon icon = item.getIconIndex();
GL11.glPushMatrix();
float r = 0F;
if(getRotationFor(data))
{
if(type == ItemRenderType.EQUIPPED_FIRST_PERSON)
{
r = 90F;
}
else
{
r = 45F;
}
}
GL11.glRotatef(r, 0, 0, -1);
GL11.glScalef(3F,3F,1F);
GL11.glPushMatrix();
GL11.glTranslatef(-0.75F, -0.25F, 0F);
RenderManager.instance.itemRenderer.renderItemIn2D(tessellator,
icon.getMaxU(),
icon.getMinV(),
icon.getMinU(),
icon.getMaxV(),
icon.getIconWidth(),
icon.getIconHeight(), 1F/16F);
if (item != null && item.hasEffect(0))
{
TextureHelperMF.renderEnchantmentEffects(tessellator);
}
GL11.glPopMatrix();
GL11.glPopMatrix();
}
else if (false && type == ItemRenderType.EQUIPPED_FIRST_PERSON)
{
boolean rotate = getRotationFor(data);
GL11.glTranslatef(-0.5F, -1.5F, 0);
GL11.glScalef(3,3,1);
Icon icon = item.getIconIndex();
float x = icon.getMaxU();
float x2 = icon.getMinU();
if(rotate)
{
x2 = icon.getMaxU();
x = icon.getMinU();
}
RenderManager.instance.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();
}
private boolean getRotationFor(Object... data)
{
for(int a = 0; a < data.length; a ++)
{
if(data[a] instanceof EntityLivingBase)
{
EntityLivingBase living = (EntityLivingBase)data[a];
if(living.isSwingInProgress)
{
return true;
}
if(living.isRiding())
{
Entity mount = living.ridingEntity;
float speed = (float)Math.hypot(mount.motionX, mount.motionZ) * 20F;
if(speed > 4.0F)
{
return true;
}
}
}
if(data[a] instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer)data[a];
if(player.isUsingItem())
{
return true;
}
}
}
return false;
}
}