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