001package net.minecraft.client.gui; 002 003import cpw.mods.fml.relauncher.Side; 004import cpw.mods.fml.relauncher.SideOnly; 005import java.io.ByteArrayOutputStream; 006import java.io.DataOutputStream; 007import net.minecraft.network.packet.Packet; 008import net.minecraft.network.packet.Packet250CustomPayload; 009import net.minecraft.tileentity.TileEntityCommandBlock; 010import net.minecraft.util.StringTranslate; 011import org.lwjgl.input.Keyboard; 012 013@SideOnly(Side.CLIENT) 014public 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 private GuiButton doneBtn; 022 private GuiButton cancelBtn; 023 024 public GuiCommandBlock(TileEntityCommandBlock par1) 025 { 026 this.commandBlock = par1; 027 } 028 029 /** 030 * Called from the main game loop to update the screen. 031 */ 032 public void updateScreen() 033 { 034 this.commandTextField.updateCursorCounter(); 035 } 036 037 /** 038 * Adds the buttons (and other controls) to the screen in question. 039 */ 040 public void initGui() 041 { 042 StringTranslate stringtranslate = StringTranslate.getInstance(); 043 Keyboard.enableRepeatEvents(true); 044 this.buttonList.clear(); 045 this.buttonList.add(this.doneBtn = new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, stringtranslate.translateKey("gui.done"))); 046 this.buttonList.add(this.cancelBtn = new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, stringtranslate.translateKey("gui.cancel"))); 047 this.commandTextField = new GuiTextField(this.fontRenderer, this.width / 2 - 150, 60, 300, 20); 048 this.commandTextField.setMaxStringLength(32767); 049 this.commandTextField.setFocused(true); 050 this.commandTextField.setText(this.commandBlock.getCommand()); 051 this.doneBtn.enabled = this.commandTextField.getText().trim().length() > 0; 052 } 053 054 /** 055 * Called when the screen is unloaded. Used to disable keyboard repeat events 056 */ 057 public void onGuiClosed() 058 { 059 Keyboard.enableRepeatEvents(false); 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.mc.displayGuiScreen((GuiScreen)null); 072 } 073 else if (par1GuiButton.id == 0) 074 { 075 String s = "MC|AdvCdm"; 076 ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(); 077 DataOutputStream dataoutputstream = new DataOutputStream(bytearrayoutputstream); 078 079 try 080 { 081 dataoutputstream.writeInt(this.commandBlock.xCoord); 082 dataoutputstream.writeInt(this.commandBlock.yCoord); 083 dataoutputstream.writeInt(this.commandBlock.zCoord); 084 Packet.writeString(this.commandTextField.getText(), dataoutputstream); 085 this.mc.getNetHandler().addToSendQueue(new Packet250CustomPayload(s, bytearrayoutputstream.toByteArray())); 086 } 087 catch (Exception exception) 088 { 089 exception.printStackTrace(); 090 } 091 092 this.mc.displayGuiScreen((GuiScreen)null); 093 } 094 } 095 } 096 097 /** 098 * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e). 099 */ 100 protected void keyTyped(char par1, int par2) 101 { 102 this.commandTextField.textboxKeyTyped(par1, par2); 103 this.doneBtn.enabled = this.commandTextField.getText().trim().length() > 0; 104 105 if (par2 != 28 && par1 != 13) 106 { 107 if (par2 == 1) 108 { 109 this.actionPerformed(this.cancelBtn); 110 } 111 } 112 else 113 { 114 this.actionPerformed(this.doneBtn); 115 } 116 } 117 118 /** 119 * Called when the mouse is clicked. 120 */ 121 protected void mouseClicked(int par1, int par2, int par3) 122 { 123 super.mouseClicked(par1, par2, par3); 124 this.commandTextField.mouseClicked(par1, par2, par3); 125 } 126 127 /** 128 * Draws the screen and all the components in it. 129 */ 130 public void drawScreen(int par1, int par2, float par3) 131 { 132 StringTranslate stringtranslate = StringTranslate.getInstance(); 133 this.drawDefaultBackground(); 134 this.drawCenteredString(this.fontRenderer, stringtranslate.translateKey("advMode.setCommand"), this.width / 2, this.height / 4 - 60 + 20, 16777215); 135 this.drawString(this.fontRenderer, stringtranslate.translateKey("advMode.command"), this.width / 2 - 150, 47, 10526880); 136 this.drawString(this.fontRenderer, stringtranslate.translateKey("advMode.nearestPlayer"), this.width / 2 - 150, 97, 10526880); 137 this.drawString(this.fontRenderer, stringtranslate.translateKey("advMode.randomPlayer"), this.width / 2 - 150, 108, 10526880); 138 this.drawString(this.fontRenderer, stringtranslate.translateKey("advMode.allPlayers"), this.width / 2 - 150, 119, 10526880); 139 this.commandTextField.drawTextBox(); 140 super.drawScreen(par1, par2, par3); 141 } 142}