    001package net.minecraft.client.texturepacks;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.awt.image.BufferedImage;
    006import java.io.BufferedReader;
    007import java.io.File;
    008import java.io.IOException;
    009import java.io.InputStream;
    010import java.io.InputStreamReader;
    011import javax.imageio.ImageIO;
    012import net.minecraft.client.renderer.RenderEngine;
    013import org.lwjgl.opengl.GL11;
    014
    015@SideOnly(Side.CLIENT)
    016public abstract class TexturePackImplementation implements ITexturePack
    017{
    018    /**
    019     * Texture pack ID as returnd by generateTexturePackID(). Used only internally and not visible to the user.
    020     */
    021    private final String texturePackID;
    022
    023    /**
    024     * The name of the texture pack's zip file/directory or "Default" for the builtin texture pack. Shown in the GUI.
    025     */
    026    private final String texturePackFileName;
    027
    028    /**
    029     * File object for the texture pack's zip file in TexturePackCustom or the directory in TexturePackFolder.
    030     */
    031    protected final File texturePackFile;
    032
    033    /**
    034     * First line of texture pack description (from /pack.txt) displayed in the GUI
    035     */
    036    protected String firstDescriptionLine;
    037
    038    /**
    039     * Second line of texture pack description (from /pack.txt) displayed in the GUI
    040     */
    041    protected String secondDescriptionLine;
    042
    043    /** The texture pack's thumbnail image loaded from the /pack.png file. */
    044    protected BufferedImage thumbnailImage;
    045
    046    /** The texture id for this pcak's thumbnail image. */
    047    private int thumbnailTextureName;
    048
    049    protected TexturePackImplementation(String par1Str, String par2Str)
    050    {
    051        this(par1Str, (File)null, par2Str);
    052    }
    053
    054    protected TexturePackImplementation(String par1Str, File par2File, String par3Str)
    055    {
    056        this.thumbnailTextureName = -1;
    057        this.texturePackID = par1Str;
    058        this.texturePackFileName = par3Str;
    059        this.texturePackFile = par2File;
    060        this.loadThumbnailImage();
    061        this.loadDescription();
    062    }
    063
    064    /**
    065     * Truncate strings to at most 34 characters. Truncates description lines
    066     */
    067    private static String trimStringToGUIWidth(String par0Str)
    068    {
    069        if (par0Str != null && par0Str.length() > 34)
    070        {
    071            par0Str = par0Str.substring(0, 34);
    072        }
    073
    074        return par0Str;
    075    }
    076
    077    /**
    078     * Load and initialize thumbnailImage from the the /pack.png file.
    079     */
    080    private void loadThumbnailImage()
    081    {
    082        InputStream var1 = null;
    083
    084        try
    085        {
    086            var1 = this.getResourceAsStream("/pack.png");
    087            this.thumbnailImage = ImageIO.read(var1);
    088        }
    089        catch (IOException var11)
    090        {
    091            ;
    092        }
    093        finally
    094        {
    095            try
    096            {
    097                var1.close();
    098            }
    099            catch (IOException var10)
    100            {
    101                ;
    102            }
    103        }
    104    }
    105
    106    /**
    107     * Load texture pack description from /pack.txt file in the texture pack
    108     */
    109    protected void loadDescription()
    110    {
    111        InputStream var1 = null;
    112        BufferedReader var2 = null;
    113
    114        try
    115        {
    116            var1 = this.getResourceAsStream("/pack.txt");
    117            var2 = new BufferedReader(new InputStreamReader(var1));
    118            this.firstDescriptionLine = trimStringToGUIWidth(var2.readLine());
    119            this.secondDescriptionLine = trimStringToGUIWidth(var2.readLine());
    120        }
    121        catch (IOException var12)
    122        {
    123            ;
    124        }
    125        finally
    126        {
    127            try
    128            {
    129                var2.close();
    130                var1.close();
    131            }
    132            catch (IOException var11)
    133            {
    134                ;
    135            }
    136        }
    137    }
    138
    139    /**
    140     * Delete the OpenGL texture id of the pack's thumbnail image, and close the zip file in case of TexturePackCustom.
    141     */
    142    public void deleteTexturePack(RenderEngine par1RenderEngine)
    143    {
    144        if (this.thumbnailImage != null && this.thumbnailTextureName != -1)
    145        {
    146            par1RenderEngine.deleteTexture(this.thumbnailTextureName);
    147        }
    148    }
    149
    150    /**
    151     * Bind the texture id of the pack's thumbnail image, loading it if necessary.
    152     */
    153    public void bindThumbnailTexture(RenderEngine par1RenderEngine)
    154    {
    155        if (this.thumbnailImage != null)
    156        {
    157            if (this.thumbnailTextureName == -1)
    158            {
    159                this.thumbnailTextureName = par1RenderEngine.allocateAndSetupTexture(this.thumbnailImage);
    160            }
    161
    162            par1RenderEngine.bindTexture(this.thumbnailTextureName);
    163        }
    164        else
    165        {
    166            GL11.glBindTexture(GL11.GL_TEXTURE_2D, par1RenderEngine.getTexture("/gui/unknown_pack.png"));
    167        }
    168    }
    169
    170    /**
    171     * Gives a texture resource as InputStream.
    172     */
    173    public InputStream getResourceAsStream(String par1Str)
    174    {
    175        return ITexturePack.class.getResourceAsStream(par1Str);
    176    }
    177
    178    /**
    179     * Get the texture pack ID
    180     */
    181    public String getTexturePackID()
    182    {
    183        return this.texturePackID;
    184    }
    185
    186    /**
    187     * Get the file name of the texture pack, or Default if not from a custom texture pack
    188     */
    189    public String getTexturePackFileName()
    190    {
    191        return this.texturePackFileName;
    192    }
    193
    194    /**
    195     * Get the first line of the texture pack description (read from the pack.txt file)
    196     */
    197    public String getFirstDescriptionLine()
    198    {
    199        return this.firstDescriptionLine;
    200    }
    201
    202    /**
    203     * Get the second line of the texture pack description (read from the pack.txt file)
    204     */
    205    public String getSecondDescriptionLine()
    206    {
    207        return this.secondDescriptionLine;
    208    }
    209
    210    /**
    211     * Return the texture pack's resolution (16 by default). Used only by PlayerUsageSnooper. Presumably meant to be
    212     * overriden by HD texture mods.
    213     */
    214    public int getTexturePackResolution()
    215    {
    216        return 16;
    217    }
    218}