001 package net.minecraft.client.gui;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import net.minecraft.client.settings.EnumOptions;
006 import net.minecraft.client.settings.GameSettings;
007 import net.minecraft.util.StatCollector;
008 import net.minecraft.util.StringTranslate;
009
010 @SideOnly(Side.CLIENT)
011 public 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 }