    001    package net.minecraft.client.texturepacks;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import java.awt.image.BufferedImage;
    006    import java.io.BufferedReader;
    007    import java.io.File;
    008    import java.io.IOException;
    009    import java.io.InputStream;
    010    import java.io.InputStreamReader;
    011    import javax.imageio.ImageIO;
    012    import net.minecraft.client.renderer.RenderEngine;
    013    import org.lwjgl.opengl.GL11;
    014
    015    @SideOnly(Side.CLIENT)
    016    public 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    }