    001package net.minecraft.client.renderer.texture;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.awt.image.BufferedImage;
    006import java.io.File;
    007import java.io.FileNotFoundException;
    008import java.io.IOException;
    009import java.util.ArrayList;
    010import java.util.HashMap;
    011import java.util.List;
    012import javax.imageio.ImageIO;
    013import net.minecraft.client.Minecraft;
    014import net.minecraft.client.texturepacks.ITexturePack;
    015
    016@SideOnly(Side.CLIENT)
    017public class TextureManager
    018{
    019    private static TextureManager field_94271_a;
    020    private int field_94269_b = 0;
    021    private final HashMap field_94270_c = new HashMap();
    022    private final HashMap field_94268_d = new HashMap();
    023
    024    public static void func_94263_a()
    025    {
    026        field_94271_a = new TextureManager();
    027    }
    028
    029    public static TextureManager func_94267_b()
    030    {
    031        return field_94271_a;
    032    }
    033
    034    public int func_94265_c()
    035    {
    036        return this.field_94269_b++;
    037    }
    038
    039    public void func_94264_a(String par1Str, Texture par2Texture)
    040    {
    041        this.field_94268_d.put(par1Str, Integer.valueOf(par2Texture.func_94284_b()));
    042
    043        if (!this.field_94270_c.containsKey(Integer.valueOf(par2Texture.func_94284_b())))
    044        {
    045            this.field_94270_c.put(Integer.valueOf(par2Texture.func_94284_b()), par2Texture);
    046        }
    047    }
    048
    049    public void func_94259_a(Texture par1Texture)
    050    {
    051        if (this.field_94270_c.containsValue(par1Texture))
    052        {
    053            Minecraft.getMinecraft().func_98033_al().func_98236_b("TextureManager.registerTexture called, but this texture has already been registered. ignoring.");
    054        }
    055        else
    056        {
    057            this.field_94270_c.put(Integer.valueOf(par1Texture.func_94284_b()), par1Texture);
    058        }
    059    }
    060
    061    public Stitcher func_94262_d(String par1Str)
    062    {
    063        int i = Minecraft.getGLMaximumTextureSize();
    064        return new Stitcher(par1Str, i, i, true);
    065    }
    066
    067    public List func_94266_e(String par1Str)
    068    {
    069        return createNewTexture(par1Str, par1Str, null);
    070    }
    071
    072    public List createNewTexture(String textureName, String textureFile, TextureStitched stitched)
    073    {
    074        String par1Str = textureFile;
    075        ArrayList arraylist = new ArrayList();
    076        ITexturePack itexturepack = Minecraft.getMinecraft().texturePackList.getSelectedTexturePack();
    077
    078        try
    079        {
    080            BufferedImage bufferedimage = null;
    081            int i = 0;
    082            int j = 0;
    083            FileNotFoundException fnfe = null;
    084            try
    085            {
    086                bufferedimage = ImageIO.read(itexturepack.getResourceAsStream("/" + textureFile));
    087                i = bufferedimage.getHeight();
    088                j = bufferedimage.getWidth();
    089            }
    090            catch (FileNotFoundException e)
    091            {
    092                fnfe = e;
    093            }
    094            String s1 = textureName;
    095
    096            if (stitched != null && stitched.loadTexture(this, itexturepack, textureName, textureFile, bufferedimage, arraylist))
    097            {
    098                ;
    099            }
    100            else if (fnfe != null)
    101            {
    102                throw fnfe;
    103            }
    104            else if (this.func_98147_a(par1Str, itexturepack))
    105            {
    106                int k = j;
    107                int l = j;
    108                int i1 = i / j;
    109
    110                for (int j1 = 0; j1 < i1; ++j1)
    111                {
    112                    Texture texture = this.func_94261_a(s1, 2, k, l, 10496, 6408, 9728, 9728, false, bufferedimage.getSubimage(0, l * j1, k, l));
    113                    arraylist.add(texture);
    114                }
    115            }
    116            else if (j == i)
    117            {
    118                arraylist.add(this.func_94261_a(s1, 2, j, i, 10496, 6408, 9728, 9728, false, bufferedimage));
    119            }
    120            else
    121            {
    122                Minecraft.getMinecraft().func_98033_al().func_98236_b("TextureManager.createTexture: Skipping " + par1Str + " because of broken aspect ratio and not animation");
    123            }
    124
    125            return arraylist;
    126        }
    127        catch (FileNotFoundException filenotfoundexception)
    128        {
    129            Minecraft.getMinecraft().func_98033_al().func_98236_b("TextureManager.createTexture called for file " + par1Str + ", but that file does not exist. Ignoring.");
    130        }
    131        catch (IOException ioexception)
    132        {
    133            Minecraft.getMinecraft().func_98033_al().func_98236_b("TextureManager.createTexture encountered an IOException when trying to read file " + par1Str + ". Ignoring.");
    134        }
    135
    136        return arraylist;
    137    }
    138
    139    private String func_98146_d(String par1Str)
    140    {
    141        File file1 = new File(par1Str);
    142        return file1.getName().substring(0, file1.getName().lastIndexOf(46));
    143    }
    144
    145    private boolean func_98147_a(String par1Str, ITexturePack par2ITexturePack)
    146    {
    147        String s1 = "/" + par1Str.substring(0, par1Str.lastIndexOf(46)) + ".txt";
    148        boolean flag = par2ITexturePack.func_98138_b("/" + par1Str, false);
    149        return Minecraft.getMinecraft().texturePackList.getSelectedTexturePack().func_98138_b(s1, !flag);
    150    }
    151
    152    public Texture func_94261_a(String par1Str, int par2, int par3, int par4, int par5, int par6, int par7, int par8, boolean par9, BufferedImage par10BufferedImage)
    153    {
    154        Texture texture = new Texture(par1Str, par2, par3, par4, par5, par6, par7, par8, par10BufferedImage);
    155        this.func_94259_a(texture);
    156        return texture;
    157    }
    158
    159    public Texture func_98145_a(String par1Str, int par2, int par3, int par4, int par5)
    160    {
    161        return this.func_94261_a(par1Str, par2, par3, par4, 10496, par5, 9728, 9728, false, (BufferedImage)null);
    162    }
    163}