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 }