001package net.minecraft.client.gui; 002 003import cpw.mods.fml.relauncher.Side; 004import cpw.mods.fml.relauncher.SideOnly; 005import net.minecraft.client.settings.GameSettings; 006import net.minecraft.client.settings.KeyBinding; 007import net.minecraft.util.EnumChatFormatting; 008import net.minecraft.util.StringTranslate; 009 010import net.minecraftforge.client.GuiControlsScrollPanel; 011 012@SideOnly(Side.CLIENT) 013public class GuiControls extends GuiScreen 014{ 015 /** 016 * A reference to the screen object that created this. Used for navigating between screens. 017 */ 018 private GuiScreen parentScreen; 019 020 /** The title string that is displayed in the top-center of the screen. */ 021 protected String screenTitle = "Controls"; 022 023 /** Reference to the GameSettings object. */ 024 private GameSettings options; 025 026 /** The ID of the button that has been pressed. */ 027 private int buttonId = -1; 028 029 private GuiControlsScrollPanel scrollPane; 030 031 public GuiControls(GuiScreen par1GuiScreen, GameSettings par2GameSettings) 032 { 033 this.parentScreen = par1GuiScreen; 034 this.options = par2GameSettings; 035 } 036 037 private int func_73907_g() 038 { 039 return this.width / 2 - 155; 040 } 041 042 /** 043 * Adds the buttons (and other controls) to the screen in question. 044 */ 045 public void initGui() 046 { 047 scrollPane = new GuiControlsScrollPanel(this, options, mc); 048 StringTranslate stringtranslate = StringTranslate.getInstance(); 049 this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height - 28, stringtranslate.translateKey("gui.done"))); 050 scrollPane.registerScrollButtons(buttonList, 7, 8); 051 this.screenTitle = stringtranslate.translateKey("controls.title"); 052 } 053 054 /** 055 * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). 056 */ 057 protected void actionPerformed(GuiButton par1GuiButton) 058 { 059 if (par1GuiButton.id == 200) 060 { 061 this.mc.displayGuiScreen(this.parentScreen); 062 } 063 } 064 065 /** 066 * Called when the mouse is clicked. 067 */ 068 protected void mouseClicked(int par1, int par2, int par3) 069 { 070 super.mouseClicked(par1, par2, par3); 071 } 072 073 /** 074 * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e). 075 */ 076 protected void keyTyped(char par1, int par2) 077 { 078 if (scrollPane.keyTyped(par1, par2)) 079 { 080 super.keyTyped(par1, par2); 081 } 082 } 083 084 /** 085 * Draws the screen and all the components in it. 086 */ 087 public void drawScreen(int par1, int par2, float par3) 088 { 089 this.drawDefaultBackground(); 090 /* Forge Start: Moved all rendering to GuiControlsScrollPanel 091 this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); 092 int k = this.func_73907_g(); 093 int l = 0; 094 095 while (l < this.options.keyBindings.length) 096 { 097 boolean flag = false; 098 int i1 = 0; 099 100 while (true) 101 { 102 if (i1 < this.options.keyBindings.length) 103 { 104 if (i1 == l || this.options.keyBindings[l].keyCode != this.options.keyBindings[i1].keyCode) 105 { 106 ++i1; 107 continue; 108 } 109 110 flag = true; 111 } 112 113 if (this.buttonId == l) 114 { 115 ((GuiButton)this.buttonList.get(l)).displayString = "" + EnumChatFormatting.WHITE + "> " + EnumChatFormatting.YELLOW + "??? " + EnumChatFormatting.WHITE + "<"; 116 } 117 else if (flag) 118 { 119 ((GuiButton)this.buttonList.get(l)).displayString = EnumChatFormatting.RED + this.options.getOptionDisplayString(l); 120 } 121 else 122 { 123 ((GuiButton)this.buttonList.get(l)).displayString = this.options.getOptionDisplayString(l); 124 } 125 126 this.drawString(this.fontRenderer, this.options.getKeyBindingDescription(l), k + l % 2 * 160 + 70 + 6, this.height / 6 + 24 * (l >> 1) + 7, -1); 127 ++l; 128 break; 129 } 130 } 131 */ 132 scrollPane.drawScreen(par1, par2, par3); 133 drawCenteredString(fontRenderer, screenTitle, width / 2, 4, 0xffffff); 134 //Forge End 135 136 super.drawScreen(par1, par2, par3); 137 } 138}