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 ITexturePack 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 ITexturePack.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 }