001package net.minecraft.client.gui;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.client.settings.EnumOptions;
006import net.minecraft.client.settings.GameSettings;
007import net.minecraft.util.StatCollector;
008import net.minecraft.util.StringTranslate;
009
010@SideOnly(Side.CLIENT)
011public class GuiOptions extends GuiScreen
012{
013    /**
014     * An array of options that can be changed directly from the options GUI.
015     */
016    private static final EnumOptions[] relevantOptions = new EnumOptions[] {EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY, EnumOptions.TOUCHSCREEN};
017
018    /**
019     * A reference to the screen object that created this. Used for navigating between screens.
020     */
021    private final GuiScreen parentScreen;
022
023    /** Reference to the GameSettings object. */
024    private final GameSettings options;
025
026    /** The title string that is displayed in the top-center of the screen. */
027    protected String screenTitle = "Options";
028
029    public GuiOptions(GuiScreen par1GuiScreen, GameSettings par2GameSettings)
030    {
031        this.parentScreen = par1GuiScreen;
032        this.options = par2GameSettings;
033    }
034
035    /**
036     * Adds the buttons (and other controls) to the screen in question.
037     */
038    public void initGui()
039    {
040        StringTranslate var1 = StringTranslate.getInstance();
041        int var2 = 0;
042        this.screenTitle = var1.translateKey("options.title");
043        EnumOptions[] var3 = relevantOptions;
044        int var4 = var3.length;
045
046        for (int var5 = 0; var5 < var4; ++var5)
047        {
048            EnumOptions var6 = var3[var5];
049
050            if (var6.getEnumFloat())
051            {
052                this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 - 12 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6)));
053            }
054            else
055            {
056                GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 - 12 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6));
057
058                if (var6 == EnumOptions.DIFFICULTY && this.mc.theWorld != null && this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled())
059                {
060                    var7.enabled = false;
061                    var7.displayString = StatCollector.translateToLocal("options.difficulty") + ": " + StatCollector.translateToLocal("options.difficulty.hardcore");
062                }
063
064                this.controlList.add(var7);
065            }
066
067            ++var2;
068        }
069
070        this.controlList.add(new GuiButton(101, this.width / 2 - 152, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.video")));
071        this.controlList.add(new GuiButton(100, this.width / 2 + 2, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.controls")));
072        this.controlList.add(new GuiButton(102, this.width / 2 - 152, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.language")));
073        this.controlList.add(new GuiButton(103, this.width / 2 + 2, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.multiplayer.title")));
074        this.controlList.add(new GuiButton(104, this.width / 2 + 2, this.height / 6 + 144 - 6, 150, 20, var1.translateKey("options.snooper.view")));
075        this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done")));
076    }
077
078    /**
079     * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
080     */
081    protected void actionPerformed(GuiButton par1GuiButton)
082    {
083        if (par1GuiButton.enabled)
084        {
085            if (par1GuiButton.id < 100 && par1GuiButton instanceof GuiSmallButton)
086            {
087                this.options.setOptionValue(((GuiSmallButton)par1GuiButton).returnEnumOptions(), 1);
088                par1GuiButton.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(par1GuiButton.id));
089            }
090
091            if (par1GuiButton.id == 101)
092            {
093                this.mc.gameSettings.saveOptions();
094                this.mc.displayGuiScreen(new GuiVideoSettings(this, this.options));
095            }
096
097            if (par1GuiButton.id == 100)
098            {
099                this.mc.gameSettings.saveOptions();
100                this.mc.displayGuiScreen(new GuiControls(this, this.options));
101            }
102
103            if (par1GuiButton.id == 102)
104            {
105                this.mc.gameSettings.saveOptions();
106                this.mc.displayGuiScreen(new GuiLanguage(this, this.options));
107            }
108
109            if (par1GuiButton.id == 103)
110            {
111                this.mc.gameSettings.saveOptions();
112                this.mc.displayGuiScreen(new ScreenChatOptions(this, this.options));
113            }
114
115            if (par1GuiButton.id == 104)
116            {
117                this.mc.gameSettings.saveOptions();
118                this.mc.displayGuiScreen(new GuiSnooper(this, this.options));
119            }
120
121            if (par1GuiButton.id == 200)
122            {
123                this.mc.gameSettings.saveOptions();
124                this.mc.displayGuiScreen(this.parentScreen);
125            }
126        }
127    }
128
129    /**
130     * Draws the screen and all the components in it.
131     */
132    public void drawScreen(int par1, int par2, float par3)
133    {
134        this.drawDefaultBackground();
135        this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 15, 16777215);
136        super.drawScreen(par1, par2, par3);
137    }
138}