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