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