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