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