001package net.minecraft.client.texturepacks;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import java.io.File;
006import java.io.IOException;
007import java.net.URI;
008import net.minecraft.client.Minecraft;
009import net.minecraft.client.gui.FontRenderer;
010import net.minecraft.client.gui.GuiButton;
011import net.minecraft.client.gui.GuiScreen;
012import net.minecraft.client.gui.GuiSmallButton;
013import net.minecraft.util.EnumOS;
014import net.minecraft.util.StringTranslate;
015import org.lwjgl.Sys;
016
017@SideOnly(Side.CLIENT)
018public class GuiTexturePacks extends GuiScreen
019{
020    protected GuiScreen guiScreen;
021    private int refreshTimer = -1;
022
023    /** the absolute location of this texture pack */
024    private String fileLocation = "";
025
026    /**
027     * the GuiTexturePackSlot that contains all the texture packs and their descriptions
028     */
029    private GuiTexturePackSlot guiTexturePackSlot;
030
031    public GuiTexturePacks(GuiScreen par1GuiScreen)
032    {
033        this.guiScreen = par1GuiScreen;
034    }
035
036    /**
037     * Adds the buttons (and other controls) to the screen in question.
038     */
039    public void initGui()
040    {
041        StringTranslate var1 = StringTranslate.getInstance();
042        this.controlList.add(new GuiSmallButton(5, this.width / 2 - 154, this.height - 48, var1.translateKey("texturePack.openFolder")));
043        this.controlList.add(new GuiSmallButton(6, this.width / 2 + 4, this.height - 48, var1.translateKey("gui.done")));
044        this.mc.texturePackList.updateAvaliableTexturePacks();
045        this.fileLocation = (new File(Minecraft.getMinecraftDir(), "texturepacks")).getAbsolutePath();
046        this.guiTexturePackSlot = new GuiTexturePackSlot(this);
047        this.guiTexturePackSlot.registerScrollButtons(this.controlList, 7, 8);
048    }
049
050    /**
051     * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
052     */
053    protected void actionPerformed(GuiButton par1GuiButton)
054    {
055        if (par1GuiButton.enabled)
056        {
057            if (par1GuiButton.id == 5)
058            {
059                if (Minecraft.getOs() == EnumOS.MACOS)
060                {
061                    try
062                    {
063                        System.out.println(this.fileLocation);
064                        Runtime.getRuntime().exec(new String[] {"/usr/bin/open", this.fileLocation});
065                        return;
066                    }
067                    catch (IOException var7)
068                    {
069                        var7.printStackTrace();
070                    }
071                }
072                else if (Minecraft.getOs() == EnumOS.WINDOWS)
073                {
074                    String var2 = String.format("cmd.exe /C start \"Open file\" \"%s\"", new Object[] {this.fileLocation});
075
076                    try
077                    {
078                        Runtime.getRuntime().exec(var2);
079                        return;
080                    }
081                    catch (IOException var6)
082                    {
083                        var6.printStackTrace();
084                    }
085                }
086
087                boolean var8 = false;
088
089                try
090                {
091                    Class var3 = Class.forName("java.awt.Desktop");
092                    Object var4 = var3.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]);
093                    var3.getMethod("browse", new Class[] {URI.class}).invoke(var4, new Object[] {(new File(Minecraft.getMinecraftDir(), "texturepacks")).toURI()});
094                }
095                catch (Throwable var5)
096                {
097                    var5.printStackTrace();
098                    var8 = true;
099                }
100
101                if (var8)
102                {
103                    System.out.println("Opening via system class!");
104                    Sys.openURL("file://" + this.fileLocation);
105                }
106            }
107            else if (par1GuiButton.id == 6)
108            {
109                this.mc.renderEngine.refreshTextures();
110                this.mc.displayGuiScreen(this.guiScreen);
111            }
112            else
113            {
114                this.guiTexturePackSlot.actionPerformed(par1GuiButton);
115            }
116        }
117    }
118
119    /**
120     * Called when the mouse is clicked.
121     */
122    protected void mouseClicked(int par1, int par2, int par3)
123    {
124        super.mouseClicked(par1, par2, par3);
125    }
126
127    /**
128     * Called when the mouse is moved or a mouse button is released.  Signature: (mouseX, mouseY, which) which==-1 is
129     * mouseMove, which==0 or which==1 is mouseUp
130     */
131    protected void mouseMovedOrUp(int par1, int par2, int par3)
132    {
133        super.mouseMovedOrUp(par1, par2, par3);
134    }
135
136    /**
137     * Draws the screen and all the components in it.
138     */
139    public void drawScreen(int par1, int par2, float par3)
140    {
141        this.guiTexturePackSlot.drawScreen(par1, par2, par3);
142
143        if (this.refreshTimer <= 0)
144        {
145            this.mc.texturePackList.updateAvaliableTexturePacks();
146            this.refreshTimer += 20;
147        }
148
149        StringTranslate var4 = StringTranslate.getInstance();
150        this.drawCenteredString(this.fontRenderer, var4.translateKey("texturePack.title"), this.width / 2, 16, 16777215);
151        this.drawCenteredString(this.fontRenderer, var4.translateKey("texturePack.folderInfo"), this.width / 2 - 77, this.height - 26, 8421504);
152        super.drawScreen(par1, par2, par3);
153    }
154
155    /**
156     * Called from the main game loop to update the screen.
157     */
158    public void updateScreen()
159    {
160        super.updateScreen();
161        --this.refreshTimer;
162    }
163
164    static Minecraft func_73950_a(GuiTexturePacks par0GuiTexturePacks)
165    {
166        return par0GuiTexturePacks.mc;
167    }
168
169    static Minecraft func_73955_b(GuiTexturePacks par0GuiTexturePacks)
170    {
171        return par0GuiTexturePacks.mc;
172    }
173
174    static Minecraft func_73958_c(GuiTexturePacks par0GuiTexturePacks)
175    {
176        return par0GuiTexturePacks.mc;
177    }
178
179    static Minecraft func_73951_d(GuiTexturePacks par0GuiTexturePacks)
180    {
181        return par0GuiTexturePacks.mc;
182    }
183
184    static Minecraft func_73952_e(GuiTexturePacks par0GuiTexturePacks)
185    {
186        return par0GuiTexturePacks.mc;
187    }
188
189    static Minecraft func_73962_f(GuiTexturePacks par0GuiTexturePacks)
190    {
191        return par0GuiTexturePacks.mc;
192    }
193
194    static Minecraft func_73959_g(GuiTexturePacks par0GuiTexturePacks)
195    {
196        return par0GuiTexturePacks.mc;
197    }
198
199    static Minecraft func_73957_h(GuiTexturePacks par0GuiTexturePacks)
200    {
201        return par0GuiTexturePacks.mc;
202    }
203
204    static Minecraft func_73956_i(GuiTexturePacks par0GuiTexturePacks)
205    {
206        return par0GuiTexturePacks.mc;
207    }
208
209    static Minecraft func_73953_j(GuiTexturePacks par0GuiTexturePacks)
210    {
211        return par0GuiTexturePacks.mc;
212    }
213
214    static Minecraft func_73961_k(GuiTexturePacks par0GuiTexturePacks)
215    {
216        return par0GuiTexturePacks.mc;
217    }
218
219    static FontRenderer func_73960_l(GuiTexturePacks par0GuiTexturePacks)
220    {
221        return par0GuiTexturePacks.fontRenderer;
222    }
223
224    static FontRenderer func_73963_m(GuiTexturePacks par0GuiTexturePacks)
225    {
226        return par0GuiTexturePacks.fontRenderer;
227    }
228
229    static FontRenderer func_73954_n(GuiTexturePacks par0GuiTexturePacks)
230    {
231        return par0GuiTexturePacks.fontRenderer;
232    }
233}