001    package net.minecraft.src;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    import java.awt.Graphics;
006    import java.awt.image.BufferedImage;
007    import java.awt.image.DataBufferInt;
008    import java.awt.image.ImageObserver;
009    
010    @SideOnly(Side.CLIENT)
011    public class ImageBufferDownload implements ImageBuffer
012    {
013        private int[] imageData;
014        private int imageWidth;
015        private int imageHeight;
016    
017        public BufferedImage parseUserSkin(BufferedImage par1BufferedImage)
018        {
019            if (par1BufferedImage == null)
020            {
021                return null;
022            }
023            else
024            {
025                this.imageWidth = 64;
026                this.imageHeight = 32;
027                BufferedImage var2 = new BufferedImage(this.imageWidth, this.imageHeight, 2);
028                Graphics var3 = var2.getGraphics();
029                var3.drawImage(par1BufferedImage, 0, 0, (ImageObserver)null);
030                var3.dispose();
031                this.imageData = ((DataBufferInt)var2.getRaster().getDataBuffer()).getData();
032                this.func_78433_b(0, 0, 32, 16);
033                this.func_78434_a(32, 0, 64, 32);
034                this.func_78433_b(0, 16, 64, 32);
035                boolean var4 = false;
036                int var5;
037                int var6;
038                int var7;
039    
040                for (var5 = 32; var5 < 64; ++var5)
041                {
042                    for (var6 = 0; var6 < 16; ++var6)
043                    {
044                        var7 = this.imageData[var5 + var6 * 64];
045    
046                        if ((var7 >> 24 & 255) < 128)
047                        {
048                            var4 = true;
049                        }
050                    }
051                }
052    
053                if (!var4)
054                {
055                    for (var5 = 32; var5 < 64; ++var5)
056                    {
057                        for (var6 = 0; var6 < 16; ++var6)
058                        {
059                            var7 = this.imageData[var5 + var6 * 64];
060    
061                            if ((var7 >> 24 & 255) < 128)
062                            {
063                                var4 = true;
064                            }
065                        }
066                    }
067                }
068    
069                return var2;
070            }
071        }
072    
073        private void func_78434_a(int par1, int par2, int par3, int par4)
074        {
075            if (!this.func_78435_c(par1, par2, par3, par4))
076            {
077                for (int var5 = par1; var5 < par3; ++var5)
078                {
079                    for (int var6 = par2; var6 < par4; ++var6)
080                    {
081                        this.imageData[var5 + var6 * this.imageWidth] &= 16777215;
082                    }
083                }
084            }
085        }
086    
087        private void func_78433_b(int par1, int par2, int par3, int par4)
088        {
089            for (int var5 = par1; var5 < par3; ++var5)
090            {
091                for (int var6 = par2; var6 < par4; ++var6)
092                {
093                    this.imageData[var5 + var6 * this.imageWidth] |= -16777216;
094                }
095            }
096        }
097    
098        private boolean func_78435_c(int par1, int par2, int par3, int par4)
099        {
100            for (int var5 = par1; var5 < par3; ++var5)
101            {
102                for (int var6 = par2; var6 < par4; ++var6)
103                {
104                    int var7 = this.imageData[var5 + var6 * this.imageWidth];
105    
106                    if ((var7 >> 24 & 255) < 128)
107                    {
108                        return true;
109                    }
110                }
111            }
112    
113            return false;
114        }
115    }