001    package net.minecraft.src;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    import java.io.ByteArrayOutputStream;
006    import java.io.DataOutputStream;
007    import org.lwjgl.input.Keyboard;
008    
009    @SideOnly(Side.CLIENT)
010    public class GuiCommandBlock extends GuiScreen
011    {
012        /** Text field containing the command block's command. */
013        private GuiTextField commandTextField;
014    
015        /** Command block being edited. */
016        private final TileEntityCommandBlock commandBlock;
017    
018        public GuiCommandBlock(TileEntityCommandBlock par1)
019        {
020            this.commandBlock = par1;
021        }
022    
023        /**
024         * Called from the main game loop to update the screen.
025         */
026        public void updateScreen()
027        {
028            this.commandTextField.updateCursorCounter();
029        }
030    
031        /**
032         * Adds the buttons (and other controls) to the screen in question.
033         */
034        public void initGui()
035        {
036            StringTranslate var1 = StringTranslate.getInstance();
037            Keyboard.enableRepeatEvents(true);
038            this.controlList.clear();
039            this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, var1.translateKey("gui.done")));
040            this.controlList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel")));
041            this.commandTextField = new GuiTextField(this.fontRenderer, this.width / 2 - 150, 60, 300, 20);
042            this.commandTextField.setMaxStringLength(32767);
043            this.commandTextField.setFocused(true);
044            this.commandTextField.setText(this.commandBlock.getCommand());
045        }
046    
047        /**
048         * Called when the screen is unloaded. Used to disable keyboard repeat events
049         */
050        public void onGuiClosed()
051        {
052            Keyboard.enableRepeatEvents(false);
053        }
054    
055        /**
056         * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
057         */
058        protected void actionPerformed(GuiButton par1GuiButton)
059        {
060            if (par1GuiButton.enabled)
061            {
062                if (par1GuiButton.id == 1)
063                {
064                    this.mc.displayGuiScreen((GuiScreen)null);
065                }
066                else if (par1GuiButton.id == 0)
067                {
068                    String var2 = "MC|AdvCdm";
069                    ByteArrayOutputStream var3 = new ByteArrayOutputStream();
070                    DataOutputStream var4 = new DataOutputStream(var3);
071    
072                    try
073                    {
074                        var4.writeInt(this.commandBlock.xCoord);
075                        var4.writeInt(this.commandBlock.yCoord);
076                        var4.writeInt(this.commandBlock.zCoord);
077                        Packet.writeString(this.commandTextField.getText(), var4);
078                        this.mc.getSendQueue().addToSendQueue(new Packet250CustomPayload(var2, var3.toByteArray()));
079                    }
080                    catch (Exception var6)
081                    {
082                        var6.printStackTrace();
083                    }
084    
085                    this.mc.displayGuiScreen((GuiScreen)null);
086                }
087            }
088        }
089    
090        /**
091         * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
092         */
093        protected void keyTyped(char par1, int par2)
094        {
095            this.commandTextField.textboxKeyTyped(par1, par2);
096            ((GuiButton)this.controlList.get(0)).enabled = this.commandTextField.getText().trim().length() > 0;
097    
098            if (par1 == 13)
099            {
100                this.actionPerformed((GuiButton)this.controlList.get(0));
101            }
102        }
103    
104        /**
105         * Called when the mouse is clicked.
106         */
107        protected void mouseClicked(int par1, int par2, int par3)
108        {
109            super.mouseClicked(par1, par2, par3);
110            this.commandTextField.mouseClicked(par1, par2, par3);
111        }
112    
113        /**
114         * Draws the screen and all the components in it.
115         */
116        public void drawScreen(int par1, int par2, float par3)
117        {
118            StringTranslate var4 = StringTranslate.getInstance();
119            this.drawDefaultBackground();
120            this.drawCenteredString(this.fontRenderer, var4.translateKey("advMode.setCommand"), this.width / 2, this.height / 4 - 60 + 20, 16777215);
121            this.drawString(this.fontRenderer, var4.translateKey("advMode.command"), this.width / 2 - 150, 47, 10526880);
122            this.drawString(this.fontRenderer, var4.translateKey("advMode.nearestPlayer"), this.width / 2 - 150, 97, 10526880);
123            this.drawString(this.fontRenderer, var4.translateKey("advMode.randomPlayer"), this.width / 2 - 150, 108, 10526880);
124            this.drawString(this.fontRenderer, var4.translateKey("advMode.allPlayers"), this.width / 2 - 150, 119, 10526880);
125            this.commandTextField.drawTextBox();
126            super.drawScreen(par1, par2, par3);
127        }
128    }