package minefantasy.client;
import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.EQUIPPED_BLOCK;
import minefantasy.MineFantasyBase;
import minefantasy.api.aesthetic.IWeaponrackHangable;
import minefantasy.block.tileentity.TileEntityWeaponRack;
import minefantasy.system.cfg;
import minefantasy.system.data_minefantasy;
import mods.battlegear2.api.shield.IShield;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
import net.minecraftforge.client.MinecraftForgeClient;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import org.lwjgl.util.Color;
public class TileEntityWeaponRackRenderer extends TileEntitySpecialRenderer
{
private static Minecraft mc = Minecraft.getMinecraft();
public TileEntityWeaponRackRenderer()
{
model = new ModelWeaponRack();
}
public TileEntityWeaponRackRenderer(TileEntityRenderer render)
{
model = new ModelWeaponRack();
this.setTileEntityRenderer(render);
}
public void renderAModelAt(TileEntityWeaponRack tile, double d, double d1, double d2, float f) {
if (tile != null);
int i = 1;
if (tile.worldObj != null) {
i = tile.direction; //this is for rotation
}
int j = 90 * i;
if (i == 0) {
j = 0;
}
if (i == 1) {
j = 270;
}
if (i == 2) {
j = 180;
}
if (i == 3) {
j = 90;
}
if (i == 4) {
j = 90;
}
bindTextureByName(data_minefantasy.image("/item/Rack.png"));
GL11.glPushMatrix();//Start all
GL11.glTranslatef((float) d + 0.5F, (float) d1+1F, (float) d2 + 0.5F);
GL11.glRotatef(j+180, 0.0F, 1.0F, 0.0F);
GL11.glScalef(1.0F, -1F, -1F);
float itemsStart = -(3F/16F);
float itemsGap = 4F/16F;
model.renderModel(0.0625F);
for(int a = 0; a < 4; a ++)
{
GL11.glPushMatrix();//Start Individual Items
ItemStack itemstack = tile.getStackInSlot(a);
if(itemstack != null)
{
float x = itemsStart + (a*itemsGap);
float y = 0.3F;
float z = a % 2 == 0 ? 0.4F : 0.45F;
z -= 2F/16F;
float r = getRotationForItem(itemstack.getItem());
float scale = 1.0F;
GL11.glTranslatef(x, y, z);
GL11.glPushMatrix();
GL11.glRotatef(r, 0, 0, 1);
GL11.glScalef(scale, scale, 1);
for(int layer = 0; layer < itemstack.getItem().getRenderPasses(itemstack.getItemDamage()); layer ++)
{
Icon icon = itemstack.getItem().getIcon(itemstack, layer);
if(icon != null)
{
GL11.glPushMatrix();
//GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F);
//GL11.glRotatef(0F, 0.0F, 0.0F, 1.0F);
renderItem(tile, itemstack, icon, a, layer);
GL11.glPopMatrix();
}
}
GL11.glPopMatrix();
}
GL11.glPopMatrix();//END individual item placement
}
GL11.glPopMatrix(); //end all
}
private float getRotationForItem(Item item) {
String classname = item.getClass().getName();
if(classname.endsWith("ItemCrossbow") || classname.endsWith("ItemBlunderbuss") || classname.endsWith("ItemBlowgun") || classname.endsWith("ItemMusket"))
{
return 45F;
}
return -45F;
}
private void bindTextureByName(String image)
{
bindTexture(TextureHelperMF.getResource(image));
}
public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) {
renderAModelAt((TileEntityWeaponRack) tileentity, d, d1, d2, f); //where to render
}
private void renderItem(TileEntityWeaponRack tile, ItemStack itemstack, Icon icon, int slot, int layer)
{
GL11.glPushMatrix();
TextureManager texturemanager = this.mc.getTextureManager();
GL11.glScalef(0.85F, 0.85F, 0.85F);
IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(itemstack, ItemRenderType.EQUIPPED);
if (isCustom(itemstack) && customRenderer != null)
{
texturemanager.bindTexture(texturemanager.getResourceLocation(itemstack.getItemSpriteNumber()));
renderEquippedItem(ItemRenderType.EQUIPPED, customRenderer, new RenderBlocks(), itemstack);
}
else
{
if (icon == null)
{
GL11.glPopMatrix();
return;
}
texturemanager.bindTexture(texturemanager.getResourceLocation(itemstack.getItemSpriteNumber()));
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);
GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F);
ItemRenderer.renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
if (itemstack.hasEffect(layer))
{
GL11.glDepthFunc(GL11.GL_EQUAL);
GL11.glDisable(GL11.GL_LIGHTING);
texturemanager.bindTexture(TextureHelperMF.ITEM_GLINT);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE);
float f7 = 0.76F;
GL11.glColor4f(0.5F * f7, 0.25F * f7, 0.8F * f7, 1.0F);
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glPushMatrix();
float f8 = 0.125F;
GL11.glScalef(f8, f8, f8);
float f9 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F;
GL11.glTranslatef(f9, 0.0F, 0.0F);
GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F);
ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glScalef(f8, f8, f8);
f9 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F;
GL11.glTranslatef(-f9, 0.0F, 0.0F);
GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F);
ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 0.0625F);
GL11.glPopMatrix();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDepthFunc(GL11.GL_LEQUAL);
}
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
}
GL11.glPopMatrix();
}
private boolean isCustom(ItemStack itemstack)
{
if(itemstack != null)
{
if(itemstack.getItem() instanceof IWeaponrackHangable)
{
return ((IWeaponrackHangable)itemstack.getItem()).canUseRenderer(itemstack);
}
if(itemstack.getItem() instanceof IShield)
{
return true;
}
return cfg.canRenderHung(itemstack.itemID);
}
return false;
}
@Deprecated
private void renderItem2(TileEntityWeaponRack tile, ItemStack itemstack, Icon icon, int slot, int layer)
{
Minecraft mc = Minecraft.getMinecraft();
mc.renderEngine.bindTexture(TextureMap.locationItemsTexture);
float f8 = 1.0F;
int i = Item.itemsList[itemstack.itemID].getColorFromItemStack(itemstack, layer);
float f5 = (float)(i >> 16 & 255) / 255.0F;
float f4 = (float)(i >> 8 & 255) / 255.0F;
float f6 = (float)(i & 255) / 255.0F;
GL11.glColor4f(f5 * f8, f4 * f8, f6 * f8, 1.0F);
Tessellator image = Tessellator.instance;
float x1 = icon.getMinU();
float x2 = icon.getMaxU();
float y1 = icon.getMinV();
float y2 = icon.getMaxV();
float xPos = 0.3F;
float yPos = 0.3F;
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glTranslatef(-xPos, -yPos, 0.0F);
float scale = 0.6F;
GL11.glScalef(scale, scale, scale);
ItemRenderer.renderItemIn2D(image, x2, y1, x1, y2, icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
GL11.glPushMatrix();
if (itemstack != null && itemstack.isItemEnchanted())
{
GL11.glDepthFunc(GL11.GL_EQUAL);
GL11.glDisable(GL11.GL_LIGHTING);
mc.renderEngine.bindTexture(TextureHelperMF.ITEM_GLINT);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE);
float f13 = 0.76F;
GL11.glColor4f(0.5F * f13, 0.25F * f13, 0.8F * f13, 1.0F);
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glPushMatrix();
float f14 = 0.125F;
GL11.glScalef(f14, f14, f14);
float f15 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F;
GL11.glTranslatef(f15, 0.0F, 0.0F);
GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F);
ItemRenderer.renderItemIn2D(image, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, 0.0625F);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glScalef(f14, f14, f14);
f15 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F;
GL11.glTranslatef(-f15, 0.0F, 0.0F);
GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F);
ItemRenderer.renderItemIn2D(image, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, 0.0625F);
GL11.glPopMatrix();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDepthFunc(GL11.GL_LEQUAL);
}
GL11.glPopMatrix();
}
public static void renderEquippedItem(ItemRenderType type, IItemRenderer customRenderer, RenderBlocks renderBlocks, ItemStack item)
{
if (customRenderer.shouldUseRenderHelper(type, item, EQUIPPED_BLOCK))
{
GL11.glPushMatrix();
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
customRenderer.renderItem(type, item, renderBlocks);
GL11.glPopMatrix();
}
else
{
GL11.glPushMatrix();
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glTranslatef(0.0F, -0.3F, 0.0F);
GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F);
customRenderer.renderItem(type, item, renderBlocks);
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glPopMatrix();
}
}
private ModelWeaponRack model;
}