001    package net.minecraft.tileentity;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import net.minecraft.nbt.NBTTagCompound;
006    import net.minecraft.network.packet.Packet;
007    import net.minecraft.network.packet.Packet130UpdateSign;
008    
009    public class TileEntitySign extends TileEntity
010    {
011        /** An array of four strings storing the lines of text on the sign. */
012        public String[] signText = new String[] {"", "", "", ""};
013    
014        /**
015         * The index of the line currently being edited. Only used on client side, but defined on both. Note this is only
016         * really used when the > < are going to be visible.
017         */
018        public int lineBeingEdited = -1;
019        private boolean isEditable = true;
020    
021        /**
022         * Writes a tile entity to NBT.
023         */
024        public void writeToNBT(NBTTagCompound par1NBTTagCompound)
025        {
026            super.writeToNBT(par1NBTTagCompound);
027            par1NBTTagCompound.setString("Text1", this.signText[0]);
028            par1NBTTagCompound.setString("Text2", this.signText[1]);
029            par1NBTTagCompound.setString("Text3", this.signText[2]);
030            par1NBTTagCompound.setString("Text4", this.signText[3]);
031        }
032    
033        /**
034         * Reads a tile entity from NBT.
035         */
036        public void readFromNBT(NBTTagCompound par1NBTTagCompound)
037        {
038            this.isEditable = false;
039            super.readFromNBT(par1NBTTagCompound);
040    
041            for (int var2 = 0; var2 < 4; ++var2)
042            {
043                this.signText[var2] = par1NBTTagCompound.getString("Text" + (var2 + 1));
044    
045                if (this.signText[var2].length() > 15)
046                {
047                    this.signText[var2] = this.signText[var2].substring(0, 15);
048                }
049            }
050        }
051    
052        /**
053         * Overriden in a sign to provide the text.
054         */
055        public Packet getDescriptionPacket()
056        {
057            String[] var1 = new String[4];
058            System.arraycopy(this.signText, 0, var1, 0, 4);
059            return new Packet130UpdateSign(this.xCoord, this.yCoord, this.zCoord, var1);
060        }
061    
062        public boolean isEditable()
063        {
064            return this.isEditable;
065        }
066    
067        @SideOnly(Side.CLIENT)
068    
069        /**
070         * Sets the sign's isEditable flag to the specified parameter.
071         */
072        public void setEditable(boolean par1)
073        {
074            this.isEditable = par1;
075        }
076    }