    001package net.minecraft.client.renderer.tileentity;
    002
    003import cpw.mods.fml.common.FMLLog;
    004import cpw.mods.fml.relauncher.Side;
    005import cpw.mods.fml.relauncher.SideOnly;
    006import java.util.Calendar;
    007import net.minecraft.block.Block;
    008import net.minecraft.block.BlockChest;
    009import net.minecraft.client.model.ModelChest;
    010import net.minecraft.client.model.ModelLargeChest;
    011import net.minecraft.tileentity.TileEntity;
    012import net.minecraft.tileentity.TileEntityChest;
    013import org.lwjgl.opengl.GL11;
    014import org.lwjgl.opengl.GL12;
    015
    016@SideOnly(Side.CLIENT)
    017public class TileEntityChestRenderer extends TileEntitySpecialRenderer
    018{
    019    /** The normal small chest model. */
    020    private ModelChest chestModel = new ModelChest();
    021
    022    /** The large double chest model. */
    023    private ModelChest largeChestModel = new ModelLargeChest();
    024    private boolean field_92061_d;
    025
    026    public TileEntityChestRenderer()
    027    {
    028        Calendar var1 = Calendar.getInstance();
    029
    030        if (var1.get(2) + 1 == 12 && var1.get(5) >= 24 && var1.get(5) <= 26)
    031        {
    032            this.field_92061_d = true;
    033        }
    034    }
    035
    036    /**
    037     * Renders the TileEntity for the chest at a position.
    038     */
    039    public void renderTileEntityChestAt(TileEntityChest par1TileEntityChest, double par2, double par4, double par6, float par8)
    040    {
    041        int var9;
    042
    043        if (!par1TileEntityChest.func_70309_m())
    044        {
    045            var9 = 0;
    046        }
    047        else
    048        {
    049            Block var10 = par1TileEntityChest.getBlockType();
    050            var9 = par1TileEntityChest.getBlockMetadata();
    051
    052            if (var10 != null && var9 == 0)
    053            {
    054                try
    055                {
    056                    ((BlockChest)var10).unifyAdjacentChests(par1TileEntityChest.getWorldObj(), par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord);
    057                }
    058                catch (ClassCastException e)
    059                {
    060                    FMLLog.severe("Attempted to render a chest at %d,  %d, %d that was not a chest",
    061                            par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord);
    062                }
    063                var9 = par1TileEntityChest.getBlockMetadata();
    064            }
    065
    066            par1TileEntityChest.checkForAdjacentChests();
    067        }
    068
    069        if (par1TileEntityChest.adjacentChestZNeg == null && par1TileEntityChest.adjacentChestXNeg == null)
    070        {
    071            ModelChest var14;
    072
    073            if (par1TileEntityChest.adjacentChestXPos == null && par1TileEntityChest.adjacentChestZPosition == null)
    074            {
    075                var14 = this.chestModel;
    076
    077                if (this.field_92061_d)
    078                {
    079                    this.bindTextureByName("/item/xmaschest.png");
    080                }
    081                else
    082                {
    083                    this.bindTextureByName("/item/chest.png");
    084                }
    085            }
    086            else
    087            {
    088                var14 = this.largeChestModel;
    089
    090                if (this.field_92061_d)
    091                {
    092                    this.bindTextureByName("/item/largexmaschest.png");
    093                }
    094                else
    095                {
    096                    this.bindTextureByName("/item/largechest.png");
    097                }
    098            }
    099
    100            GL11.glPushMatrix();
    101            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
    102            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    103            GL11.glTranslatef((float)par2, (float)par4 + 1.0F, (float)par6 + 1.0F);
    104            GL11.glScalef(1.0F, -1.0F, -1.0F);
    105            GL11.glTranslatef(0.5F, 0.5F, 0.5F);
    106            short var11 = 0;
    107
    108            if (var9 == 2)
    109            {
    110                var11 = 180;
    111            }
    112
    113            if (var9 == 3)
    114            {
    115                var11 = 0;
    116            }
    117
    118            if (var9 == 4)
    119            {
    120                var11 = 90;
    121            }
    122
    123            if (var9 == 5)
    124            {
    125                var11 = -90;
    126            }
    127
    128            if (var9 == 2 && par1TileEntityChest.adjacentChestXPos != null)
    129            {
    130                GL11.glTranslatef(1.0F, 0.0F, 0.0F);
    131            }
    132
    133            if (var9 == 5 && par1TileEntityChest.adjacentChestZPosition != null)
    134            {
    135                GL11.glTranslatef(0.0F, 0.0F, -1.0F);
    136            }
    137
    138            GL11.glRotatef((float)var11, 0.0F, 1.0F, 0.0F);
    139            GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    140            float var12 = par1TileEntityChest.prevLidAngle + (par1TileEntityChest.lidAngle - par1TileEntityChest.prevLidAngle) * par8;
    141            float var13;
    142
    143            if (par1TileEntityChest.adjacentChestZNeg != null)
    144            {
    145                var13 = par1TileEntityChest.adjacentChestZNeg.prevLidAngle + (par1TileEntityChest.adjacentChestZNeg.lidAngle - par1TileEntityChest.adjacentChestZNeg.prevLidAngle) * par8;
    146
    147                if (var13 > var12)
    148                {
    149                    var12 = var13;
    150                }
    151            }
    152
    153            if (par1TileEntityChest.adjacentChestXNeg != null)
    154            {
    155                var13 = par1TileEntityChest.adjacentChestXNeg.prevLidAngle + (par1TileEntityChest.adjacentChestXNeg.lidAngle - par1TileEntityChest.adjacentChestXNeg.prevLidAngle) * par8;
    156
    157                if (var13 > var12)
    158                {
    159                    var12 = var13;
    160                }
    161            }
    162
    163            var12 = 1.0F - var12;
    164            var12 = 1.0F - var12 * var12 * var12;
    165            var14.chestLid.rotateAngleX = -(var12 * (float)Math.PI / 2.0F);
    166            var14.renderAll();
    167            GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    168            GL11.glPopMatrix();
    169            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    170        }
    171    }
    172
    173    public void renderTileEntityAt(TileEntity par1TileEntity, double par2, double par4, double par6, float par8)
    174    {
    175        this.renderTileEntityChestAt((TileEntityChest)par1TileEntity, par2, par4, par6, par8);
    176    }
    177}