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