    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    }