001 package net.minecraft.client.texturepacks; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.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 }