package minefantasy.mf2.client.render;
/**
*
* @author Anonymous Productions
*/
import minefantasy.mf2.api.weapon.IParryable;
import minefantasy.mf2.api.helpers.TextureHelperMF;
import minefantasy.mf2.api.knowledge.ResearchLogic;
import minefantasy.mf2.item.weapon.ItemWeaponMF;
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 RenderHeavyWeapon implements IItemRenderer
{
private Minecraft mc;
private RenderItem itemRenderer;
private boolean rotate;
private float scale;
private float offset;
private boolean doesRenderParry = false;
private boolean willStab = false;
public RenderHeavyWeapon setParryable()
{
doesRenderParry = true;
return this;
}
public RenderHeavyWeapon setKatana()
{
offset = 1.0F;
willStab = true;
return this;
}
public RenderHeavyWeapon setGreatsword()
{
offset = 1.0F;
return this;
}
public RenderHeavyWeapon setAxe()
{
offset = 1.0F;
return this;
}
public RenderHeavyWeapon setBlunt()
{
offset = 1.2F;
return this;
}
public RenderHeavyWeapon setScythe()
{
offset = 1.8F;
return this;
}
public RenderHeavyWeapon()
{
this(true);
}
public RenderHeavyWeapon(boolean rot)
{
this(rot, 2.0F);
}
public RenderHeavyWeapon(boolean rot, float sc)
{
rotate = rot;
scale = sc;
}
@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();
boolean hasParried = false;
if (mc == null) {
mc = FMLClientHandler.instance().getClient();
itemRenderer = new RenderItem();
}
EntityLivingBase user = null;
if(doesRenderParry)
{
user = ((EntityLivingBase)data[1]);
if(user instanceof EntityPlayer && item != null)
{
hasParried = ItemWeaponMF.getParry(item) > 0 && ResearchLogic.hasInfoUnlocked((EntityPlayer)user, "counteratt");
}
else if(!(user instanceof EntityPlayer) && item != null && item.getItem() instanceof IParryable)
{
hasParried = user.hurtResistantTime > 0;
}
}
this.mc.renderEngine.bindTexture(TextureMap.locationItemsTexture);
Tessellator tessellator = Tessellator.instance;
if (type == ItemRenderType.EQUIPPED)
{
if(user != null && hasParried)
{
if(user instanceof EntityPlayer)
{
if(willStab)
{
GL11.glRotatef(-90, 0, 0, 1);
GL11.glTranslatef(-1.5F, 0.5F, 0);
}
else
{
GL11.glRotatef(90, 0, 0, 1);
GL11.glTranslatef(0F, -1.0F, 0);
}
}
else
{
GL11.glRotatef(-90, -1, 0, 0);
GL11.glTranslatef(0F, 0F, -0.25F);
}
}
GL11.glTranslatef(0.25F*offset, -0.25F*offset, 0);
GL11.glTranslatef(-1.0F, 0F, 0);
GL11.glScalef(scale,scale,1);
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);
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);
}
}else if (type == ItemRenderType.EQUIPPED_FIRST_PERSON)
{
if(hasParried)
{
if(willStab)
{
GL11.glRotatef(-90, 0, 0, 1);
GL11.glTranslatef(-1.5F, 0.5F, 0);
}
else
{
GL11.glRotatef(90, 0, 0, 1);
GL11.glTranslatef(0F, -1.0F, 0);
}
}
GL11.glTranslatef(0.05F*offset, -0.05F*offset, 0);
GL11.glTranslatef(-0.75F, -0.25F, 0);
GL11.glScalef(scale,scale,1);
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);
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();
}
}