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 }