001    package net.minecraft.client.texturepacks;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import java.io.File;
006    import java.io.IOException;
007    import java.net.URI;
008    import net.minecraft.client.Minecraft;
009    import net.minecraft.client.gui.FontRenderer;
010    import net.minecraft.client.gui.GuiButton;
011    import net.minecraft.client.gui.GuiScreen;
012    import net.minecraft.client.gui.GuiSmallButton;
013    import net.minecraft.util.EnumOS;
014    import net.minecraft.util.StringTranslate;
015    import org.lwjgl.Sys;
016    
017    @SideOnly(Side.CLIENT)
018    public 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    }