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