001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 import org.lwjgl.input.Keyboard; 006 007 @SideOnly(Side.CLIENT) 008 public class GuiScreenServerList extends GuiScreen 009 { 010 /** 011 * Remembers the last hostname or IP address entered into text field between invocations of the GUI. 012 */ 013 private static String lastServerName = ""; 014 015 /** Needed a change as a local variable was conflicting on construct */ 016 private final GuiScreen guiScreen; 017 018 /** Instance of ServerData. */ 019 private final ServerData theServerData; 020 private GuiTextField serverTextField; 021 022 public GuiScreenServerList(GuiScreen par1GuiScreen, ServerData par2ServerData) 023 { 024 this.guiScreen = par1GuiScreen; 025 this.theServerData = par2ServerData; 026 } 027 028 /** 029 * Called from the main game loop to update the screen. 030 */ 031 public void updateScreen() 032 { 033 this.serverTextField.updateCursorCounter(); 034 } 035 036 /** 037 * Adds the buttons (and other controls) to the screen in question. 038 */ 039 public void initGui() 040 { 041 StringTranslate var1 = StringTranslate.getInstance(); 042 Keyboard.enableRepeatEvents(true); 043 this.controlList.clear(); 044 this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, var1.translateKey("selectServer.select"))); 045 this.controlList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); 046 this.serverTextField = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 116, 200, 20); 047 this.serverTextField.setMaxStringLength(128); 048 this.serverTextField.setFocused(true); 049 this.serverTextField.setText(lastServerName); 050 ((GuiButton)this.controlList.get(0)).enabled = this.serverTextField.getText().length() > 0 && this.serverTextField.getText().split(":").length > 0; 051 } 052 053 /** 054 * Called when the screen is unloaded. Used to disable keyboard repeat events 055 */ 056 public void onGuiClosed() 057 { 058 Keyboard.enableRepeatEvents(false); 059 lastServerName = this.serverTextField.getText(); 060 } 061 062 /** 063 * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). 064 */ 065 protected void actionPerformed(GuiButton par1GuiButton) 066 { 067 if (par1GuiButton.enabled) 068 { 069 if (par1GuiButton.id == 1) 070 { 071 this.guiScreen.confirmClicked(false, 0); 072 } 073 else if (par1GuiButton.id == 0) 074 { 075 this.theServerData.serverIP = this.serverTextField.getText(); 076 this.guiScreen.confirmClicked(true, 0); 077 } 078 } 079 } 080 081 /** 082 * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e). 083 */ 084 protected void keyTyped(char par1, int par2) 085 { 086 if (this.serverTextField.textboxKeyTyped(par1, par2)) 087 { 088 ((GuiButton)this.controlList.get(0)).enabled = this.serverTextField.getText().length() > 0 && this.serverTextField.getText().split(":").length > 0; 089 } 090 else if (par2 == 28) 091 { 092 this.actionPerformed((GuiButton)this.controlList.get(0)); 093 } 094 } 095 096 /** 097 * Called when the mouse is clicked. 098 */ 099 protected void mouseClicked(int par1, int par2, int par3) 100 { 101 super.mouseClicked(par1, par2, par3); 102 this.serverTextField.mouseClicked(par1, par2, par3); 103 } 104 105 /** 106 * Draws the screen and all the components in it. 107 */ 108 public void drawScreen(int par1, int par2, float par3) 109 { 110 StringTranslate var4 = StringTranslate.getInstance(); 111 this.drawDefaultBackground(); 112 this.drawCenteredString(this.fontRenderer, var4.translateKey("selectServer.direct"), this.width / 2, this.height / 4 - 60 + 20, 16777215); 113 this.drawString(this.fontRenderer, var4.translateKey("addServer.enterIp"), this.width / 2 - 100, 100, 10526880); 114 this.serverTextField.drawTextBox(); 115 super.drawScreen(par1, par2, par3); 116 } 117 }