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 import org.lwjgl.opengl.GL11; 007 008 @SideOnly(Side.CLIENT) 009 public class GuiEditSign extends GuiScreen 010 { 011 /** 012 * This String is just a local copy of the characters allowed in text rendering of minecraft. 013 */ 014 private static final String allowedCharacters = ChatAllowedCharacters.allowedCharacters; 015 016 /** The title string that is displayed in the top-center of the screen. */ 017 protected String screenTitle = "Edit sign message:"; 018 019 /** Reference to the sign object. */ 020 private TileEntitySign entitySign; 021 022 /** Counts the number of screen updates. */ 023 private int updateCounter; 024 025 /** The number of the line that is being edited. */ 026 private int editLine = 0; 027 028 public GuiEditSign(TileEntitySign par1TileEntitySign) 029 { 030 this.entitySign = par1TileEntitySign; 031 } 032 033 /** 034 * Adds the buttons (and other controls) to the screen in question. 035 */ 036 public void initGui() 037 { 038 this.controlList.clear(); 039 Keyboard.enableRepeatEvents(true); 040 this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120, "Done")); 041 this.entitySign.setEditable(false); 042 } 043 044 /** 045 * Called when the screen is unloaded. Used to disable keyboard repeat events 046 */ 047 public void onGuiClosed() 048 { 049 Keyboard.enableRepeatEvents(false); 050 NetClientHandler var1 = this.mc.getSendQueue(); 051 052 if (var1 != null) 053 { 054 var1.addToSendQueue(new Packet130UpdateSign(this.entitySign.xCoord, this.entitySign.yCoord, this.entitySign.zCoord, this.entitySign.signText)); 055 } 056 057 this.entitySign.setEditable(true); 058 } 059 060 /** 061 * Called from the main game loop to update the screen. 062 */ 063 public void updateScreen() 064 { 065 ++this.updateCounter; 066 } 067 068 /** 069 * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). 070 */ 071 protected void actionPerformed(GuiButton par1GuiButton) 072 { 073 if (par1GuiButton.enabled) 074 { 075 if (par1GuiButton.id == 0) 076 { 077 this.entitySign.onInventoryChanged(); 078 this.mc.displayGuiScreen((GuiScreen)null); 079 } 080 } 081 } 082 083 /** 084 * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e). 085 */ 086 protected void keyTyped(char par1, int par2) 087 { 088 if (par2 == 200) 089 { 090 this.editLine = this.editLine - 1 & 3; 091 } 092 093 if (par2 == 208 || par2 == 28) 094 { 095 this.editLine = this.editLine + 1 & 3; 096 } 097 098 if (par2 == 14 && this.entitySign.signText[this.editLine].length() > 0) 099 { 100 this.entitySign.signText[this.editLine] = this.entitySign.signText[this.editLine].substring(0, this.entitySign.signText[this.editLine].length() - 1); 101 } 102 103 if (allowedCharacters.indexOf(par1) >= 0 && this.entitySign.signText[this.editLine].length() < 15) 104 { 105 this.entitySign.signText[this.editLine] = this.entitySign.signText[this.editLine] + par1; 106 } 107 } 108 109 /** 110 * Draws the screen and all the components in it. 111 */ 112 public void drawScreen(int par1, int par2, float par3) 113 { 114 this.drawDefaultBackground(); 115 this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 40, 16777215); 116 GL11.glPushMatrix(); 117 GL11.glTranslatef((float)(this.width / 2), 0.0F, 50.0F); 118 float var4 = 93.75F; 119 GL11.glScalef(-var4, -var4, -var4); 120 GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); 121 Block var5 = this.entitySign.getBlockType(); 122 123 if (var5 == Block.signPost) 124 { 125 float var6 = (float)(this.entitySign.getBlockMetadata() * 360) / 16.0F; 126 GL11.glRotatef(var6, 0.0F, 1.0F, 0.0F); 127 GL11.glTranslatef(0.0F, -1.0625F, 0.0F); 128 } 129 else 130 { 131 int var8 = this.entitySign.getBlockMetadata(); 132 float var7 = 0.0F; 133 134 if (var8 == 2) 135 { 136 var7 = 180.0F; 137 } 138 139 if (var8 == 4) 140 { 141 var7 = 90.0F; 142 } 143 144 if (var8 == 5) 145 { 146 var7 = -90.0F; 147 } 148 149 GL11.glRotatef(var7, 0.0F, 1.0F, 0.0F); 150 GL11.glTranslatef(0.0F, -1.0625F, 0.0F); 151 } 152 153 if (this.updateCounter / 6 % 2 == 0) 154 { 155 this.entitySign.lineBeingEdited = this.editLine; 156 } 157 158 TileEntityRenderer.instance.renderTileEntityAt(this.entitySign, -0.5D, -0.75D, -0.5D, 0.0F); 159 this.entitySign.lineBeingEdited = -1; 160 GL11.glPopMatrix(); 161 super.drawScreen(par1, par2, par3); 162 } 163 }